阿里巴巴资深数据库架构师黄欢欢在2017云起大会苏州峰会上与大家分享了cloud 企业级数据库 architecture之路。主要分享了企业级数据库架构的构建,包括异地多活、数据库容器化、混合云架构、计算与存储分离、数据库与离线混合分布,包括X-DB、HDM等重要云产品。
企业级数据库架构有三个基本要求。第一个问题是扩张,业务发展很快,单站点资源容量有限;第二个问题是弹性,双十一对弹性伸缩的需求;第三个问题是成本,即在最小的预算成本内实现业务目标。
为了满足这三个要求,阿里巴巴在数据库架构上做了很多探索和改进,包括异地多活升级、数据库容器化、混合云架构、计算和存储分离、数据库和线下混合分布等。
第一步:异地多活
从数据库的角度来看,在设计原则上要遵循两条规则。第一,数据要从一个角度拆分,保证数据不会被重复写入;二是单位内部业务封闭。比如在下单的过程中,你需要登录,扣库存,扣折扣,登录一个单位,扣库存跳转到另一个单位,会导致混乱。所以企业级数据库的设计很简单:每个区域有一个独立的DRDS集群,DTS数据在区域之间实时传输。
生活基金会:DTS
DTS可以打通各种异构数据源之间的数据流,使数据发挥更大的商业价值。它来自于阿里去IOE和异地多活跃架构的实践。在典型的业务场景下,比如异地多活动,单元之间的数据同步可以通过DTS实时同步/分发,延迟在秒级以内;此外,异构数据源之间的迁移也可以通过DTS来实现。
X-DB多区域部署
并非所有数据都可以写入每个区域。比如库存数据一般只写单点,多点读取。在这种业务场景下,如果使用原有的业务架构,当一个中心挂掉实现异地容灾时,由于单元之间的数据是异步和同步的,割接后数据不一定强一致。因此,我们提供了第二代分布式关系数据库X-DB。
通过X-DB多区域部署库存,如图所示。主备五个节点保证主节点写的每一条日志都必须与三个以上的备份节点同步,才能返回业务成功。因此,X-DB的优势包括以下四个方面:
1、区域级强一致性,使单个区域无法使用,0数据丢失;
2、高性能。跨区域强同步下仍保持高性能;
3、灵活的切换策略。优先切换到同一Region,定制跨Region切换顺序;
4、高可扩展性。区域/AZ内节点无限扩展,Region/AZ内节点自由调整。
第二步:DB容器化
多活升级之后,下一步就是尝试做数据库容器化。
一方面,我们在Docker中做了AliSQL,通过一个统一的一级调度来支持数据库的二级调度,比如主备容器的规格。Alisin Docker支持数据库业务逻辑的调度策略,构建完善的资源隔离方案,并已实现100%容器化;
另一方面,我们在高性能ECS中做了AliSQL,使用SPDK+NVMe存储和DPDK网络。整体测试表明,与同规格的物理机相比,虚拟化带来的损耗最低,性能降低不到5%。
企业级数据库容器化是数据库构建可扩展架构的基础部分。只有在容器化之后,架构才能进一步发展。
第三步:弹性混合云
在日常流量下,用户可以在自建IDC下运行,大促时使用弹性混合云架构,大促前弹性扩容数据库,大促后返还申请的ECS资源。一个月内可以完成扩容和反弹。为什么我们有这么快的弹性?这有赖于新的云产品混合云数据库管理平台。
我们可以一键构建一个新的数据库云单元。混合云数据库管理主要提供三块内容。
1、统一管理:HDM可以对云下的数据库进行统一管理;
2、快速灵活:比如原来的数据库在云下,大提升的时候把只读节点加到云上,大提升之后再把只读节点销毁。也可以在云上快速搭建大规模资源,支撑业务后再弹下来,最大限度发挥云资源的灵活性;
3、容灾切换:当自建IDC出现问题时,HDM提供数据库容灾切换能力,包括云到云的切换,或者云到云的切换。
第四步:计算存储分离
在完成了异地活度架构、数据库容器化、混合云架构之后,我们和应用还是有区别的。容器化后可以快速调度应用程序,但数据库还不可用。为什么?因为应用是无状态的,而数据库是有状态的,而且数据库下面拖着数据,如果有持久的数据,就没有办法达到和应用一样的灵活性。因此,我们必须将计算和存储分开。
那么,为什么要把计算和存储分开呢?有四个原因:
1、为了更灵活,需要去状态化DB,将计算节点与存储分离,使调度更容易;
2、取消计算和存储的绑定,如果计算节点需要扩展2倍,存储节点需要扩展4倍,分别扩展计算和存储容量。另外,如果数据存储在统一存储中,磁盘碎片会大大减少;
3、计算节点不再需要冗余,节约了成本;
4、它为混合数据库的在线和离线任务提供了基础。
企业级数据库计算存储分离的架构如图所示。AliSQL是计算层,计算层和存储层之间使用25G TCP/RDMA网络。存储层根据一定的规则和数据可靠性要求将数据分散在不同的机架和集群中。
计算和存储的分离面临巨大的技术挑战,需要高吞吐量和时延。我们需要在各个方面进行大量优化,包括:
分布式存储优化:长尾延迟优化,写三反二;部分恢复,减少对网上业务的影响。
数据库优化:AliSQL吞吐量优化,提升100%;原子写优化,关闭双写缓冲区提高吞吐量;延迟接近本地磁盘。
软硬件优化:RDMA网络协议、SPDK用户态文件系统等。
第五步: DB和离线混部
为了进一步降低成本,我们将数据库与离线任务混合运行。
实现了计算和存储的分离后,就可以得到离线混合,这样离线的机器就可以用来计算资源,存储资源还是放在分布式存储中。可以看到,在大推送时,数据库计算节点被弹到离线机器上与离线任务一起运行;在日常操作中,离线和在线任务被调度到数据库节点以提高资源利用率。那么,如何保证资源隔离呢?我们制作了独立于CPU的socket来避免L3缓存的干扰,并标记了NetQos来保证优先级。此外,我们还构建了离开联机混合部分时的弹性能力,使得计算节点快速上下,MySQL BP和容器规范动态伸缩。
企业级数据库架构由多活性、X-DB、容器化、混合云、计算和存储分离、DB离线混合构建而成。