• 异地多活设计4大技巧


    极客时间:《从 0 开始学架构》:异地多活设计4大技巧

    技巧 1:保证核心业务的异地多活

    “异地多活”是为了保证业务的高可用,优先实现核心业务的异地多活架构

    技巧 2:保证核心数据最终一致性

    异地多活本质上是通过异地的数据冗余,来保证在极端异常的情况下业务也能够正常提供给用户,因此数据同步是异地多活架构设计的核心。
    数据冗余是要将数据从 A 地同步到 B 地,从业务的角度来看是越快越好,最好和本地机房一样的速度最好。因此一个矛盾的地方:业务上要求数据快速同步,但物理很难做到数据的快速同步。有以下几种方法可参考:

    • 尽量减少异地多活机房的距离,搭建高速网络
    • 尽量减少数据同步,只同步核心业务相关的数据
    • 保证最终一致性,不保证实时一致性
      最终一致性指的是BASE理论中,业务不依赖数据同步的实时性,只要数据最终能一致即可。

    技巧 3:采用多种手段同步数据

    数据同步是异地多活架构设计的核心。采用如下几种方式同步数据:

    • 消息队列方式
      将数据通过消息队列同步到其他业务中心
    • 二次读取方式
      某些情况下可能出现消息队列同步也延迟了,用户在 A 中心注册,然后访问 B 中心的业务,此时 B 中心本地拿不到用户的账号数据。为了解决这个问题,B 中心在读取本地数据失败时,可以根据路由规则,再去 A 中心访问一次(这就是所谓的二次读取,第一次读取本地,本地失败后第二次读取对端),这样就能够解决异常情况下同步延迟的问题。
    • 存储系统同步方式
      通过数据库的同步机制将数据复制到其他业务中心
    • 回源读取方式
      对于登录的 session 数据,由于数据量很大,我们可以不同步数据;但当用户在 A 中心登录后,然后又在 B 中心登录,B 中心拿到用户上传的 session id 后,根据路由判断 session 属于 A 中心,直接去 A 中心请求 session 数据即可;反之亦然,A 中心也可以到 B 中心去获取 session 数据。
    • 重新生成数据方式

    技巧 4:只保证绝大部分用户的异地多活

    异地多活也无法保证 100% 的业务可用,这是由物理规律决定的,光速和网络的传播速度、硬盘的读写速度、极端异常情况的不可控等,都是无法 100% 解决的。
    虽然我们无法做到 100% 可用性,但并不意味着我们什么都不能做,为了让用户心里更好受一些,我们可以采取一些措施进行安抚或者补偿,例如:

    • 挂公告
      说明现在有问题和基本的问题原因,如果不明确原因或者不方便说出原因,可以发布“技术哥哥正在紧急处理”这类比较轻松和有趣的公告。
    • 事后对用户进行补偿
    • 补充体验

    核心思想

    异地多活设计的理念可以总结为一句话:采用多种手段,保证绝大部分用户的核心业务异地多活!

  • 相关阅读:
    websocket的理解&应用&场景
    如何设置winform程序图标
    Python简单爬虫爬取自己博客园所有文章
    分享一个自己做的SpringMVC的PPT
    2016校招薪资汇总
    2016阿里巴巴校招offer面经
    利用快排partition求前N小的元素
    几个面试经典算法题Java解答
    深入理解java垃圾回收机制
    深入理解JVM结构
  • 原文地址:https://www.cnblogs.com/whiteBear/p/15810772.html
Copyright © 2020-2023  润新知