安排微服务和多容器应用应用程序的业务流程,以实现高可伸缩性和高可用性

提示

此内容摘自电子书《适用于容器化 .NET 应用程序的 .NET 微服务体系结构》,可在 .NET 文档上获取,也可作为免费可下载的 PDF 脱机阅读。

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

如果应用程序基于微服务或只是跨多个容器拆分,则必须使用适用于生产就绪应用程序的业务流程协调程序。 如前所述,在基于微服务的方法中,每个微服务均拥有其模型和数据,如此从开发和部署的角度来看,它便是具有自主性。 但即使拥有由多个服务组成的更传统的应用程序(如 SOA),也将拥有多个容器或服务,这些容器或服务中包含需要作为分布式系统部署的单个业务应用程序。 这类系统的扩展和管理非常复杂;因此,如果想要拥有生产就绪且可缩放的多容器应用程序,则必须使用业务流程协调程序。

图 4-23 介绍如何部署到由多个微服务(容器)组成的应用程序群集。

Diagram showing Composed Docker applications in a cluster.

图 4-23 。 容器群集

为每个服务实例使用一个容器。 Docker 容器是“部署单元”,容器是 Docker 映像的实例。 一个主机可以处理多个容器。 它看上去类似于逻辑方法。 但是如何处理负载均衡、路由以及如何协调安排这些组合式应用程序呢?

单个 Docker 主机中的普通 Docker 引擎能够满足在一台主机上管理单映像实例的需求,但若要管理针对更复杂的分布式应用程序而部署在多个主机上的多个容器,则无法满足需求。 大多数情况下,需要一个管理平台,该平台能自动启动容器、横向扩展容器(每个映像具有多个实例)、必要时暂停或关闭容器,并且在理想情况下还能控制资源(如网络和数据存储)访问方式。

如果不仅要管理个别容器或简单的组合式应用,还要进一步管理使用微服务的较大型企业应用程序,则必须转向业务流程和群集平台。

从体系结构和开发的角度来看,如果要生成由基于微服务的应用程序组成的大型企业应用程序,则务必了解清楚下面列出的支持高级方案的平台和产品:

群集和业务流程协调程序。 如果需要跨多个 Docker 主机扩展应用程序例如生成基于微服务的大型应用程序时,能够通过抽象化基础平台的复杂性来将所有主机作为单个群集管理是至关重要的。 这就是容器群集和业务流程协调程序所提供的功能。 Kubernetes 是业务流程协调程序的一个示例,通过 Azure Kubernetes 服务在 Azure 中提供。

计划程序。计划意味着管理员能够在群集中启动容器,因此这些容器也可提供 UI。 群集计划程序具有多个职责:高效使用群集资源、设置用户提供的约束、有效负载均衡节点或主机间的容器,以及在提供高可用性的同时强力解决错误。

群集和计划程序的概念密切相关,因此不同供应商提供的产品通常具有这两套功能。 下表显示了适用于群集和计划程序的最重要的平台和软件选项。 通常在公有云(如 Azure)中提供这些业务流程协调程序。

适用于容器群集、业务流程和计划的软件平台

平台 说明
Kubernetes
An image of the Kubernetes logo.
Kubernetes 是一款开源产品,提供各种功能,从群集基础结构和容器计划到安排功能均涵盖在内。 它能实现跨主机群集自动部署、缩放以及执行各种应用程序容器操作。

Kubernetes 提供以容器为中心的基础结构,将应用程序容器分组为逻辑单元,以便管理和发现。

Kubernetes 在 Linux 中的运用已发展成熟,但在 Windows 中相对较弱。
Azure Kubernetes 服务 (AKS)
An image of the Azure Kubernetes Service logo.
AKS 是 Azure 中的托管 Kubernetes 容器业务流程服务,简化了 Kubernetes 群集的管理、部署和操作。
Azure Container Apps
An image of the Azure Container Apps Service logo.
Azure 容器应用是一种托管的无服务器容器服务,用于大规模构建和部署新式应用。

