高并发系统设计 40 问
唐扬
美图公司技术专家
49013 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
高并发系统设计 40 问
15
15
1.0x
00:00/00:00
登录|注册

28 | 多机房部署:跨地域的分布式系统如何做?

一课一思
课程小结
异地多活
同城双活
多机房部署

该思维导图由 AI 生成,仅供参考

你好,我是唐扬。
来想象这样一个场景:你的垂直电商系统部署的 IDC 机房,在某一天发布了公告说,机房会在第二天凌晨做一次网络设备的割接,在割接过程中会不定时出现瞬间或短时间网络中断。
机房网络的中断肯定会对业务造成不利的影响,即使割接的时间在凌晨(业务的低峰期),作为技术负责人的你,也要尽量思考方案来规避隔离的影响。然而不幸的是,在现有的技术架构下,电商业务全都部署在一个 IDC 机房中,你并没有好的解决办法。
而 IDC 机房的可用性问题是整个系统的阿喀琉斯之踵,一旦 IDC 机房像一些大厂一样出现很严重的问题,就会对整体服务的可用性造成严重的影响。比如:
2016 年 7 月,北京联通整顿旗下 40 多个 IDC 机房中,不规范的接入情况,大批不合规接入均被断网,这一举动致使脉脉当时使用的蓝汛机房受到影响,脉脉宕机长达 15 个小时,著名的 A 站甚至宕机超过 48 个小时,损失可想而知。
而目前,单一机房部署的架构特点决定了你的系统可用性受制于机房的可用性,也就是机房掌控了系统的生命线。所以,你开始思考如何通过架构的改造进一步提升系统的可用性。在网上搜索解决方案和学习一些大厂的经验后,你发现“多机房部署”可以解决这个问题。

多机房部署的难点是什么

