同城双活是大型架构核心,下面我详解阿里同城双活架构@mikechen
阿里同城双活
同城双活是指:同一个城市部署两个独立机房,两套系统同时对外提供服务。

当任意一个机房发生故障时,业务能够自动切换到另一个机房,实现业务不中断。
它是大型互联网公司(阿里、腾讯、美团、字节、京东等)最常见的高可用架构之一。
例如:
用户请求
│
┌────────┴────────┐
│ │
IDC-A机房 IDC-B机房
(Active) (Active)
│ │
应用集群 应用集群
│ │
Redis集群 Redis集群
│ │
MySQL集群 MySQL集群
两个机房:同时提供服务(Active),同时接收流量(Active)。
自动切换,因此称为:同城双活(City Active-Active)。
阿里同城双活架构
整体架构:

同城双活常见的架构可分为应用层、数据层和流量层三部分。
1. 流量层架构
流量接入层(全局负载均衡), 负责将用户的请求分流到不同的机房。
通常通过 IP 地理位置或轮询算法将流量均分到 A、B 机房。
应用网关(Gateway): 机房入口网关。承担关键职责:解析路由键(Route Key,如 user_id)。
网关根据哈希或分片规则,判断该请求属于哪一个“单元(Cell)”。
若发现该请求进错了机房(例如 user_id 为奇数,本应由 A 机房处理,却因为 DNS 漂移到了 B 机房),网关负责在内网将请求跨机房重定向(Redirect)到正确的机房。
2. 应用层架构
应用层通常采用无状态设计,常见做法包括:
Web/API 服务无状态化;
会话信息集中存储;
任务调度中心统一管理;
3. 数据层架构
数据层是双活成败的关键,常见模式有:
主从复制 + 自动切换:一主一备,严格意义上不算双活,但可作为基础形态。
双主架构:两个中心都可写入,但需要解决冲突与一致性问题。
分库分表 + 按业务域分活:不同业务或不同用户群分别落在不同中心,降低跨中心写冲突。
分布式数据库:通过分布式事务、共识协议或多副本机制实现一致性。