设计可靠系统

本文档介绍了在 Compute Engine 上设计可靠系统的最佳做法。其中提供了常规建议并介绍了 Compute Engine 中的一些功能,可帮助缩短实例停机时间,以及准备好应对虚拟机 (VM) 实例出现意外故障的情况。

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

了解故障类型

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

  • 意外的单个实例故障

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

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

    在某个时间点,您将会遇到意外的单个实例故障和重新启动事件。与意外的单个实例故障不同的是,您的实例发生故障后,会被 Google Compute Engine 服务自动重新启动。要帮助减少此类事件,请备份数据,使用永久性磁盘,然后使用启动脚本来快速重新配置软件。

  • 地区或区域故障

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

    为了减少此类故障,请跨区域和地区创建具备多样性的实例并实施负载平衡。您还应该备份数据或跨多个地区复制永久性磁盘

有关设计可靠系统的提示

要帮助减少实例故障,您应该通过 Google 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 Platform 提供了负载平衡服务,可帮助您应对流量巨大的时段,以免实例过载。借助负载平衡服务,您可以:

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

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

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

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

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

使用启动和关闭脚本

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

启动脚本和关闭脚本是一种高效且极其重要的方式,可用于引导或彻底关闭实例。使用启动脚本来配置实例大有裨益,因此建议您采用这种方式,而不是使用自定义操作系统映像来配置您的实例。每当实例因故障而重新启动或重启时,启动脚本都会运行,并且可以用来安装软件和更新,以及确保服务正在虚拟机中运行。与尝试找出自定义映像中已更改的文件或字节相比,对所做的更改进行编码以在启动脚本中配置实例更加轻松便捷。

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

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

备份数据

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

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

  1. 登录实例:

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

    gcloud init
    

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

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

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

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

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

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档