争取能在百度搜索到把青春献给代码的你;一个年轻程序员的渺小梦想-杨永飞
NOTES DETAIL
CockroachDB Meet DTCC 2018《基于CockroachDB快速构建海量及高并发业务》
 奋斗        29

2018年5月10日,百度智能云DBA团队为中国数据库技术大会DTCC带来了NewSQL数据库CockroachDB在百度的最新进展。

百度智能云NewSQL数据库架构师严龙受邀在DTCC上分享了“基于CockroachDB快速构建海量及高并发业务”的技术主题。

如下是本次分享的内容,主要包括四个部分:CockroachDB开源项目介绍、 CockroachDB & Baidu、百度智能云NewSQL解决方案、社区及百度Roadmap。

CockroachDB开源项目介绍

CockroachDB是一个支持线性扩展、自动修复、以及强一致性的NewSQL开源数据库项目。14年托管在github上,整个项目分为社区版和商业版。社区版遵循Apache协议,部分高级功能为商业版特有,例如物理逻辑备份,GEO partition等功能,遵循CCL协议。整个项目由golang和C++实现,目前在github上得到大量的关注,star数量为13330个,有超过150位来自全球各个地区的贡献者提交代码,社区活跃度非常高。18年4月份官方正式release了2.0版本,相比1.1性能提升了50%。

Cockroach Labs是CockroachDB的母公司, 其三位创始人全部来自Google,截止到B轮融资,一共得到$5000多万的融资。

CockroachDB提供了如下特性:

  • 多活:任意节点都能接受读写

  • 部署简单:所有功能封装到一个二进制文件中,不依赖第三方组件

  • 强一致:数据多副本存储,使用raft强一致性协议保证副本数据同步的一致性

  • 事务SQL:兼容PG协议和语法, 支持完整的ACID语义

  • 自动扩展&修复:集群扩容时,只需要把新节点直接加入集群,不需要过多的人工干预,自动把数据均衡到新节点。出现节点故障的时候,只要集群节点数足够,系统会自动把丢失的副本修复到集群其他节点上

  • 高可用:任一节点down掉不影响服务的可用性和数据完整性

 CockroachDB & Baidu 


百度智能云DBA团队自15年初就开始参与到CockroachDB开源社区的贡献,主要贡献在SQL引擎、分布式事务以及多副本强一致几个特性上。为社区贡献了1W+行代码,发现50+个issue,提交10多个需求,得到社区比较高的认可。有两位同学(严龙,宋浩)于17年被社区接纳为核心的Member。

同时双方频繁地进行线下交流,2017年7月份受邀去Cockroach Labs纽约office交流期间,Cockcorach Labs提议我们组建CockroachDB中国社区,负责CockroachDB亚太地区推广和技术支持。2017年11月份我们在中国区举办了第一次社区大会并宣布CockroachDB中国社区成立。


随着业务的发展,需要存储亿级用户数据,每天的交易量上亿,峰值TPS甚至超过10w级,同时业务方也希望利用数据来驱动实时广告营销。在需求变得更复杂的同时,对成本的考虑也变得极为重要。下面我们结合存储能力、高并发能力、低成本优势、实时分析能力四个方面来探究CockroachDB。


1.存储能力

存储能力方面,CockroachDB支持EB级的数据存储,能够比较简单地解决亿级用户数据存储的问题。CockroachDB和传统关系型数据库一样,把用户数据以二维表的形式呈现给用户,但CockroachDB底层会把这种二维表编码成KV的形式存储起来。按照Key范围划分成64M大小的一个个数据分片,CockroachDB称之为Range。同时,CockroachDB使用二级路由的方式管理Range,顶层路由有且只有一个Range,顶层路由记录二级路由信息的位置和Key范围,二级路由记录真实的每个Range的位置和Key范围。其中每条路由信息的大小为256个字节,通过这个公式可以得出,CockroachDB最大可支持4EB用户数据管理。


2.高并发能力

CockroachDB采用了节点对等,无中心节点的分布式架构,所有节点都是整个集群中的一颗螺丝钉。任一节点都可以处理客户端请求,也可被替代。CockroachDB使用P2P协议(

GOSSIP)发现、管理节点,节点加入和退出不需要全网广播或者汇报某个中心节点,只需要通知周边临近节点,类似一个谣言传播的过程。通过gossip协议同步,每个节点都可以缓存完整的顶层路由数据,从而解决了对顶层路由访问的单点瓶颈。


CockroachDB实现了一个无锁的,无中心的分布式事务模型。没有中心的事务协调者,采用和Spanner True Time类似的方案,使用HLC时间戳作为事务ID的一部分,所以任一节点都可以创建事务。因为实现的是无锁事务模型,不需要全局锁管理,事务要么执行成功,要么restart,要么abort,所以事务冲突可以直接在两个事务发生交集的节点本地处理,不需要第三方仲裁。这样的特点保证了CockroachDB能做到性能接近线性的扩展。


集群的数据会随着用户的增删改操作不断发生变化,如果集群不支持动态调整,那么负载会逐渐向部分节点倾斜,导致集群负载不均。CockroachDB目前支持两种模式动态调整集群负载,一种是基于存储,把数据存储平均到所有节点,保证所有节点的数据量基本保持一致。另一种是基于状态的均衡模式。系统根据range的负载和数据量决定是否要做分裂,把节点负载也作为数据均衡的考虑因子,来决定是否需要把range迁移到其他节点,分摊负载,整个调整过程对用户无感知。


3.低成本优势

