时间:2021-07-01 10:21:17 帮助过:42人阅读
高德地图 App是国内首屈一指的地图及导航应用,阿里云MongoDB数据库服务为该应用提供了部分功能的存储支撑,存储亿级别数据。现在高德地图使用国内双中心的策略,通过地理位置等信息路由最近中心提升服务质量,业务方(高德地图)通过用户路由到三个城市数据中心,如下图所示,机房数据之间无依赖计算。
这三个城市地理上从北到南横跨了整个中国 ,这对多数据中心如何做好复制、容灾提出了挑战,如果某个地域的机房、网络出现问题,可以平滑的将流量切换到另一个地方,做到用户几乎无感知?
目前我们的策略是,拓扑采用机房两两互联方式,每个机房的数据都将同步到另外两个机房。然后通过高德的路由层,将用户请求路由到不同的数据中心,读写均发送在同一个数据中心,保证一定的事务性。然后再通过MongoShake,双向异步复制两个数据中心的数据,这样保证每个数据中心都有全量的数据(保证最终一致性) 。如下图所示:
任意机房出现问题,另两个机房中的一个可以通过切换后提供读写服务。下图展示了城市1和城市2机房的同步情况。
遇到某个单元不能访问的问题,通过MongoShake对外开放的Restful管理接口,可以获得各个机房的同步偏移量和时间戳,通过判断采集和写入值即可判断异步复制是否在某个时间点已经完成。再配合业务方的DNS切流,切走单元流量并保证原有单元的请求在新单元是可以读写的,如下图所示。
2. 跨境电商
某跨境电商在中国和海外分别部署了2套MongoDB,其中海外主库上提供读写服务,同时用户希望把海外的数据拉到国内进行离线计算,以及承担一部分读流量,以下是该用户采用MongoShake搭建的链路方案:
3. 某著名游戏厂商
某著名游戏厂商采用了MongoShake搭建了异地容灾链路。用户在2个机房分别部署了2套应用,正常情况下,用户流量通过北向的DNS/SLB只访问主应用,然后再访问到主MongoDB,数据通过MongoShake在2个机房的数据库之间进行同步,一旦机房1不可用,DNS/SLB将用户流量切换到备上,然后继续对外提供读写服务。
4. 采用MongoShake的开源多活方案
这里是我们给出的根据MongoShake创建多活的方案,上文我们介绍过2个MongoDB通过MongoShake互相同步将造成回环复制,而gid部分在开源版本中未提供,所以在开源MongoDB下,可以根据控制流量分发来达到多活的需求。比如下面这个图,用户需要编写一个proxy进行流量分发(红色框),部分流量,比如对a, b库的写操作分发到左边的MongoDB,对c库的写操作分发到右边的MongoDB,源库到目的库的MongoShake链路只同步a, b库(MongoShake提供按库过滤功能),目的库到源库的MongoShake链路只同步c库。这样就解决了环形复制的问题。
总结来说,也就是写流量通过proxy进行固定策略的分发,而读流量可以随意分发到任意MongoDB。
5. 采用MongoShake的级联同步方案
这个是一个全球的部署的用户采用MongoShake搭建的全球混合云级联方案的示例图,有些数据库位于云上,有些位于运行,MongoShake提供了混合云不同云环境的同步,还可以直接级联方式的集群同步。
具体测试数据请参考性能测试文档。
MongoShake将会长期维护,大版本和小版本将会进行持续迭代。欢迎提问留言以及加入一起进行开源开发。
另外,阿里云MongoDB团队招人,包括云平台开发和数据库内核开发,语言不限,欢迎投递简历以及来信咨询:zhuzhao.cx@alibaba-inc.com
附带阿里云云MongoDB地址,欢迎使用。
MongoShake——基于MongoDB的跨数据中心的数据复制平台
标签:使用率 例子 RKE 重要 备份 包含 proxy 抓取数据 plog