异地双活的四个误区
郑昀(老兵笔记) 20190305
阿里云华北二机房2019年3月3日凌晨服务中断长达三小时,我在微博上喊出了:工程师赶紧起床,切多活流量啊。
那么切多活有什么常见误区呢?
A,灾备(主备)还是双活?
多年前,大家往往做成了灾备机房,一主一备。结果是,真正灾难发生的时候,最高领导人下不了决心切机房,因为无法预料切换后果(灾难总是不期而遇,切过去就可能切不回来了)。
所以一定是多个数据中心同时运行着同样的应用,拥有同样的数据,任何一个客户的交易可以在分钟级全部路由到另一个中心并对外提供服务,不至于说灾难来临时才发现集群无法工作。
B,双活测试模拟正常流量切换就够了吗?
不是模拟在正常情况下的多活切换,那怎么测怎么有。
而是模拟灾难发生(突然发生)的时候,另外一个机房物理消失了,你该如何切换。
我们过去犯的两个错误是:
-用代码逻辑限制双活机房之间的数据库同步不能延时超过N分钟,超过了就阻止切换;
-限制双活机房的 otter 服务访问超时时间不得超过N分钟,超过了就阻止切换。
问题就在于,真正灾难发生的时候,机房已物理不可访问了,这时候就是要立刻地、全部地切换流量,人下达的命令就是最终裁决。拼着损失一分钟的交易和脏数据,也要把交易切到另一个机房。
C,所有业务都双活吗?
基于互联网公司常用的基本可用性保障原则,只是保障核心业务双活。
怎么定义核心业务?即不能容忍中断的服务。
用户注册,商户进件,这些都属于能容忍临时性中断的服务。
非核心业务应用都被标记为非多活业务,非多活数据库与多活数据库要严格区分开来。
D,切机房的时候直接切吗?
双活意味着两个机房都不需要维护一个能承载所有流量的集群,否则太费钱。
所以模拟切机房流量的时候,一定要测试与核心业务有关的所有应用自动扩容,扩容之后再切换流量。测试扩容的效率,分钟级扩容完毕。
所以你的应用最好都是部署在Docker容器集群上的,这样才能做到扩容分钟级。
而且大家一般是混合云部署,所以在不同的云平台上,你的应用部署底层基础最好都一模一样,方便你扩容和切换。
-EOF-
欢迎订阅老兵笔记:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2010-03-08 Hunch:自动问答和决策机