全量迁移的方案相对简单,使用DDB自带工具按照特定分区策略dump和load即可。对增量迁移,DDB实现了一套独立的迁移工具hamal来订阅各个数据节点的增量更新,hamal内部又依赖DBI模块将增量更新apply到新库新表,如下图所示:
数据迁移工具hamal
Hamal作为独立服务,与Proxy一样由DDB统一配置和管理,每个hamal进程负责一个数据节点的增量迁移,启动时模拟slave向原库拉取binlog存储本地,之后实时的通过DBI模块apply到新库新表,除了基本的迁移功能外,Hamal具备以下两个特性:
- 并行复制:hamal的并行复制组件,通过在增量事件之间建立有向无环图,实时判断哪些事件可以并行执行,hamal的并行复制与MySQL的并行复制相比快10倍以上。
- 断点续传:hamal的增量apply具有幂等性,在网络中断或进程重启之后可以断点续传
全局表
考虑一种场景:city表记录了国内所有城市信息,应用中有很多业务表需要与city做联表查询,如按照城市分组统计一些业务信息。假设city的主键和分区键都是cityId,若连接操作发生在中间件层,代价较高,为了将连接操作下发数据节点,需要让联接的业务表同样按照cityId分区,而大多数业务表往往不能满足这个条件。
联接直接下发需要满足两个条件,数据分布相同和分区键上联接,除此之外,其实还有一种解法,可以把city表冗余到所有数据节点中,这样各个数据节点本地联接的集合,便是所求结果。DDB将这种类型的表称之为全局表。
全局表的特点是更新极少,通过2PC保障各个节点冗余表的一致性。可以通过在建表语句添加相关 hint指定全局表类型,在应用使用DDB过程中,全局表的概念对应用不可见。
未来——独立平台,与云共舞
DDB作为网易浓缩了10年技术经验与精华的分库分表数据库,近一两年除了满足内部产品使用外,也渐渐开始帮助外部企业客户解决海量结构化数据存储的难题。随着公有云技术的大力发展和日趋成熟,各种IaaS和PaaS平台如雨后春笋层出不穷,如网易蜂巢的推出,为应用开发,部署和运维提供了极大便利,而随着IaaS层和PaaS平台的普及,各种SaaS服务也会慢慢为广大开发者所接纳,未来DDB也将重点为网易蜂巢客户打包DDB的SaaS服务,与蜂巢一同构建一套更加丰富的数据存储生态系统。
我们对DDB的SaaS服务化无比坚定,同时DDB的公有云之路绝非私有云的生搬硬套,在与蜂巢一同帮助企业客户解决分库分表难题的同时,未来我们也会更加注重平台独立,首先要做的是将DDB的SaaS层与底层PaaS和IaaS层解耦,实现将DDB平台所依赖的PaaS和IaaS以插件方式注入。这样一来可以为客户提供更灵活的服务方式,二来可以极大程度降低DDB平台本身的开发和运维成本:一套平台管理工具,适用所有内外部DDB用户,这是我们正在进行并将持续优化的目标。