高德地图App是国内首屈一指的地图及导航应用,阿里云MongoDB数据库为该应用提供了部分功能的存储支撑,存储亿级别数据记录。目前高德使用国内三中心的策略,通过地理位置等信息路由最近数据中心提升服务质量,业务方(高德地图)通过用户路由到三个城市数据中心,如下图所示,机房数据之间无依赖计算,不同中心的数据同步通过MongoDB云上灾备实现。



上图中三个城市在地理位置上从北到南横跨了整个中国 ,这对多数据中心如何做好复制和容灾提出了挑战。如果某个地域的机房或者网络出现问题,如何将流量平滑地切换到另一个地方,并且做到用户几乎无感知?

目前的策略是,拓扑采用机房两两互联方式,每个机房的数据都通过MongoDB云上灾备异步同步到另外两个机房。通过高德的路由层,将用户请求路由到不同的数据中心,读写均发送至同一个数据中心,保证事务的一致性,最终保证每个数据中心都有全量的数据。任意一个机房出现问题,另外两个机房中的一个可以在切换后提供读写服务。下图展示了城市1和城市2机房的同步情况。



遇到某个单元不能访问时,Manager通过MongoDB云上灾备产品管理接口获得各个机房的同步偏移量和时间戳。通过判断采集和写入值即可判断异步复制是否在某个时间点已经完成,再配合业务方的DNS切流,切走单元流量并保证原有单元的请求在新单元是可以读写的,如下图所示。