29 | 异地多活设计4大技巧
29 | 异地多活设计4大技巧
讲述:黄洲君
时长17:50大小8.17M
技巧 1:保证核心业务的异地多活
技巧 2:保证核心数据最终一致性
技巧 3:采用多种手段同步数据
技巧 4:只保证绝大部分用户的异地多活
核心思想
小结
赞 25
提建议
精选留言(43)
- 空档滑行2018-07-03oceanbase的强一致分布式数据库可以使业务不需要考虑持久层的跨地域数据同步问题。 但应该付出的代价是单个请求的rt会变大,可用性也有降低,所以对rt要求非常高的业务可能不会选择,其实还是对业务有影响的。 如果代价可以承受,业务端还要解决缓存的一致性问题,流量切到其它可用区的压力是不是承受的住。可能还是需要部分业务降级。 所以分布式数据库不能完全做到业务无感知的异地多活展开
作者回复: 分析正确,异地多活并不是单单持久层考虑就够了
76 - 炫紫2018-07-03强烈建议老师能够多给一些准备文章所查找的资料链接,毕竟文章属于高度总结概括的,老师只是领进门,吸收知识还是靠自己去看,去领悟
作者回复: 如果是异地多活,理论只有CAP,网上有很多实践案例,但都没有提炼通用方法论,专栏的异地多活内容基本都是我自己悟出来的😊 如果是其它章节,文章内容已经包含关键部分,细节你可以拿其中的关键字去搜索
21 - 冈鑫2018-08-08有几个疑问,请问A和B两个城市机房, 1.假如在A改了密码,在B是不是有可以通过旧密码登陆的可能呢? 2.以此类推,假如是存款金额,怎么判断B的数据是最新的呢? 3.银行转账通过申请的方式,需要所有城市节点反馈,才确定扣款吗? 4.银行转账通过申请的方式,如果其中一个城市宕机了,是不是所有城市都无法扣款呢
作者回复: 1. 有,我自己都遇到过QQ密码和淘宝密码不同步的问题,当然是十几年都各自只有一次 2. 没法判断,余额只能做只读备份,不能双活,除非底层存储是基于paxos做的分布式一致性,但理论上paxos的分布式系统也会整体挂掉,因为目前的技术,节点间连接的问题是解决不了的,除非量子通信😄 3. 不会,两个账户所在的节点正常就可以了 4. 不会,只是这个城市的用户没法扣款,其它城市的用户不受影响
共 4 条评论16 - yungoo2018-07-03oceanbase采用了两阶段提交来实现跨区多机分布式事务。当协调器出现故障时,其通过查询所有参与者的状态来恢复分布式事务。当某个分区故障或网络中断时,事务会长时间挂起,直到故障修复,这段时间内部分其实是不可用的。虽然其声称强一致性和高可用,当发生故障和网络中断,依然会导致服务不可用。13
- 谭方敏2020-03-08异地多活四大技巧 1)核心业务异地多活 2)核心业务最终一致性 a)提高机房间通讯效率,连高速网络。 b)只同步核心数据。 c)不要求实时一致性,要求最终一致性。 3)多种同步手段 a)消息队列方式 借助消息队列把数据同步到业务系统中。 b) 二次读取方式 用户在a处注册了,要在b处访问,因为复制延迟完成无法访问,可以通过按照路由规则去访问a点数据的方式来解决这个问题 c)存储系统同步方式 借助数据库本身的同步机制将数据同步过去。 d)回源读取方式 跟二次读取差不多,也是按照路由器规则找到对应的节点去拿数据。 e)重新生成方式 如果去拿数据,拿不到的话,那么就重新生成。 4)对大部分用户异地多活。 对于小部分用户无法保证异地多活,可以通过a)挂公告,b)补体验,c)事后补偿 oceanbase没有用过,不太清楚,不过任何事情都会有代价的,需要结合具体业务来分析,很难讲可以做到跟业务完全无关的异地多活呀。展开10
- Geek_92f9aa2020-10-31文章不仅讲方法还有举例子,而且阐明了各种异常情况的多种不同解决方案极其利弊。这不仅要求作者本身要有丰富的实战经验和不断思考总结,还需拥有极好的语言表达和崇高的分享精神(在架构设计方面,我在公司很少人能说清楚,经常遮遮掩掩,可能是不懂,更可能是不好分享,毕竟这个知道的人越少自己就越有优势我觉得)。 感谢华神的倾囊相授,对我来说,天才已经不适合您了。您应该是神,是上帝! 现在我也在写博客,我要把那些网上搜不到的自己又非常精通的通通分享出来,我要让那些人知道,你知道的不愿分享的知识,在我这里从来就不是个别人专有的秘密。展开
作者回复: 哈哈,过奖了,架构确实没有太好的资料来讲解,这也是我写专栏的初衷,我希望其他人不用再像我一样投入那么多时间和精力来摸索!养成写博客的习惯挺好,对自己的能力提升很有帮助������
9 - Geek_88604f2019-09-18首先为应对自然灾害保重证高可用,oceanbase集群必须跨城分区,那么如下两个问题就不可避免:一是跨城分区带来的时延问题会导致集群对某次写入达成一致的时间变长出现数据不一致;二是成本问题,为保证跨城分区之间网络的可靠性可能要考虑公网和内网共存,部署成本上升。 再说当发生故障时如果恰好是[n/2+1]个节点所在的分区发生故障,那么整个集群将由于无法达成多数派而停服。 最后一点,paxos协议的使用场景通常是读多写少,写操作会存在瓶颈,集群的规模不会很大。展开
作者回复: 赞同
9 - yungoo2018-07-03oceanbase采用了两阶段提交来实现跨区多机分布式事务。当协调器出现故障时,其通过查询所有参与者的状态来恢复分布式事务。当某个分区故障或网络中断时,事务会长时间挂起,直到故障修复,这段时间内部分其实是不可用的。虽然其声称强一致性和高可用,当发生故障和网络中断,依然会导致服务不可用。共 1 条评论5
- Geek_fb3db22018-12-26假如有多个应用 而不是ab2个 那么当前处理不了请求对端 那么是要请求哪端呢 session也是同样例子。因为不知道session是哪个应用生成的 是不是session上要带ip信息 做反向连接用
作者回复: 是的,session设计要考虑识别来源
4 - 钱2019-08-31课后思考及问题 1:听完的第一感觉是系统理论上100%高可用是不可能的,不管是双机架构还是高可用集群架构甚至是最牛逼的异地多活架构都无法保证100%高可用,因为进程间通信协作是需要网络通信的,而网络通信的环境是复杂多变的不能100%安全可靠,另外,数据延迟是无法避免的,那数据实时一致性是无法做到的。世间没有完美之事,当然,这并不表示这样的人生不值得过活,这恰恰是我们奋斗的目标和动力。我们接受不能100%高可用,但是我们要保证核心业务高可用,并且大部分业务高可用,其实实际情况也是如此的,系统不可用的是小概率事件。 抓住主要矛盾的主要方面,基本就能做的立于不败之地。 2:如果底层存储采用 OceanBase 这种分布式强一致性的数据存储系统,是否就可以做到和业务无关的异地多活? OceanBase没用过,不过根据软件编程没有银弹以及天下没有免费的午餐来推断,应该做不到和业务无关的异地多活。异地多活有一定的业务适用范围,也不仅仅只是解决分布式数据存储的问题。 如果是金融业务,要求低延时,还包括一些计算业务,也许就不太适合啦!情愿牺牲一下系统的可用性牺牲一下用户的使用体验,也要保证业务的逻辑一致性。展开4
- o2018-07-12qq的账户登陆这一块应该就是做了多机房回源读取。因为他们的业务就是密码错误,会让用户输入验证,我估计应该至少有这两个功能:1、人机校验;2、留充足时间给多地机房数据确认;
作者回复: 这个我还真不知道,不过你这样分析也有一定道理
3 - 小神david2020-12-28尽管对OceanBase不熟悉,但是根据业余场景的不同和CAP理论,分布式的强一致存储可能会影响可用性以及用户体验,此外任何系统都会有自身的优劣势,还是要看是否可以满足业务需求。另外,维护一套分布式的强一致存储的成本也相对较高。
作者回复: OceanBase的架构是“同城双机房 + 异地单机房”共3个机房5个节点这种架构,异地机房其实不能用来做完整的业务访问,因此OceanBase其实做不了异地多活的底层存储,而是同城双活。 以上信息是我在19年左右了解到的,最新的是不是这样还需要确认。
共 2 条评论2 - Sic Pavis2019-02-13使用了这么多同步方式看上去是依不同情况做的不同处理,但是在一个服务里用这么多不同的方案会加大后续的维护成本吧,人员理解都要花一些时间,出问题了排查方式还不一样
作者回复: 首先要解决业务问题
2 - 再见小飞侠2018-07-04你好,华哥。请问能否在后续也指导下日志系统的知识,微服务框架下的日志选型?谢谢了。
作者回复: 我的专栏目的在于教会读者架构分析和设计方法论,而不是具体某个系统如何实现,你可以参考架构设计选择,架构设计流程等知识自己实践一下
2 - 小土2018-07-03在注册里,如果A中心宕机,消息队列因为处理时延未到B中心,二次读取因为A中心未恢复也失败,这种情况有什么好的处理建议?
作者回复: 没法处理😄只能让部分用户受损
2 - 王维2018-07-03想请教一下华仔,在真正的应用场景中,使用消息队列异步推送的可靠性高不高?NServiceBus消息队列在真正项目中的运用还可以吗?2
- fomy2021-09-24强一致性的场景必然带来高延迟问题,甚至还会有死锁情况,对于比如余额这种强一致数据还是需要的。 对于注册可能重复的问题,可以通过手机号做hash只能让它在一个节点注册。 当然异地多活不只是数据库的高可用,还可能是缓存数据的高可用。
作者回复: 缓存一般不做异地多活高可用,缓存设计本来就是可以丢的,即使缓存做异地多活也很简单,用canal之类的异步复制工具即可,因为缓存对一致性要求不高。
1 - 微群2021-03-18您好,有两个问题咨询一下 1 当前银行实时转账如此之快,体验还不错,就是因为采用了本地机房处理的方案是吗? 2 支付宝转账到银行卡的这种方式也很快,意味着支付宝的实时转账的功能也是采用本地机房处理是吧?因为金融的强一致性要求,未采用异地多活方案是吧?
作者回复: 你作为终端用户感受到的“快”和系统处理上的“快”,两者不是一个概念。 你觉得快,可能是1分钟以内,这个量级的时间,本地机房和异地机房都可以做到。 支付宝转银行卡,那就至少是1~5分钟级别的,无论本地本地机房和异地机房都没问题。
1 - 武文文武2018-12-01您好,问一下文中说不能以后一个手机号注册为准,这个原因是什么呢?注册是可以有时间记录,在做高可用切换时以最后一次注册时间为准不是蛮好的解决方案吗?还请赐教
作者回复: 因为用户注册后可能执行很多操作
1 - 无聊夫斯基2018-09-06为啥会出现用户在A中心登录,又在B中心登录的情况?不是会选择最近的中心吗,只有A中心故障才会去选择B中心登录?
作者回复: 你坐高铁,或者处在两省交界,或者一会用无线,一会用4G,甚至路由出bug……很多情况的😀
1