设计稳健可靠的系统

本文档介绍了在 Compute Engine 上设计稳健可靠的系统的最佳做法。它提供了一般性建议,介绍了 Compute Engine 中的某些功能,这些功能有助于减少实例停机时间,以及为应对虚拟机 (VM) 实例的意外故障做好准备。

稳健可靠的系统是指可以承受一定数量的故障或中断,而不会中断您的服务或影响用户的服务使用体验的系统。虽然 Compute Engine 会不遗余力防止此类中断,但某些事件是不可预测的,因此最好是为这些事件做好准备。

了解故障类型

在某些时候,您的一个或多个虚拟机实例可能会由于系统或硬件故障而无法工作。其中一些故障包括但不限于:

  • 意外的单个实例故障

    意外的单个实例故障可能是由硬件或系统故障导致的。为缓解此类事件的影响,请使用永久性磁盘启动脚本保存您的数据,并在重启实例后重新启用软件。

  • 意外的单个实例重新启动

    有时,您可能会遇到意外的单个实例故障和重新启动。与意外的单个实例故障不同,实例失败并会由 Compute Engine 服务自动重新启动。为缓解此类事件的影响,请备份数据,使用永久性磁盘,并且使用启动脚本快速重新配置软件。

  • 地区或区域故障

    地区和区域故障非常罕见,但一旦发生就可能会导致给定地区或区域内的所有实例无法访问或失败。

    为缓解此类事件的影响,请在不同的区域和地区创建实例并实现负载平衡。您还应该备份数据,或者跨多个地区复制永久性磁盘

有关设计稳健可靠系统的提示

为帮助缓解实例故障的影响,您应在 Compute Engine 服务上设计稳健可靠的应用,使之能够抵御故障、网络干扰和意外灾难。稳健可靠的系统应该有能力顺利应对故障,包括将流量从停止工作的实例重新定向到正常运行的实例,或者在实例重启后自动执行任务。

以下的一般性提示有助于设计稳健可靠的系统,抵御故障。

使用实时迁移

Google 会定期对其基础架构进行维护,方法是使用最新软件修补系统、执行日常测试和预防维护,以及全面确保我们的基础架构尽可能安全、快速和高效。Compute Engine 采用实时迁移来确保此基础架构维护在默认情况下对于您的虚拟机实例是透明的。

实时迁移是 Google 打造的一项技术,用于将正在运行的实例从即将进行维护的系统中移出。Compute Engine 会自动执行此操作。

在实时迁移期间,您的实例可能会出现短暂的性能下降情况。您也可以选择将虚拟机实例配置为在维护事件前关闭并在其完成后重启,以免受该事件的影响。如果您的实例需要持续保持最高性能,并且您的整个应用可应对实例故障或重启,那么非常适合使用这种方法。

如需将您的虚拟机配置为可进行实时迁移,或者将其配置为重启而不是迁移,请参阅设置实例的安排选项

如需详细了解实时迁移,请参阅实时迁移文档。

分散部署实例

您可以跨多个区域和地区创建实例,这样如果您的一个实例所在的地区或区域发生服务中断情况,您就可以改用备用虚拟机实例。如果您在同一地区或区域中托管所有实例,那么一旦该地区或区域因服务中断而无法访问,您将无法访问其中的任何实例。

使用特定于地区的内部 DNS 名称

