多区域(Multi-Region)与多租户(Multi-Tenancy)是全球化业务系统设计的两个核心维度。它们解决的是不同的问题:多区域关注物理位置与容灾,多租户关注资源与数据的归属和隔离。但在真实业务中二者常常叠加出现——同一个微服务集群既要按区域就近部署,又要按租户做隔离。本文从网关、应用层到存储中间件,梳理一套可落地的实现思路。

多区域多租户架构图

为什么需要多区域 + 多租户

以全球化电商/支付平台为例,业务通常面临两类约束:

更复杂的在于:区域和租户不是两个独立正交的维度。一个租户可能只在某个国家运营(如东南亚某国本地商户),也可能横跨整个大洲(如北美、南美按区域运营)。因此需要一种机制,让"运营边界"(Region / Country / Tenant)可以灵活定义,并从网关一直贯穿到存储。

核心概念

这三者不是严格的包含关系:Region 可以覆盖多个 Country,一个 Country 也可以承载多个 Tenant;反之,一个大洲级租户(如北美品牌)可能把多个 Country 合并成一个"运营区域"。

管理单元(Admin Unit):统一运营边界抽象

设计上的第一步是把"运营边界"抽象为管理单元(Admin Unit),它可以是 Region、Country 或 Tenant 的任意一级。这样后端系统不必各自实现一套"区域判断"逻辑,而是统一用管理单元来路由、隔离与计费。

Admin Unit(管理单元)
├── type: REGION       例如 ap-southeast、us-east、sa-east
├── type: COUNTRY      例如 sg、id、br
└── type: TENANT       例如 brand-a、merchant-001

关键点:

架构分层

入口网关层

网关(API Gateway)是多区域多租户的第一道分流点,职责包括:

应用层(微服务)

数据层

数据是多区域多租户设计中最难的部分,通常分两类处理:

常见做法:

中间件与基础设施

典型场景示例

场景一:东南亚按国家运营

印尼(id)、新加坡(sg)、泰国(th)各自独立运营:币种不同、支付渠道不同、合规不同。此时 Admin Unit 用 COUNTRY 粒度:

ap-southeast(Region)
├── COUNTRY id      → 印尼币种 IDR、本地支付
├── COUNTRY sg      → 新加坡币种 SGD、本地支付
└── COUNTRY th      → 泰国币种 THB、本地支付

网关按请求中的国家上下文路由到对应 COUNTRY 的实例,数据按国家分库,互不混淆。

场景二:北美/南美按区域运营

北美多个国家(US、CA、MX)业务模式接近,合并成一个运营区域;南美(BR、AR、CL)也按区域运营。此时 Admin Unit 用 REGION 粒度:

us-east(Region,覆盖 US/CA/MX)
sa-east(Region,覆盖 BR/AR/CL)

区域内的国家共享币种策略或只做小差异化(差异放配置),路由和隔离都在 Region 层完成。

设计原则与避坑

参考