CockroachDB把集群的组织结构划分成三层,Cluster、Zone、Node。 Cluster和Node比较好理解,Cluster是集群的意思,Node对应到集群中的CockroachDB实例。Zone这个概念是CockroachDB引入的一个独有概念,和Google spanner的Directory比较类似,一个Zone由多个具有相同属性的Node组成。在这里我们根据存储类型把集群的节点分成两组Zone,一组是使用SSD或者NVME高速硬盘节点,一组是使用SATA磁盘的低速硬盘节点。通过对用户的库、表进行Zone存储设置,已有数据按照规则逐步迁移到指定的Zone中,新写入的数据直接按照规则写入指定Zone中。通过Zone Configuration这个特性达到了对冷热数据进行分离,降低存储成本的功能,当然Zone Configuration特性还可用于跨地域部署时实现用户数据就近访问的功能。

4.实时分析能力

首先,CockroachDB选择兼容PostgreSQL协议和语法,能够很好地继承PostgreSQL的生态,能无缝地对接PostgreSQL相关的第三方组件。其次,CockroachDB实现了类似MPP数据库的分布式执行引擎,把复杂查询的计算下推到各个节点,让计算并行执行,从而使SQL的计算能力可以随着集群的扩展而得到提升。


CockroachDB同时支持通过Column Family来达到类似行列混合的效果,适用于不同场景下减少I/O操作,进一步提升查询性能。CockroachDB和传统数据仓库最大的不同在于,CockroachDB支持在线分析的同时,仍然能够支持实时更新,让TP、AP融合成为可能。

CockroachDB的分布式执行引擎目前实现的是Rule Base的优化器,SQL解析之后生成一个类似单机Plan Tree的Logic Plan,由优化器重写之后,进一步结合数据分布的特点生成一个可执行的分布式执行计划Physical Plan。CockroachDB每一个算子都由单独的goroutine单独调度,通过Mailbox机制协同。因为每一个算子相对比较独立,后续实现SQL挂起和资源隔离也相对比较容易。

百度智能云NewSQL解决方案


通过上面CockroachDB特性的分析,可以发现CockroachDB能非常有效的解决当前业务遇到的痛点。


百度云结合自身在数据库研发和运维方面的积累,在开源CockroachDB基础上把CockroachDB打造成一个真正开箱即可用的数据库服务。针对CockroachDB构建了完善的运维管理能力,例如监控管理、灾备管理、故障切换、安全增强等等,释放用户在运维管理方面的人力投入,也针对CockroachDB内核做了如下深度开发:


1. 提供兼容MySQL协议和PostgreSQL协议两个版本


2. 新加入CDC、MySQL、PostgreSQL在线迁移功能,方便业务迁移到CockroachDB服务;

为了方便用户迁移现有业务到CockroachDB集群,我们同时开发了相应的迁移工具。目前支持在线迁移MySQL、PostgreSQL、CockroachDB迁移到CockroachDB。离线迁移支持CSV, SQL文件和SST文件三种数据源。


3. 结合硬件(例如:RDMA,GPS原子钟,FPGA)做了深度优化,在性能和稳定性上有了很大的提升。

CockroachDB的分布式事务使用一个称为混合逻辑时钟(HLC)的时钟算法在节点间分配时间戳作为事务排序的依据。百度结合GPS原子钟提实现了一套高精度的时间同步算法,解决时钟漂移,跳变等问题,并结合CockroachDB的HLC算法,保证节点之间时钟偏差不超过20ms,事务处理吞吐提升一倍。同时使用RDMA技术降低节点之间通信时延,结合FPGA加速数据压缩和RocksDB的compaction。


4. 基于CockroachDB打造了切实可行的HTAP方案。

我们把业务划分成三部分:在线交易轻量级的在线分析(例如实时营销类业务根据用户画像推送相关联的产品)重量级的离线分析(例如构建用户画像)。在线交易和轻量级分析直接由CockroachDB集群处理,离线分析部分由Spark集群通过CockroachDB提供的KV接口读取数据运行离线分析,把离线分析业务和在线业务之间的影响降到最低,同时二者共享一份数据。

社区及百度Roadmap


社区已经release了2.0版本,新增支持了很多特性。如行级别物理分区、RBAC、数据加密、任意时间点恢复等,性能上也有很大提升。未来还会持续加入新特性:如CDC、存储过程、CBO优化、replica的智能置换和分裂。


百度智能云会全面升级CockroachDB到2.0版本,Q3会在公有云开启邀测,年底会正式上线到公有云,提供更专业的服务。



支持原创,如需转载请勿删节并标明出处,谢谢!




 关于我们:我们是百度DBA团队,团队有两位CockroachDB PMC Member及一位Contributor, 目前正积极推动NewSQL在百度内部以及外部的发展。除了NewSQL, 我们在MySQL, PostgreSQL, GreenPlum有多年的内核开发经验及实践经验,对数据库和大数据领域有疑问或者需求欢迎联系我们,同时欢迎有志青年加入我们!



关注我们 



所属标签: 笔记

3 条评论

  • 不见不散 2018-06-08 09:05:04

    求教,

  • 昂昂哒 2018-05-23 05:39:43

    最是寻常动人处

  • Shunkanˇ 2018-05-22 02:13:40

    我想把文章捉频,可不知道怎么用。

既来之,说两句吧!

关于我

莫失莫忘,莫惆怅,莫提前生,莫妄后生。知人,知世事,自知,知余于心,力不逮~~

1根小腿毛

浏览最多

陈冠希,一直在音乐圈

2018-08-20

暂时没有任何描述哦~

上海国际艺术节|纪

2018-08-20

话剧《命运之影》如

2018-08-20

照片墙

文件下载

  • 自适应图片大小

    [ 1 ]

  • 贝壳云笔记mac版本

    [ 1 ]

  • 判断移动端设备并且跳转

    [ 1 ]

  • react开发豆瓣fm音乐

    [ 0 ]

  • 简繁切换实现

    [ 0 ]

  • 简体繁体互转PHP

    [ 0 ]