确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了跨地域的分布式系统如何进行多机房部署以提高系统的可用性和稳定性。作者首先指出单一机房部署的架构特点决定了系统可用性受制于机房的可用性,因此提出了多机房部署的解决方案。难点在于跨机房的数据传输和延迟问题,作者提到了不同机房之间的专线延迟数据,并指出了数据延迟对接口响应时间的影响。为了解决多机房部署中的延迟问题,作者提出了逐步迭代多机房部署方案,其中包括同城双活方案的设计。同城双活方案通过在不同机房部署数据库主从库和缓存,以及控制RPC服务调用的方式,实现了机房级别的容灾。文章深入浅出地介绍了多机房部署的难点和解决方案,强调了不同机房的数据传输延迟是造成多机房部署困难的主要原因,同时提出了同城多机房和异地多活的部署架构。总之,本文对于需要了解分布式系统多机房部署的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《高并发系统设计 40 问》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(37)

  • 最新
  • 精选
  • 蓝魔丶
    读了两遍,老师有4个问题 1.同城双活方案中,应用服务在跨机房写和同机房读的策略下,应用程序是如何实现这种策略的(读写分离),有相关的实现方案吗?并且是如何应对在并发情况下主从延长导致的读同机房数据库无数据问题。 2.同城双活方案中,缓存部署架构是在各种机房中创建缓存库,不进行缓存数据的同步吗?还是会与数据库类似建立主从机制保证同步缓存数据。注册中心部署架构是只需要部署到任意一个机房就可以是吗?不需要考虑在双机房都独立部署的情况嘛? 3.异地多活方案中,是如何做到对用户进行分片,保证尽量调用本机房的服务的? 4.异地多活方案中,最后提到的那个场景,我的理解是本次服务调用需要的数据很可能是存储在异地机房中,这样无法避免的进行远程的服务调用或数据访问,为了保证可用性,只有牺牲性能上延长,但是还是应该尽量避免这种跨异地的远程访问,保证两个异地两个机房中都有对方的所有东西,包括数据和服务等。

    作者回复: 1. 如果已经做了主从分离,那么只需要在异地机房配置主库是主机房的主库,从库配置本机房从库即可。主从延迟的问题,可以通过主动写缓存来解决 2. 像memcached这样的缓存是没有办法同步的,注册中心可以部署在单机房 3. 一般按照用户的属性来分片,比如ID,地域 4. 是的

    2019-11-27
    23
  • Hinimix
    老师,比如用zk做注册中心,一个服务我在两个机房各部署了一套,我在web服务连接的时候怎么确定是本机房呢,是需要注册时候注册个机房名,然后web选择有这个机房名的吗

    作者回复: 是的,注册的名字里面带上机房标识,比如zw-feed-service(兆维-feed-服务)

    2019-12-18
    5
    8
  • 小山猫
    老师好,异地用户分片用什么方案比较好,比如电商中涉及到用户、商品、商家,用户只看本机房对应的商品吗

    作者回复: 这个根据业务特点定,比如淘宝就是按照uid来分片,饿了么是按照地域来分片

    2020-01-29
    3
    4
  • 扬一场远远的风
    “这里有一个场景:假如在电商系统中,用户 A 要查看所有订单的信息,而这些订单中,店铺的信息和卖家的信息很可能是存储在异地机房中,那么你应该优先保证服务调用,和数据读取在本机房中进行,即使读取的是跨机房从库的数据,会有一些延迟,也是可以接受的。”这句没明白。我理解前文讲的“对于某个固定的乃,服务的调用和数据的读写都应该保证在同一个机房中”。而例子中:本人的基本信息和订单信息主库在机房A中,所以数据读取和服务调用应该保证在机房A ,而店铺信息主库和卖家信息主库在机房B中(机房A异步方式从机房B同步过来),此时,对于店铺信息和卖家信息的读取应该也是在机房A中吧?!

    作者回复: 你说的没错,数据是可以同步的,但是异地机房之间延迟比较高,同步也会有延迟的。

    2019-11-27
    3
    3
  • 阿土
    老师,异地多活架构中,数据双向同步如何做?

    作者回复: 一般是通过队列来实现

    2019-12-04
    2
  • 海罗沃德
    我們使用AWS,跨region部署,會導致緩存不同步,而AWS不支持跨region複製redis數據,而我們又沒有做用戶分片,導致PM,測試都在玩命用同一個用戶側跨region的case

    作者回复: 异地多活的方案中,数据的延迟就是坑

    2019-11-27
    2
  • 刘冲
    同城双机房,数据库同步和异城数据库同步方案有啥区别?图上没看太懂,

    作者回复: 数据库同步的方案是一样的,只是同城机房之间的数据延迟小,对于业务的影响小。异地的话数据同步延迟比较高,可能对业务有影响

    2019-11-27
    3
    2
  • Jast
    “另一个思路是在机房 B 部署一个从库,跨机房同步主库的数据,然后机房 B 的应用就可以读取这个从库的数据了” 老师您好,这个机房B写是写到A机房的主库吗

    作者回复: 是的

    2020-06-04
    1
  • 网络通信主要依赖光和电,光和电的速度是快,不过再快从一个空间到另一个空间也需要时间。并且距离越远耗时越多,不过为了服务的可用性,也没什么好法子只能通过副本或者隔离的方式来提供更高可用的服务,很简单的道理不把鸡蛋放在同一个篮子,防止一次全部打烂。 距离远——隔离性好——服务更高可用 距离远——数据延迟大——服务架构更复杂——成本更高 想要的东西是矛盾的,无法实现都满足,只能选择一个平衡点。所以,什么时候选择同城多活或异地多活,也是一样需要寻找一个平衡点,原则是能不用就不用,逼不得已非用不可了,没得选那就用吧!此时人力物力财力,可能也能支持啦!

    作者回复: 👍

    2020-05-07
    1
  • 电光火石
    老师请问一下,异地多活的方案中,A机房的主库同步到B机房的从库,B机房的主库同步到A机房的从库。我理解:那A机房的服务看到的是自己机房的主库和对方机房的从库,通过数据库分片,不同的数据路由到不同数据库,是这样的吗?分片在A机房主库中的数据和分片在B机房主库找那个的数据不做同步?

    作者回复: 是的,通过分片尽量让用户访问本机房的数据

    2019-12-08
    3
    1
收起评论
显示
设置
留言
37
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部