工行“去O”数据库选型与分布式架构设计( 三 )

2、方案选型调研
大家可以看下工行的选型过程 , 希望可以给大家带来一定的参考:

工行“去O”数据库选型与分布式架构设计

文章插图
 
工行的技术规划是相当严谨的 , 所以当时我们从五个层次进行了考量:OLTP分布式数据库、NewSQL数据库、支持分布式架构、自主可控、开源抑或商业 。
当时我们的第一个疑问是 , 到底是选NoSQL、NewSQL还是关系型数据库 。
当时MongoDB、redis、Cassandra、HBASE等NoSQL数据库开始在某些场景下大热 , 但是可用场景不满足我们的OLTP业务场景需求;NewSQL随着google的Spanner和F1开始进入大家的视野 , 但是国内可以考据的只有相关的paper;国产的TiDB也是小荷初露尖尖角 , 但是毕竟还是幼儿期 。
而DB-Egines发布的《2016年全球数据库大盘点》 , Oracle、MySQL 和SQL Server三大数据库产品遥遥领先 。MySQL当时在互联网公司的名气是越来越响 , 谷歌、淘宝、百度、腾讯、豆瓣、网易、脸书等都使用了MySQL 。一方面MySQL提供了免费版 , 另一方面Oracle收购Sun后 , 可以很明显的看到MySQL越来越规范 , 5.5、5.6、5.7均可以看到很明显的提升 , 5.7号称性能是5.6的3倍 , 5.6号称是5.5的2倍 。
为此 , 我们经过谨慎的验证 , 选取了MySQL作为分布式数据库的第一选型 , 毕竟业界有很多丰富的案例 , 而且在互联网企业里面得到了很好的实践 , 在业界资源案例和周边产品都很丰富 , 能应对我行的高并发、弹性扩展需求 , 同时其具有如下特点:
  • 开源 , 基于GPL(GNU通用许可证)可以免费使用修改 , 当时很多公司都基于MySQL进行了深入定制 , 但是在与他们的交流过程中 , 发现版本归并真的是一种梦魇;
  • 高可用 , 具有优秀的架构设计及相当丰富的周边产品 , 实现了企业级的高可用性和高扩展性;
  • 免费 , 有效降低企业运行成本;
  • 趋势 , 产品成熟度、排名一直遥遥领先 , 占行业应用的比重增大 , 产业链丰富 , 从业人员有规模效应 。
然后我们选择了MySQL 5.7 , 其相较之前的版本有6个优点:
  • InnoDB增强 , 在线修改ibp , 快速扩展VARCHAR , UNDO可回收 , 可关闭死锁检测;
  • 复制增强 , 多源复制 , 基于WRITESET的并行复制 , 增强半同步 , 在线设置repl filter;
  • 优化器增强 , 几乎重构优化器 , EXPLAIN增强 , 引入Optimizer Hints;
  • 安全性增强 , 新增密码过期机制 , 支持账号锁定等;
  • 功能增强 , 默认开启PFS , 新增sys schema等;
  • 其他增强 , 支持多个触发器 , 新增Query Rewrite , 支持设置SQL执行最长时间 。
3、方案技术栈
工行“去O”数据库选型与分布式架构设计

文章插图
 
基于MySQL选型 , 还应考虑一系列的分布式架构技术栈 , 包括分布式服务、分布式事务框架、分布式批量框架、分布式缓存、交易数据核对及补偿、分布式消息、配置中心、开发及运维管理 。这里提醒下大家 , 在选型上没有最好的产品 , 只有最适合自己的产品 。
1)分布式事务 , 业界实际上有多种解决方案 , 2PC(2阶段式事务提交)、3PC、TCC和SAGA模型等等 , 我们这4种方案我行都有应用在使用 , 互为补充 , 满足不同业务场景对事务强一致性或最终一致性的要求 。
2)业务层面 , 在交易或者应用级层面进行数据核对及补偿 , 有些场景就是在传统的 OLTP 的情况下 , 也会对应用上下游进行核对和补偿 。
3)分布式消息 , 我们选取了Kafka作为分布式消息中间件 。
4)分布式批量框架 , 在大规模的数据结点上进行批量操作的一个整体的解决方案 。
5)运维层面 , 我行建立了统一的运维管理平台 , 纳入所有数据库节点 , 实现一键式的数据库安装、版本升级、基线参数配置等等 。并且实现了多种高可用策略配置 , 包括自动、人工一键式切换 。


推荐阅读