2. Google Cloud区域与可用区架构解析
要理解Google Cloud上的高可用与灾备设计,第一步不是选服务,而是把“资源放在哪里”这件事看清楚。Google Cloud的物理基础设施由三个层次构成:区域(Region)、可用区(Zone)和边缘位置点(Edge Point of Presence,Edge PoP)。它们不是简单的包含关系,而是分别服务于不同的目标——区域决定资源归属与合规边界,可用区决定故障隔离粒度,边缘位置点决定用户到服务的网络接入距离。
三个层次各自的职责
区域是一个独立的地理位置,例如 asia-east1(台湾)、asia-southeast1(新加坡)、us-central1(爱荷华)。每个区域内部署了独立的电力、冷却、网络骨干接入和控制系统。区域是大多数资源的“归属地”:虚拟机、持久磁盘、区域级负载均衡、Cloud SQL实例、GKE集群的控制平面等,都绑定在某个具体区域内。区域也是合规与数据驻留的边界,选择区域往往先由法规和用户分布决定。
可用区是区域内部的独立故障域。一个区域通常包含3个或更多可用区,命名形如 asia-east1-a、asia-east1-b、asia-east1-c。每个可用区拥有独立的供电、冷却和网络设备,可用区之间通过区域内低延迟、高带宽的专用链路互联,往返时延通常在1毫秒以内。这意味着:同一区域内跨可用区通信足够快,可以支撑同步复制;而单个可用区发生故障时,其他可用区不受影响。可用区是“故障隔离”的最小单位,也是设计高可用时最常用的冗余维度。
边缘位置点不属于某个区域的内部结构,而是Google全球网络在用户侧的接入点。它承担的是“把用户流量尽快引入Google骨干网”的职责,典型服务包括Cloud CDN缓存、全球外部负载均衡的Anycast入口、Cloud Interconnect的接入点等。边缘位置点数量远多于区域,覆盖城市级位置。它不承载用户的持久化资源,但直接影响访问时延和入口可用性。
资源全局性与区域性的分类
理解了物理层次,接下来要判断“资源放在哪一层”。Google Cloud的资源按作用范围可分为三类,这直接决定了高可用设计的冗余维度。
全局资源不绑定任何区域,一次创建即可在全球访问。典型代表包括:全球外部应用负载均衡(Global External Application Load Balancer)的前端IP、Cloud CDN、Cloud DNS、IAM策略、VPC网络本身、全球路由表、Cloud Armor安全策略等。全局资源的优势是天然跨区域,用户请求会被Anycast路由到最近的健康后端;但它们的后端服务仍然必须部署在具体区域中,全局只是“入口”和“策略”的全局。
区域资源绑定在某个区域,可在该区域内的多个可用区之间做冗余。例如:区域级外部IP、区域级负载均衡、Cloud SQL主实例、GKE区域集群的控制平面、Cloud Storage的区域级存储桶(Standard存储类默认区域冗余)。区域资源的高可用做法是“区域内跨可用区复制”,例如Cloud SQL配置高可用后,主实例在可用区a,备用实例在可用区b,故障时自动切换。
可用区资源绑定在单个可用区内,故障时直接影响该可用区内的实例。例如:单个Compute Engine虚拟机、区域持久磁盘挂载到某可用区、单个GKE节点。可用区资源本身不具备冗余能力,必须通过上层设计(如托管实例组跨可用区分布、GKE节点池跨可用区)来获得高可用。
| 资源类型 | 作用范围 | 典型示例 | 高可用冗余维度 |
|---|---|---|---|
| 全局资源 | 全球 | 全球负载均衡前端IP、Cloud DNS、IAM、VPC | Anycast + 多区域后端 |
| 区域资源 | 单个区域 | Cloud SQL实例、区域级IP、GKE控制平面 | 区域内跨可用区复制 |
| 可用区资源 | 单个可用区 | 单个VM、区域持久磁盘、GKE节点 | 依赖上层跨可用区编排 |
多区域部署的物理与逻辑基础
多区域部署不是简单地把同一套资源复制到两个区域。它依赖两个基础:物理上,Google的全球骨干网把各区域连接起来,跨区域流量走专用链路而非公共互联网,时延和丢包可控;逻辑上,全局资源(如全球负载均衡、Cloud DNS、VPC全球路由)提供了统一的入口和寻址平面,使多个区域的后端可以作为一个整体对外服务。
一个典型的多区域Web架构可以这样组织:前端使用全球外部应用负载均衡,后端服务分别部署在 asia-east1 和 asia-southeast1 两个区域,每个区域内部跨3个可用区部署托管实例组。用户请求先到最近的边缘位置点,再经骨干网进入负载均衡,由负载均衡根据后端健康状态和容量把请求转发到某个区域的实例组。数据库层使用Cloud SQL跨区域只读副本或Spanner多区域实例,保证数据在区域故障时仍可读或可写。
--region,它是区域资源;如果必须指定 --zone,它是可用区资源;如果两者都不需要,它通常是全局资源。这个判断直接决定了你需要在哪个维度上做冗余。
最后要区分“高可用”和“灾备”对区域/可用区的不同用法。高可用主要解决单可用区故障,做法是在同一区域内跨可用区冗余,切换快、成本可控。灾备解决的是整个区域不可用,做法是跨区域复制和切换,RTO和RPO通常更大,成本也更高。两者不是二选一,而是分层叠加:先做好区域内跨可用区高可用,再根据业务等级决定是否增加跨区域灾备。理解区域、可用区、边缘位置点三者的职责边界,以及资源全局性与区域性的分类,是后续所有架构决策的起点。