本文内容及分析,根据公开技术资料整理
1. AWS Aurora(shared storage)
- 整体思路:log is data,InnoDB中1个page是16KB,而redo只记录了真实的数据变更,因此,事务中data page变更量远大于redo的数据量,通过规避写data page,达到减少网络IO的目标,具体的,计算节点只将redo写到存储层,由存储层负责从redo中构建出data page
- 计算层:1个primary节点,多个replica节点,写数据时,计算节点与多个存储节点交互,至少4/6个存储节点返回才能成功
- 存储层:按照设计,Aurora一共存储有6份数据,除了存储功能外,存储节点有计算逻辑,应用redo以构建出data page,存储节点之间有gossip做数据同步的兜底,但不依赖raft/paxos之类的数据同步机制,后文会提到,这点和CynosDB不同
2. Aliyun PolarDB(shared disk)
- 整体思路:本质是共享存储的思路,其存放了所有的data page和redo log,因为data page需要写到共享存储,网络IO开销远大于Aurora,PolarDB引入了RDMA技术来优化这个问题
- 计算层:1个primary节点,多个replica节点,写入数据时,primary节点将data page和redo写到存储leader,并会向replica节点同步状态变更,replica节点从存储节点中获取最新的redo,完成buffer pool中的数据更新
- 存储层:存储节点之间通过parallel-raft协议同步数据,组成PolarStore,挂载到所有计算节点下,有点类似于NFS,相对Aurora,PolarDB的存储节点没有计算逻辑
3. Tencent CynosDB(shared storage)
- 整体思路:log is data,思路更接近Aurora,计算节点只将redo写到存储层,存储层从redo构建出data page,减少计算层与存储层的网络IO
- 计算层:1个primary节点,多个replica节点,计算节点将redo写入到存储层的同时,会同步给replica节点,以便replica更新buffer pool中数据
- 存储层:基于TXStore分布式存储(通过raft协议复制数据),但加入了计算逻辑,接收计算节点写入的redo,异步重放,生成data block/page
总结:
- Aurora是log is data的思路,计算节点只写入redo到存储层,存储层负责应用redo生成data page,写入数据时,计算节点需要与多个存储节点交互,4/6成功后才能返回,优势是通过并发的方式可以做到只有1跳网络延迟
- PolarDB是共享存储的思路(share everything),事务的data page和redo由计算节点写入到分布式文件系统PolarFS,通过RDMA技术优化写data page带来的网络IO问题
- CynosDB整体思路上是类似Aurora的,log is data,计算层只将redo写入到存储层,存储层应用redo来生成data page,但与Aurora不同的是,存储层TXStore是通过raft机制做数据同步的,写入会由leader将数据复制到replica节点,因此会有2跳网络延迟,但是简化了写入逻辑
- 上述云原生数据库能够快速扩容,在于计算层能够快速垂直/水平扩展,没有传统主从集群搭建备库时的数据加载过程
参考:
- Amazon Aurora 读后感,https://zhuanlan.zhihu.com/p/30159571
- https://www.percona.com/live/18/sessions/polardb-innodb-based-shared-everything-storage-solution
- 阿里云新一代关系型数据库 PolarDB 剖析,https://www.infoq.cn/news/2017/08/ali-polardb/
- 感恩节腾讯黑科技CynosDB深度技术内幕分析,https://zhuanlan.zhihu.com/p/50731221
- 腾讯云TDSQL-C架构解析,https://mp.weixin.qq.com/s/sl4sHjowf1wwzet82YQkkg
- 腾讯新一代企业级云数据库 CynosDB(NewCDB) 了解下,https://www.infoq.cn/article/WFRvwMV3I3S3VeDwYVT2
- 华为9月发布的Taurus分布式数据库和AWS Aurora对比,https://zhuanlan.zhihu.com/p/29182627