借助 环境混合 架构模式,您可以将工作负载的生产环境保留在现有数据中心中。然后,您可以使用公有云作为开发和测试环境或其他环境。此模式依赖于跨多个计算环境的同一应用的冗余部署。部署的目标是帮助提高容量、敏捷性和弹性。
在评估要迁移的工作负载时,您可能会注意到,在公有云中运行特定应用存在一些难题:
- 辖区或监管限制条件可能要求您将数据保存在特定国家/地区。
- 第三方许可条款可能会阻止您在云环境中操作某些软件。
- 应用可能需要访问仅在本地可用的硬件设备。
在这种情况下,不仅应考虑生产环境,还应考虑应用生命周期中涉及的所有环境,包括开发、测试和预演环境系统。这些限制通常适用于生产环境及其数据。它们可能不适用于不使用实际数据的其他环境。请咨询您所在组织的合规部门或相应团队。
下图展示了典型的 环境混合 架构模式:
在生产系统之外的其他环境中运行开发和测试系统似乎具有风险,并且与现有的最佳做法以及为最大限度减少这些环境之间的差异而进行的尝试背道而驰。虽然这些顾虑是有理由的,但如果您区分开发和测试过程的各个阶段,就会发现这些顾虑是不必要的:
虽然每个应用的开发、测试和部署过程各不相同,但它们通常涉及以下阶段的变体:
- 开发:创建候选版本。
- 功能测试或用户验收测试:验证 候选版本是否符合功能要求。
- 性能和可靠性测试:验证候选版本 是否符合非功能性要求。也称为负载测试。
- 预演环境或部署测试:验证部署过程 是否有效。
- 生产:发布新的或更新的应用。
在单个环境中执行上述多个阶段不太现实,因此每个阶段通常需要一个或多个专用环境。
测试环境的主要目的是运行功能测试。预演环境的主要目的是测试应用部署过程是否按预期工作。当版本进入预演环境时,功能测试应已完成。预演环境是您将软件部署到生产部署之前的最后一步。
为确保测试结果有意义且适用于生产部署,您在整个应用生命周期中使用的一组环境必须尽可能符合以下规则:
- 所有环境具有功能等效性 。也就是说,操作系统和库的架构、API 和版本都是等效的,并且系统在不同环境中的行为相同。这种等效性可避免以下情况:应用在一个环境中正常运行但在另一个环境中失败,或者缺陷无法重现。
- 用于性能和可靠性测试、 预演环境和生产的环境 具有非功能等效性。 也就是说,其性能、规模和配置及其操作和维护方式要么相同,要么仅具有微不足道的差异。否则,性能和预演环境测试毫无意义。
一般来说,如果用于开发和功能测试的环境与其他环境在非功能性上不同,则没有什么问题。
如下图所示,测试和开发环境 基于构建 Google Cloud。托管式数据库(例如 Cloud SQL)可 用作开发和测试的选项 Google Cloud。开发和测试可以在本地环境中使用相同的数据库引擎和版本、功能等效的引擎和版本,或者在测试阶段后发布到生产环境的新版本。不过,由于这两个环境的基础架构并不相同,因此这种性能负载测试方法无效。
以下场景非常适合环境混合模式:
- 通过在适用且可行的情况下依赖 Kubernetes 作为通用运行时层,实现所有环境中的功能等效。
Google Kubernetes Engine (GKE) 可以成为实现此方法的关键技术。
- 确保工作负载的可移植性并忽略计算环境之间的差异。借助 零信任服务网格, 您可以控制和维护 不同环境之间所需的通信隔离。
- 在公有云中运行开发和功能测试环境。 这些环境在功能上等效于其他环境,但在性能等非功能性方面可能有所不同。 上图说明了这一概念。
- 在私有计算环境中运行用于生产、预演环境以及性能(负载测试)和可靠性测试的环境,确保功能和非功能等效性。
设计考虑事项
- 业务需求:应用的每种部署和发布策略 都有其自身的优势和缺点。为确保您选择的方法符合您的具体要求,请根据对业务需求和限制条件的全面评估做出选择。
- 环境差异:作为此模式的一部分,使用此云环境的主要目标是进行开发和测试。最终状态是在私有本地环境(生产)中托管经过测试的应用。为避免开发和测试在云环境中可能按预期运行但在生产环境(本地)中失败的功能,技术团队必须了解并理解这两个环境的架构和功能。这包括对其他应用和硬件基础架构的依赖关系,例如执行流量检查的安全系统。
- 治理:如需控制贵公司可以在 云中开发的内容以及可以用于测试的数据,请使用审批和 治理流程。此流程还可以帮助贵公司确保不会在开发和测试环境中使用本地生产环境中不存在的任何云功能。
- 合格标准:必须有明确、预定义且可衡量的 测试合格标准,这些标准应与贵组织的软件 质量保证 标准保持一致。将这些标准应用于您开发和测试的任何应用。
- 冗余:虽然开发和测试环境可能不需要像生产环境那样高的可靠性,但它们仍然需要冗余功能和测试不同故障场景的能力。您的故障场景要求可能会推动设计,将冗余作为开发和测试环境的一部分。
优点
在公有云中运行开发和功能测试工作负载具有多项优势:
- 您可以根据需要自动启动和停止环境。
例如,您可以为每个提交或拉取请求预配整个环境,允许运行测试,然后再次关闭环境。此方法还具有以下优势:
- 您可以通过在虚拟机 (VM) 实例处于非活动状态时将其停止,或者仅按需预配环境来减少费用。
- 您可以为每个拉取请求启动 临时环境 ,从而加快开发和测试速度。这样做还可以减少维护开销并减少构建环境中的不一致性。
- 在公有云中运行这些环境有助于增加对云及相关工具的了解和信心,这可能有助于迁移其他工作负载。如果您 决定探索 工作负载可移植性 (例如跨环境使用 GKE ),此方法尤其有用。
最佳做法
若要成功实现环境混合架构模式,请考虑以下建议:
- 定义应用通信要求,包括最佳网络和安全设计。然后,使用 镜像网络模式 帮助您设计网络架构,以防止 不同环境中的系统之间进行直接通信。如果需要在不同环境之间进行通信,则必须以受控方式进行。
您选择的应用部署和测试策略应与您的业务目标和要求保持一致。这可能涉及在没有停机时间的情况下发布更改,或者在更广泛发布之前逐步向特定环境或用户组实现功能。
如需使工作负载具有可移植性并忽略环境之间的差异,您可以使用容器和 Kubernetes。如需了解详情,请参阅 GKE 混合环境参考架构。
建立可跨计算环境的常见工具链,用于部署、配置和操作工作负载。使用 Kubernetes 可确保这种一致性。
确保 CI/CD 流水线在计算环境之间保持一致,并确保将一组完全相同的二进制文件、软件包或容器部署到这些环境中。
使用 Kubernetes 时,使用 Tekton 等持续集成系统实施部署流水线,该流水线可部署到集群并跨 环境工作。如需了解详情,请参阅 上的 DevOps 解决方案 Google Cloud。
为帮助您持续发布安全可靠的应用,请将安全性作为 DevOps 流程 (DevSecOps) 的组成部分。如需了解详情,请参阅 使用 Dev(Sec)Ops 工具包在不到一小时内交付并保护面向互联网的应用。
使用相同的工具在 Google Cloud 和现有云环境中进行日志记录和监控。考虑使用开源监控系统。如需了解详情,请参阅 混合云和多云环境的监控和日志记录模式。
如果由不同团队管理测试和生产工作负载,虽然使用各自的工具是可以接受的, 但使用具有不同查看权限的相同工具有助于减少培训工作量和复杂性。
如果选择数据库、存储和消息传递服务进行功能 测试,请使用上具有等效托管功能的产品 Google Cloud。 依靠托管式服务有助于减少维护开发和测试环境所需的管理工作量。
为了保护敏感信息,我们建议对所有传输中的通信进行加密。如果需要在连接层进行加密,根据所选的混合连接解决方案,有多种选项可供选择。这些选项包括 VPN 隧道、通过 Cloud Interconnect 实现的高可用性 VPN 和 MACsec for Cloud Interconnect。
下表显示了与 常见 OSS 产品兼容的产品。 Google Cloud
| OSS 产品 | 与 Google Cloud 产品兼容 |
|---|---|
| Apache HBase | Bigtable |
| Apache Beam | Dataflow |
| CDAP | Cloud Data Fusion |
| Apache Hadoop | Managed Service for Apache Spark |
| MySQL、PostgreSQL | Cloud SQL |
| Redis 集群、Redis、Memcached | Memorystore |
| Network File System (NFS) | Filestore |
| JMS、Kafka | Pub/Sub |
| Kubernetes | GKE |