接下来根据下面这张图分享DTS的异地多活是如何实现的。其实在实现阿里巴巴的异地多活的时候就已经将这套东西整合总结出来了,所以也希望将这套比较复杂的能力赋予公有云的用户,比如阿里云DTS输出了一个双向输出的功能,也就是异地多活的能力,使得用户可以亲身地构建这套东西。在下图所示的场景里面,用户拥有一个A城主库还有一个B城主库,并且希望实现异地双活。
用户希望既写A城主库又写B城主库,通过DTS就是先建立一个从A到B的正向任务,也就是中间通过一个结构化队列以及DWriter模块实现与所有的数据库之间的事务一致性的写入。这里特别强调在场景上必须实现事务一致性,这是因为像是在天猫或者淘宝下单的时候,订单往往会涉及到几百条SQL以及几个库,而且一个事务可能会涉及到几个表的若干个字段,而其本质上是一个事务,而如果将事务拆开并且同步到B城主库上面去的时候就会发现有些数据当读取过来之后就是不一致的,比如对于一笔订单而言,可能在A城主库中读取的数据发现已经支付,但是在B城中读取出来的数据发现这笔订单还没有支付,这就会产生数据不一致的问题。所以希望在这样的场景下也能够保持事务的一致性,这一点也是非常重要的,否则的话在一些非常严格的场景下会产生非常多的问题,比如像银行的流水业务场景。所以DTS所需要解决的问题中,一个是日志的解析,另外一个就是通用的事务解决方案,这样一来正向的方案就建立完成了,同样的反向方案也能够建立。但是在建立反向方案的时候需要解决防循环的问题,也就是不能出现让从A城主库写的数据到了B城主库然后又回到A城主库这样的循环。而防止循环的方案在DTS的异地多活场景中也已经实现了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。