容器化RDS|计算存储分离 or 本地存储?
回顾:计算存储分离, 本地存储优缺点
MySQL 基于本地存储实现数据零丢失
性能对比
基于 Docker + Kubernetes 的实现
计算存储分离
架构清晰
计算资源 / 存储资源独立扩展
提升实例密度,优化硬件利用率
简化实例切换流程:将有状态的数据下沉到存储层,Scheduler 调度时,无需感知计算节点的存储介质,只需调度到满足计算资源要求的 Node,数据库实例启动时,只需在分布式文件系统挂载 mapping volume 即可。可以显著的提高数据库实例的部署密度和计算资源利用率。
以 MySQL 为例
通用性更好,同时适用于 Oracle、MySQL,详见:《容器化RDS——计算存储分离架构下的"Split-Brain"》。
引入分布式存储,架构复杂度加大。一旦涉及到分布式存储的问题,DBA 无法闭环解决。
分布式存储选型:
选择商用,有 Storage Verdor Lock In 风险。
选择开源,大多数用户(包括沃趣)都测试过 GlusterFS 和 Ceph,针对数据库(Sensitive Lantency)场景,性能完全无法接受。
本地存储
物理容量受限于单机容量;
调度更复杂,选定数据库实例的存储类型(比如 SSD)后,一旦该实例发生“failover”,只能调度到拥有 SSD 的物理节点,这导致调度器需要对物理节点“Physical Topology Aware”;
密度难提升,这是“Physical Topology Aware”的副作用;
因数据库的不同方案差异性较大,通用性无法保证。
单位时间内事务能力(TPS)会跟集群成员数量成反比
增加集群成员会显著且无法预期的增加事务响应时间
增加了集群成员数据复制的冲突和死锁的可能性
将基于 binlog 改为基于 write-set,write-set 中包含修改的数据,Global Transaction ID(后面简称 GTID)和 Primary Key。
GTID 类似 45eec521-2f34-11e0-0800-2a36050b826b:94530586304
94530586304 为 64-bit 有符号整型,用来表示事务在序列中的位置
将传统的 Synchronous Replication 改为 Deferred Update Replication,并将整个过程大致分解成四个阶段,本地阶段、发送阶段、验证阶段和应用阶段,其中:
本地阶段:乐观执行,在事务 Commit 前,假设该 Transcation 在集群中复制时不会产生冲突。
发送阶段:优化同步时间窗口,除去全局排序并获取 GTID 为同步操作,冲突验证和事务应用都为异步,极大的优化了复制效率。
验证阶段:只有收到该事务的所有前置事务后(不能有 “hole”),该事务和所有未执行的前置事务才能并发验证,不然不能保证 Global Ordering,因此这里需要牺牲效率,引入一定的串行化。
需要等待事务 3
3 数据库节点:
4 数据库节点:设置权重避免”split-brain” (⅙ + ⅙ ) + ⅓ + ⅓
5 数据库节点:
6 数据库节点:
7 数据库节点 : 可支持两种拓扑关系
基于Corosync实现(Totem协议),插件式安装,MySQL 官方原生插件。
集群架构,支持多写(建议单写)
允许少数节点故障,同步延迟较小,保证强一致,数据零丢失
单位时间的交易量受 flow control 影响。
该项目由 Youtube 开源,从文档看功能极为强大,高度产品化。
作为第二个存储类项目(第一个是 Rook,有意思是存储类而不是数据库类)加入 CNCF,目前还处于孵化阶段(incubation-level)。
笔者没有使用经验,也不知道国内有哪些用户,不做评论。
MGR 5.7.17 / PXC 5.7.14-26.17
MGR 5.7.17 / PXC 5.7.17-29.20 / MariaDB 10.2.5 RC
本地存储 / 计算存储分离
性能对比 1:MGR 5.7.17 / PXC 5.7.14-26.17
MGR 5.7.17 对比 PXC 5.7.14-26.17(基于 Galera 3实现)
负载模型:OLTP Read/Write (RW)
durability:sync_binlog=1,innodb_flush_log_at_trx_commit=1
non-durability:sync_binlog=0,innodb_flush_log_at_trx_commit=2
性能对比 2:MGR 5.7.17 / PXC 5.7.17-29.20 / MariaDB 10.2.5 RC
增加了 MariaDB 参与对比
PXC 升级到 5.7.17-29.20,该版本改进了MySQL write-set 复制层性能[3]。
负载模型:依然使用 OLTP Read/Write (RW)
durability:sync_binlog=1
non-durability:sync_binlog=0
性能对比3:本地存储 / 计算存储分离
Docker + Kubernetes + MGR / Galera Cluster
Docker + Kubernetes + PXC
Docker + Kubernetes + MGC
Docker + Kubernetes + MGR
Docker + Kubernetes + Vitess
运维:部署、备份
弹性:计算存储扩容,集群扩容
高可用:比如 “failover” 的细微差别对业务的影响
容错:比如网络对集群的影响,尤其是在网络抖动或有明显延时的情况下
社区活跃度
……
《人月神话》中提到“No Silver Bullet”,原意是用来论述软件工程领域的生产力问题。 由于软件的复杂性本质,使得真正的银弹并不存在,没有任何一项技术或方法可使软件工程的生产力在十年内提高十倍。
相关链接
https://dev.mysql.com/doc/refman/5.7/en/group-replication-background.html
http://mysqlhighavailability.com/performance-evaluation-mysql-5-7-group-replication/
https://www.percona.com/blog/2017/04/19/performance-improvements-percona-xtradb-cluster-5-7-17/
https://github.com/kubernetes/kubernetes/tree/master/examples/storage/mysql-galera
https://github.com/kubernetes/kubernetes/tree/master/examples/storage/vitess
相关链接
杭州沃趣科技股份有限公司创建于2012年(股票代码:839849),是一家专注为企业用户提供基于高性能、高可用、可扩展的开放数据库云平台解决方案的国产厂商。公司创始团队为原阿里巴巴数据库及运维团队核心骨干,凭借丰富的运维经验,为行业客户提供数据库云产品及软硬件一体化解决方案。
公司产品已广泛应用于证券、保险、医疗、广电传媒、银行、电信、能源电力、快递物流、公共事业、大型企业等,为这些行业用户持续提供行业解决方案及服务支持。
公司先后获得国家级高新技术企业、杭州市高新技术企业、杭州高新区瞪羚企业等称号,并设有杭州市安全可控数据库技术研发中心。公司总部位于杭州,同时在北京、上海、广州、南京、兰州建立了分支机构,拥有辐射全国的销售和服务体系。
我们始终坚信,数据是驱动企业创新的源动力!坚持围绕企业数据库做好一件事
——让高性能触手可及!