2. OCI区域与可用性域架构设计

在OCI中规划高可用架构,第一步不是选计算规格,而是先把“地理—逻辑—权限”三层模型对齐:区域(Region)决定数据驻留与网络时延边界,可用性域(Availability Domain,AD)决定同一区域内物理隔离的故障边界,故障域(Fault Domain,FD)决定AD内部机架级与电源级的分散粒度;而租户(Tenancy)与区间(Compartment)则决定资源归属、配额与访问控制边界。四者叠加,才构成可落地的高可用拓扑。

一、区域:地理边界与数据驻留

区域是OCI中最高层级的地理隔离单元,每个区域由至少一个、通常三个可用性域组成,区域之间通过低时延骨干网互联,但彼此独立供电、独立制冷、独立网络出口。选择区域时需同时考虑三类约束:

  • 数据驻留与合规:若业务要求数据不出境,则主区域必须落在对应国家或地区;跨区域复制只能作为容灾手段,不能替代本地合规。
  • 用户与依赖时延:面向终端用户的Web层应靠近用户群体;面向数据库的中间件应靠近数据库所在区域,避免跨区域同步调用。
  • 服务可用性差异:并非所有区域都提供全部服务,例如某些GPU规格、专属区域(Dedicated Region)或特定AI服务只在部分区域开放,规划前需核对区域服务矩阵。

区域之间不是“主备”关系,而是“独立故障域+可选复制”关系。常见做法是:主区域承载读写流量,备区域通过对象存储跨区域复制、数据库Data Guard或GoldenGate保持数据同步,DNS或流量管理按健康检查切换。

二、可用性域与故障域:从机房到机架

可用性域是区域内相互隔离的数据中心组,拥有独立的电力、冷却和网络。同一区域内AD之间通过低时延、高带宽网络互联,因此可以承载同步复制和分布式集群。故障域是AD内部的进一步隔离单元,通常对应不同的机架、电源和交换机,用于避免单机架故障导致实例批量不可用。

规划时遵循两条硬性原则:

  1. 跨AD部署无状态层:Web、应用、API网关等无状态组件应均匀分布在至少两个AD中,前端通过负载均衡器分发,后端通过健康检查摘除故障AD节点。
  2. 跨FD部署有状态层:数据库、缓存、消息队列等有状态组件,若无法跨AD同步,则至少在同一AD内跨FD分布,并配合Data Guard、RAC或集群软件实现故障切换。
OCI的AD名称在不同租户中可能映射为不同物理位置,因此不要硬编码“AD-1”作为主节点;应通过API动态获取AD列表,再按可用性域名称做逻辑分配。

三、租户与区间:权限与配额边界

租户是OCI账户的顶层容器,所有资源、用户、策略、配额都归属于某个租户。区间是租户内的逻辑隔离单元,用于分组资源、隔离网络、限定策略作用域。区间可以嵌套,但建议按“环境+业务域”划分,例如:

Tenancy
├── Compartment: prod-network
├── Compartment: prod-app
├── Compartment: prod-db
├── Compartment: nonprod-network
├── Compartment: nonprod-app
└── Compartment: shared-services

区间本身不提供网络隔离,网络隔离由VCN和子网完成;区间提供的是权限边界和配额边界。例如,可以给prod-db区间单独设置“禁止删除数据库”的策略,也可以为每个区间设置计算、存储配额,防止非生产环境挤占生产资源。

四、高可用拓扑规划方法

高可用拓扑不是“多开几台机器”,而是按故障域逐层设计冗余。推荐按以下顺序推进:

  1. 确定RTO/RPO:RTO决定切换速度,RPO决定数据丢失容忍度。RPO=0通常要求同步复制,跨AD可行;跨区域同步复制受时延限制,往往只能异步。
  2. 划分故障边界:把系统拆成无状态层、有状态层、共享服务层。无状态层跨AD,有状态层跨FD或跨AD,共享服务层按依赖关系决定是否跨区域。
  3. 设计流量路径:公网入口使用区域级负载均衡器,后端跨AD分发;内部服务使用VCN内私有负载均衡器,避免跨区域绕行。
  4. 验证切换:通过停止一个AD中的实例、模拟FD断电、断开跨区域复制链路,观察负载均衡器健康检查、数据库切换和DNS解析是否按预期收敛。

下面这张图给出一个典型的三层高可用拓扑:区域A内两个AD承载Web/App层,数据库跨FD部署并异步复制到区域B;租户与区间作为权限边界包裹全部资源。

OCI 区域 / AD / FD / 租户-区间 高可用拓扑示意 Tenancy(租户) Compartment: prod-app / prod-db Region A(主区域) Availability Domain 1 FD-1 Web / App FD-2 Web / App DB Primary(跨FD) FD-1 / FD-2 同步复制 Availability Domain 2 FD-1 Web / App FD-2 Web / App DB Standby(跨FD) Data Guard 同步 区域级负载均衡器 Region B(容灾区域) AD-1 Web / App 备用 DB 只读副本 AD-2 Web / App 备用 对象存储副本 同步复制 异步复制 Compartment: shared-services VCN / 子网 跨AD路由 IAM 策略 区间级权限 配额与预算 按区间限制 监控与日志 跨区域汇聚 无状态层(跨AD) 有状态层(跨FD/AD) 容灾区域

五、规划检查清单

在提交架构设计前,建议逐项核对以下内容,避免“看起来高可用、实际单点”的常见问题:

检查项判断标准常见错误
无状态层是否跨AD 至少两个AD中各有实例,负载均衡器健康检查覆盖全部AD 所有Web实例放在同一AD,AD故障即全站不可用
有状态层是否跨FD 数据库主备分布在不同FD,且复制模式与RPO匹配 主备在同一FD,机架断电同时失效
区间是否按环境隔离 prod与nonprod使用不同区间,策略和配额独立 所有资源放在根区间,权限过大、配额争抢
跨区域复制是否验证 定期演练断开复制链路,确认RPO和切换时间 只配置复制,从未验证恢复流程
AD名称是否动态获取 通过API查询AD列表,按逻辑名称分配 硬编码AD-1,跨租户部署时映射错位
高可用拓扑的验证不能只看“资源是否创建成功”,而应实际停止一个AD中的实例、模拟FD断电、断开跨区域复制,观察负载均衡器摘除、数据库切换和DNS收敛是否符合RTO/RPO预期。未经验证的冗余,只是心理安慰。

总结来说,OCI的区域、可用性域、故障域、租户与区间共同构成一个从地理到机架、从权限到配额的完整边界体系。高可用规划的核心动作是:先定RTO/RPO,再按故障边界分层冗余,最后用真实切换演练验证。只有把“边界”画清楚,冗余才有意义。