如果您在 Compute Engine 内部网络中使用内部 DNS 名称或实例名称指定实例网址,请使用地区级 DNS 名称。内部 DNS 服务器会分布在所有地区,因此即使其他地点发生故障,您也可以依靠地区 DNS 名称进行解析。实例的内部完全限定域名 (FQDN) 采用以下格式:

  • 使用地区级 DNS 的实例:[INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal
  • 使用全局 DNS 的实例:[INSTANCE_NAME].c.[PROJECT_ID].internal

其中:

  • [INSTANCE_NAME] 是实例的名称。
  • [ZONE] 是实例所在的地区。
  • [PROJECT_ID] 是实例所属的项目。

如需检查实例使用的是地区级 DNS 名称还是全局 DNS 名称,请参阅查看实例的 DNS 名称

如果您的项目使用的是全局 DNS 名称,则可以为您的应用设计使用地区级 DNS 名称和搜索路径。如需了解详情,请参阅改用地区 DNS 名称

创建实例组

您可以使用代管实例组来创建同类实例组,使负载平衡器能够将流量定向到多个虚拟机实例,以防某一实例运行状况不佳。

托管实例组还提供自动扩缩自动修复等功能。借助自动扩缩功能,您可以通过依据特定信号增加或减少虚拟机实例数量来应对流量高峰;自动修复功能会执行运行状况检查,并在必要时自动重新创建运行状况不佳的实例。

托管实例组也适用于区域,因此您可以创建一组分布在单个区域内的多个地区的虚拟机实例。如需了解详情,请参阅使用区域级托管实例组来分布实例

使用负载平衡

Google Cloud 提供了负载平衡服务,可帮助您应对流量巨大的时段,以免实例过载。借助负载平衡服务,您可以实现以下目标:

  • 使用区域级托管实例组将您的应用部署到多个地区内的实例上。然后,您可以配置转发规则,以将流量分布到该区域内的所有地区中的所有虚拟机实例中。每个转发规则都可以使用外部 IP 地址来定义应用的一个入口点。

  • 使用全局负载平衡在多个区域中部署实例。HTTP(S) 负载平衡使您的流量能够在离客户端最近的位置进入 Google Cloud 系统。跨区域负载平衡可实现冗余性,以便在流量无法到达某个区域时自动转移至其他区域,因此仍可使用同一外部 IP 地址访问您的服务。

  • 使用自动扩缩功能,根据负载的增减自动在代管实例组中添加或删除实例。

此外,负载平衡服务还提供虚拟机运行状况检查,从而在检测和处理实例故障方面提供支持。

如需了解详情,请参阅负载平衡概览负载平衡文档

使用启动和关闭脚本

Compute Engine 提供了启动和关闭脚本,这两种脚本分别在实例启动或关闭时运行。当您的实例首次启动或关闭(无论是有意还是无意)时,这些脚本可以自动执行安装软件、运行更新、进行备份、记录数据等任务。

使用启动脚本和关停脚本引导或彻底关闭实例是一种高效且极具价值的做法。与使用自定义映像配置实例相比,使用启动脚本配置实例可以有诸多益处。启动脚本会在实例因故障而重新启动时运行,可用于安装软件和更新以及确保服务在虚拟机内运行。与尝试找出自定义映像中哪些文件和字节发生了变化相比,将更改以代码形式写入到启动脚本中以配置实例更为简单。

关闭脚本可以在您停止实例之前执行最后的任务,如备份数据、保存日志以及平稳终止连接。

如需了解详情,请参阅运行启动脚本运行关停脚本

备份数据

定期在多个位置备份数据。您可以将文件备份到 Cloud Storage、创建永久性磁盘快照,或将数据复制到其他区域或地区中的永久性磁盘。

如需将文件从实例复制到 Cloud Storage 中,请执行以下操作:

  1. 登录实例:

    gcloud compute ssh example-instance
    
  2. 如果您从未在此实例上使用 gsutil 工具,请设置您的凭据。

    gcloud init
    

    或者,如果您将实例设置为使用具有 Cloud Storage 范围的服务帐号,则可以跳过该步骤以及下一步。

  3. 按照说明向 Cloud Storage 进行身份验证。

  4. 使用以下命令将数据复制到 Cloud Storage:

    gsutil cp <file1> <file2> <file3> ...  gs://<your bucket>
    

您还可以使用 gcloud compute 工具将文件复制到本地计算机。如需了解详情,请参阅将文件复制到实例或者从实例中复制文件

后续步骤