在 Microsoft Azure 中使用基于容器的业务流程协调程序

多家云供应商提供 Docker 容器支持以及 Docker 群集和业务流程支持,包括 Microsoft Azure、Amazon EC2 容器服务和 Google 容器引擎。 Microsoft Azure 通过 Azure Kubernetes 服务 (AKS) 提供 Docker 群集和业务流程协调程序支持。

使用 Azure Kubernetes 服务

Kubernetes 群集汇集多个 Docker 主机,并将它们作为单个虚拟 Docker 主机公开,因此可以将多个容器部署到群集中并使用任何数量的容器实例横向扩展。 该群集将处理可伸缩性、运行状况等所有复杂的管理任务。

AKS 提供了一种方法,可在 Azure 中简化虚拟机(预配置为运行容器化应用程序)群集的创建、配置和管理。 通过使用常用开源计划和业务流程工具的优化配置,AKS 能够利用现有技能或大量不断增长的社区专业知识,在 Microsoft Azure 上部署和管理基于容器的应用程序。

Azure Kubernetes 服务优化了专门针对 Azure 的常用 Docker 群集开源和技术的配置。 可以获得一个开放的解决方案,该解决方案为容器和应用程序配置提供可移植性。 用户选择主机的大小和数量以及业务流程协调程序工具,然后 AKS 可处理其他操作。

Diagram showing a Kubernetes cluster structure.

图 4-24 。 Kubernetes 群集的简化结构和拓扑

在图 4-24 中可以看到 Kubernetes 群集的结构,其中主节点 (VM) 控制群集的大部分协调,你可以将容器部署到其余节点,从应用程序角度来看这些节点是作为单个池进行管理的,使你可以扩展到数千甚至是数万个容器。

Kubernetes 的开发环境

在开发环境中,Docker 于 2018 年 7 月宣布通过安装 Docker Desktop,Kubernetes 也可以在单个开发计算机(Windows 10 或 macOS)中运行。 可以在以后部署到云 (AKS) 进行进一步集成测试,如图 4-25 所示。

Diagram showing Kubernetes on a dev machine then deployed to AKS

图 4-25 。 在开发计算机和云中运行 Kubernetes

Azure Kubernetes 服务 (AKS) 入门

若要开始使用 AKS,需从 Azure 门户或使用 CLI 部署 AKS 群集。 有关在 Azure 中部署 Kubernetes 群集的详细信息,请参阅部署 Azure Kubernetes 服务 (AKS) 群集

作为 AKS 的一部分,默认安装的任何软件都不收费。 所有默认选项都通过开源软件实现。 AKS 可用于 Azure 中的多个虚拟机。 仅针对所选的计算实例以及使用的其他基础结构资源(如存储和网络)收取费用。 AKS 本身不会以增量方式收费。

Kubernetes 的默认生产部署选项是使用 Helm 图表,这将在下一部分中进行介绍。

使用 Helm chart 部署到 Kubernetes 群集

将应用程序部署到 Kubernetes 群集时,可以如上一节中已经提到的那样,通过基于本机格式(.yaml 文件)的部署文件来使用原始 kubectl.exe CLI 工具。 但是,对于更复杂的 Kubernetes 应用程序(如部署基于微服务的复杂应用程序时),建议使用 Helm

Helm 图表有助于对即使最复杂的 Kubernetes 应用程序进行定义、版本控制、安装、共享、升级或回滚。

更进一步,也建议使用 Helm 用法,因为 Azure 中的其他 Kubernetes 环境(如 Azure Dev Spaces)也基于 Helm 图表。

Helm 由 Cloud Native Computing Foundation (CNCF) 与 Microsoft、Google、Bitnami 和 Helm 参与者社区协作维护。

有关 Helm 图表和 Kubernetes 的详细实现信息,请参阅使用 Helm 图表将 eShopOnContainers 部署到 AKS 的帖子。

其他资源