高并发系统设计40问
唐扬
美图公司技术专家
立即订阅
9308 人已学习
课程目录
已更新 42 讲 / 共 45 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么你要学习高并发系统设计?
免费
基础篇 (6讲)
01 | 高并发系统:它的通用设计方法是什么?
02 | 架构分层:我们为什么一定要这么做?
免费
03 | 系统设计目标(一):如何提升系统性能?
04 | 系统设计目标(二):系统怎样做到高可用?
05 | 系统设计目标(三):如何让系统易于扩展?
06 | 面试现场第一期:当问到组件实现原理时,面试官是在刁难你吗?
演进篇 · 数据库篇 (5讲)
07 | 池化技术:如何减少频繁创建数据库连接的性能损耗?
08 | 数据库优化方案(一):查询请求增加时,如何做主从分离?
09 | 数据库优化方案(二):写入数据量增加时,如何实现分库分表?
10 | 发号器:如何保证分库分表后ID的全局唯一性?
11 | NoSQL:在高并发场景下,数据库和NoSQL如何做到互补?
演进篇 · 缓存篇 (6讲)
12 | 缓存:数据库成为瓶颈后,动态数据的查询要如何加速?
13 | 缓存的使用姿势(一):如何选择缓存的读写策略?
14 | 缓存的使用姿势(二):缓存如何做到高可用?
15 | 缓存的使用姿势(三):缓存穿透了怎么办?
16 | CDN:静态资源如何加速?
加餐 | 数据的迁移应该如何做?
演进篇 · 消息队列篇 (6讲)
17 | 消息队列:秒杀时如何处理每秒上万次的下单请求?
18 | 消息投递:如何保证消息仅仅被消费一次?
19 | 消息队列:如何降低消息队列系统中消息的延迟?
20 | 面试现场第二期:当问到项目经历时,面试官究竟想要了解什么?
用户故事 | 从“心”出发,我还有无数个可能
期中测试 | 10道高并发系统设计题目自测
演进篇 · 分布式服务篇 (9讲)
21 | 系统架构:每秒1万次请求的系统要做服务化拆分吗?
22 | 微服务架构:微服务化后系统架构要如何改造?
23 | RPC框架:10万QPS下如何实现毫秒级的服务调用?
24 | 注册中心:分布式系统如何寻址?
25 | 分布式Trace:横跨几十个分布式组件的慢请求要如何排查?
26 | 负载均衡:怎样提升系统的横向扩展能力?
27 | API网关:系统的门面要如何做呢?
28 | 多机房部署:跨地域的分布式系统如何做?
29 | Service Mesh:如何屏蔽服务化系统的服务治理细节?
演进篇 · 维护篇 (7讲)
30 | 给系统加上眼睛:服务端监控要怎么做?
31 | 应用性能管理:用户的使用体验应该如何监控?
32 | 压力测试:怎样设计全链路压力测试平台?
33 | 配置管理:成千上万的配置项要如何管理?
34 | 降级熔断:如何屏蔽非核心系统故障的影响?
35 | 流量控制:高并发系统中我们如何操纵流量?
36 | 面试现场第三期:你要如何准备一场技术面试呢?
实战篇 (2讲)
37 | 计数系统设计(一):面对海量数据的计数器要如何做?
38 | 计数系统设计(二):50万QPS下如何设计未读数系统?
高并发系统设计40问
登录|注册

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

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

多机房部署的难点是什么

取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《高并发系统设计40问》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(16)

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

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

    2019-11-27
    3
  • 被过去推开
    阿里云有跨区域mysql主从复制,比同机房的主从复制贵了不少
    2019-12-05
    1
  • 海罗沃德
    我們使用AWS,跨region部署,會導致緩存不同步,而AWS不支持跨region複製redis數據,而我們又沒有做用戶分片,導致PM,測試都在玩命用同一個用戶側跨region的case

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

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

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

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

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

    2019-12-18
  • 洋洋洋
    老师,我感觉你在异地多活方案写的不是很详细,比如异地双机房的主库是否同步,每个机房是保存有全量的数据,以及异地多活的架构题也不是很清晰
    2019-12-14
  • 👽
    我的理解:还是得分析了流量价值。如果,机房宕机会给公司带来较大损失的时候。就需要考虑多活。但是,如果宕机对系统没什么太大的影响(例如停一天也没什么影响的项目),就并不需要考虑多活。

    作者回复: 额 一般也不会有宕机一天对公司没有影响的项目吧

    主要是架构复杂度带来的成本和可用性之间的权衡

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

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

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

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

    2019-12-04
  • longslee
    打卡。emmm,全是大佬经验,跪了
    2019-12-03
  • 阿卡牛
    梦想还是要有的,万一有机会给我实践异地多活呢?
    2019-11-29
  • MoonGod
    老师请问一下,异地多活的方案中,两地数据库数据是相互隔离的吗?主从同步的方案只是把本机房的从库放倒对端机房。但对端机房主库写入的数据不会同步到这个从库中吧?

    作者回复: 是要同步的,因为你很难做到用户完全分片,所有的请求都落入到本机房中

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

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

    2019-11-27
  • 小喵喵
    在小公司,连机房都没有,都是部署在云服务器上。这怎么学习这些架构呢?

    作者回复: 云服务是有可用区概念的,你可以理解为同城多机房:)

    2019-11-27
  • 星空123
    异步多活架构,这套架构太花钱了
    2019-11-27
  • 星空123
    这就是为啥公司买服务器都会买同个大区,同个可用区的原因了。减少两个服务器交互的网络延迟
    2019-11-27
收起评论
16
返回
顶部