选择 Google Cloud Region 时,很多人第一反应是“用户在北美,就放美国;用户在欧洲,就放欧洲”。这个原则只能作为最初的方向,不能作为最终的技术决策。对于真正上线的应用,决定用户体验的并不是地图上的直线距离,而是客户端 ISP、互联网路由、Google 网络边缘、负载均衡、应用服务器以及数据库之间的完整请求路径。
因此,Google Cloud 的区域选择最好理解成一个测量问题,而不是一个地理位置问题。真正需要回答的是:主要用户从哪里访问、请求最终进入哪个 Google 网络边缘、负载均衡器把请求送到哪个 Region、应用是否还要访问另一个 Region 的数据库,以及整个请求的 p50、p95 和 p99 延迟是多少。
Google Cloud 本身已经提供了相应工具。Network Intelligence Center 中的 Performance Dashboard 可以查看互联网端点与 Google Cloud Region 之间的中位往返时间(RTT),并且可以按照城市、国家和 Region 查看延迟,还能够查看一小时到六周范围内的历史变化。也就是说,与其凭感觉判断“温哥华应该放 us-west1”,不如直接查看温哥华用户到候选 Region 的实际延迟。
这也是延迟测试最容易被忽略的一点:不要只测一次。
例如,一个网站的服务器分别部署在 Oregon、Iowa、Virginia 和 Montreal 四个区域,某一天晚上从 Vancouver 测试,可能得到一组结果;换一个 ISP、换成手机网络,或者第二天晚高峰再次测试,结果可能已经不同。互联网路由不是固定的专用铜线,ISP 的互联关系、拥塞和路由策略都会影响实际 RTT。
因此,比较 Region 时至少应该记录多个时间段的数据,并且不要只看平均值。对于交互式 Web 应用,p50 可以反映典型用户体验,而 p95 和 p99 更能够暴露网络抖动以及少数用户遇到的长尾延迟。
最基础的测试可以从客户端直接进行。例如 Linux 或 macOS 上可以使用 ping、traceroute 或 mtr,Windows 可以使用 ping 和 tracert。这些工具适合观察基本网络路径和 RTT,但不能把 ICMP 延迟直接当成网站真实响应时间。
一个用户访问 HTTPS 网站,实际经历的过程可能包括 DNS 查询、TCP 建连、TLS 握手、到 Google 网络边缘的传输、负载均衡、后端服务执行、数据库查询以及 HTTP 响应返回。真正决定用户感觉“网站快不快”的,是整个请求链路,而不是单独一个 ping 数字。
因此,专业测试最好同时进行两种测试:网络层测试和应用层测试。
网络层可以测 RTT、丢包和路由变化;应用层则直接向真实 HTTPS endpoint 发起请求,并记录 DNS、TCP、TLS、TTFB(Time to First Byte)以及完整请求耗时。如果网站使用 HTTP/2 或 HTTP/3,还应该考虑连接复用,否则每次请求都重新建立连接会把握手成本重复计算。
如果需要测试 Google Cloud 内部网络,则可以使用 Network Intelligence Center 的 Connectivity Tests。它能够分析 VPC、VPN、VPC Peering、负载均衡器等网络配置,并且在支持的场景下进行 live data plane analysis,提供可达性以及延迟和丢包相关信息。
需要注意的是,Connectivity Tests 并不是一个让你从全球真实消费者电脑上持续运行 HTTP 性能测试的工具。Google 文档明确说明,其 live data plane analysis 主要用于一次性的连通性诊断,而持续监测应该使用 Performance Dashboard 等工具。
对于面向互联网的应用,Google Cloud Performance Dashboard 更有价值。它可以显示不同地理位置到 Google Cloud Region 的中位 RTT,而且还可以比较 Standard 和 Premium Network Tier。Google 官方示例甚至直接展示了如何比较某个城市到不同 Region 的延迟,从而辅助决定工作负载部署位置。
区域匹配也不能简单写成“亚洲用户使用 asia-east1,欧洲用户使用 europe-west1”。同一个国家内部,不同城市之间都可能存在明显差异。更合理的方法是先统计用户来源,例如网站分析数据显示60%的用户来自加拿大西部,20%来自美国西海岸,10%来自美国东部,剩余用户分散在欧洲和亚洲,那么就应该以这些实际流量分布作为 Region 设计依据,而不是把地图切成几个大洲。
对于加拿大西部用户,候选 Region 可以包括 Oregon、Iowa、Montreal 等,但究竟哪个更适合,需要根据实际业务架构测试。Google Cloud 的 Region 是不同的地理区域和故障域,选择时除了延迟,还需要考虑服务可用性、数据驻留要求、灾备设计以及成本。Google 官方也明确指出,Region 的选择应该同时满足 latency、availability 和 durability 等要求。
更重要的是,用户到应用服务器的距离并不是唯一需要优化的距离。
假设用户在 Vancouver,Web frontend 部署在 Oregon,而数据库部署在 Virginia。用户到 Oregon 可能只有较低 RTT,但应用服务器每次请求数据库都需要跨大陆通信。如果一个页面需要几十次数据库查询,单次跨区域延迟经过多次累积以后,最终用户体验仍然可能很差。
所以,真正需要优化的是完整的 application path,而不是单独追求“离用户最近的服务器”。
Google Cloud 的官方负载均衡文档也特别指出,多 Region 部署能够通过把用户请求送到更接近用户的后端降低延迟,但如果应用的一部分仍然集中在一个 Region,就必须减少跨 Region 的往返请求。
这也是多区域架构最容易踩的坑。
假设前端服务分别部署在 Vancouver 用户较近的西部 Region 和欧洲 Region,但所有请求最终都必须读取一个位于美国东部的主数据库。那么看起来是“全球多 Region”,实际上只是把 Web server 分散了,而数据访问仍然集中在一个地方。用户请求可能变成“客户端→最近 Region→远程数据库→最近 Region→客户端”。如果数据库查询频繁,这种架构的延迟可能比单 Region 架构更加糟糕。
因此,多 Region 设计通常需要同时考虑计算层、缓存层和数据层。静态资源、图片、JavaScript、CSS 等内容适合通过 Cloud CDN 在 Google 的全球边缘缓存。Cloud CDN 使用 Google 的全球边缘网络,在大量城市部署缓存节点,从而让用户不必每次都访问源站。
对于动态 API,则不能简单依靠 CDN。API 请求可能需要访问用户数据、数据库或者其他内部服务,此时 Region 的选择和数据架构更加重要。
如果应用需要根据用户位置选择不同后端,也可以使用全球负载均衡架构。Google Cloud 的外部 Application Load Balancer 可以把来自不同地区的请求分发到不同 Region 的后端。Google 官方的 Network Topology 示例就展示了 Americas、EMEA 和 APAC 用户分别进入更接近自己的 Region 的架构。
如果使用 DNS 做地理分流,则又是另一套机制。Cloud DNS 支持 geolocation routing,可以根据请求来源地理位置把 DNS 查询映射到不同目标,并支持健康检查和故障切换。这里尤其要注意,DNS 地理位置并不等于“DNS知道用户的精确 GPS 位置”。Google Cloud 的文档说明,对于公共 DNS,来源判断可以使用查询源 IP 或 EDNS Client Subnet 等信息。
因此,DNS 分流和全球负载均衡不能简单混为一谈。DNS 可以影响客户端最终获得的目标地址,但负载均衡器负责的是后续请求如何进入后端服务。某些架构使用 DNS 做粗粒度的流量分配,其他架构则直接依靠全球负载均衡器完成跨 Region 的请求调度。
另外,原始延迟测试中提到的 VPC Peering 和 Cloud Interconnect 也需要正确理解。VPC Peering主要解决 Google Cloud VPC 网络之间的私有网络连接问题,而 Cloud Interconnect 主要用于企业本地网络与 Google Cloud 之间的专用连接。它们不是普通消费者访问 Web 应用时“降低互联网延迟”的通用按钮。
同样需要删除一个很容易被误传的说法:不存在“每降低10ms延迟就会增加5%到8%成本”这样的通用 Google Cloud 成本规律。成本取决于 Region、计算资源、网络层级、跨区域流量、存储、负载均衡、CDN 命中率以及业务架构。为了降低延迟增加一个 Region,真正增加的可能是计算实例、数据库副本、跨区域复制和运维复杂度,而不是按照每10ms一个固定百分比增长。
因此,比较两个 Region 时,最好建立一个实际测试矩阵。
例如可以选择 Vancouver、Calgary、Seattle、San Francisco、Toronto、New York、London 和 Tokyo 等主要用户城市,然后分别测试候选 Google Cloud Region。每个城市在多个时间段运行 HTTPS 请求,同时记录 RTT、TTFB、完整响应时间、丢包率以及 p50、p95 和 p99。再把这些结果与实际用户数量结合起来,就能够得到比“哪个 Region 离我最近”更加可靠的部署依据。
如果最终发现80%的用户集中在北美西部,那么一个靠近西部用户的 Region 可能成为主要部署位置;如果用户高度分散,则应该进一步计算多 Region 架构带来的收益是否足以覆盖额外的计算、数据库复制和运维成本。
还有一个非常实际的测试原则:一定要从“用户所在网络”测试,而不仅仅是在 Google Cloud VM 上测试。
从一台 Oregon VM ping 另一台 Oregon VM 得到的结果,可以说明 Google Cloud 内部网络性能,却不能代表 Vancouver 家庭用户访问网站的真实体验。一个专业的性能测试体系应该同时包含真实 ISP、移动网络、不同城市的测试节点,以及 Google Cloud 内部的监控数据。这样才能区分“用户到 Google 的网络慢”和“Google 内部服务慢”。
最终,Google Cloud Region 的选择可以归纳成一个工程公式:用户分布决定候选区域,实际 RTT 决定网络距离,应用架构决定真正的端到端延迟,数据位置决定跨区域成本,而 SLA、灾备和数据合规决定最终架构是否能够上线。
云计算时代最容易犯的错误,就是把地图当成网络拓扑图。地图上相隔很近的两个地点,实际互联网路径可能绕行;地图上距离稍远的两个地点,通过 Google 的全球网络却可能拥有非常好的连接。真正可靠的做法不是猜哪个 Region“应该更快”,而是让真实用户流量、Google Cloud Performance Dashboard、Connectivity Tests、应用层 APM 和多地点实测数据共同告诉你答案。
Google Cloud 延迟测试怎么做,用户所在地和服务器区域应该怎样匹配
图片说明:示意图 图片来源:Public Domain(公有领域)
喜欢这篇报道?
使用下面的功能,方便以后继续阅读和分享 MNewsTV
关于文章收藏
收藏不需要注册帐号,收藏信息仅保存在当前浏览器中。
删除收藏请进入「我的收藏」进行管理。
捐助(Paypal): https://www.paypal.me/observeccp 订阅中国观察电报 Telegram : https://t.me/s/ObserveCCP