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