Azure Container Apps 与 Dapr 的微服务架构教程

近年来,微服务架构模式在软件行业中越来越受欢迎。Azure 提供了多种服务来打包、部署和管理云原生应用程序,每种服务都有其特定用途和优缺点。本文将比较 Azure 中托管和管理云原生容器化应用程序的不同服务。

根据个人经验,在 Azure Kubernetes Service (AKS) 和 RedHat OpenShift 上构建并部署了云原生应用程序,这需要一定的学习曲线,包括创建和配置集群、配置微服务之间的网络、服务发现、证书配置以及管理应用程序生命周期内的集群。

本详细教程将重点介绍 Microsoft Azure 提供的新容器化服务——Azure Container Apps (ACA)。Microsoft 在 2021 年 11 月宣布了 Azure Container Apps 的公开预览,并在 2022 年 5 月宣布了 Azure Container Apps 的正式发布。简而言之,Azure Container Apps 是一个完全托管的无服务器容器运行时,用于构建和运行云原生应用程序,它专注于应用程序的业务逻辑,而不是云基础设施管理。

本教程的源代码可在 GitHub 上获得,也可以查看演示应用程序。

什么是 Azure Container Apps

Azure Container Apps 提供了一个基于 AKS 的无服务器托管服务,允许开发人员部署多个容器而无需处理底层基础设施。Azure Container Apps 的一些显著特点包括:

与 Dapr 构建微服务应用程序:Azure Container Apps 提供了与 Microsoft 赞助的开源项目 Dapr (Distributed Application Runtime) 的内置兼容性。一旦启用 Dapr,它将允许构建具有弹性和可扩展性的松散耦合应用程序。

Azure Container Apps 中的自动缩放:Azure Container Apps 支持根据需求自动缩放应用程序,从零实例扩展到配置的最大实例数。这意味着在某些服务中,如果没有触发任何事件或接收到任何请求,它可以降至 0 个副本,这意味着不会产生任何成本。

Azure Container Apps 支持不同的缩放触发器,例如:

  • 基于并发 HTTP 请求数量的缩放
  • 基于容器应用的 CPU 和内存使用情况的缩放
  • 支持 KEDA (Kubernetes Event-driven Autoscaling) 的事件驱动缩放

带有 Envoy Proxy 的网络功能:所有进入 Azure Container Apps 的 HTTP 请求都通过 Envoy Proxy 路由,这个高级代理提供了高级功能,例如在容器应用的不同版本之间进行流量分割,以启用 A/B 测试和蓝绿部署等功能。

本教程将涵盖的AzureContainer Apps 使用案例

在本教程中,将构建一个任务管理应用程序,遵循微服务架构模式,该应用程序将由三个微服务组成,每个微服务都有一定的功能,以展示 Azure Container Apps 和 Dapr 如何简化微服务应用程序的构建。以下是即将在本教程中构建的应用程序的架构图:

使用 Dapr 构建微服务的 Azure Container Apps 架构

  • Web 应用程序前端,接受用户管理其任务的请求。
  • 后端 Web API,包含任务管理服务的业务逻辑和数据存储。
  • 基于事件的后端处理器,负责根据来自 Azure Service Bus 主题的消息向任务所有者发送电子邮件。
  • 基于 Cron 定时器配置持续运行的后台处理器,标记过期任务。

使用 Azure Container Registry 构建和托管容器镜像,并将镜像从 ACR 部署到 Azure Container Apps。

本教程中的 Dapr 与 Azure Container Apps 集成

Dapr 提供了一组 API,简化了微服务应用程序的编写。一旦在 Azure Container Apps 中启用 Dapr,它通过 sidecar(与每个 Azure Container App 一起运行的过程)公开其 API。本教程中使用的 Dapr API/构建块包括:

  • 服务到服务调用:前端 Web 应用程序微服务使用 Dapr sidecar 调用后端 Web API 微服务。
  • 状态管理:后端 API 使用 Dapr 状态管理构建块将数据存储在 Azure Cosmos DB 上,并将电子邮件日志存储在 Azure Table Storage 上。
  • 发布/订阅:后端 API 在保存任务时将消息发布到 Azure Service Bus,后端处理器微服务消费这些消息并使用 SendGrid 发送电子邮件。
  • 绑定:后台处理器基于传入事件(如 Cron 作业)触发。

Azure Container Apps 的主要组件包括:

  • Azure Container Apps 中的环境:环境是围绕多个“容器应用”的安全边界,它包含至少一个容器应用或许多容器应用,所有容器应用都部署到专用的 Azure 虚拟网络中,这使得这些不同的容器应用可以安全地通信。此外,环境中所有容器应用产生的日志都发送到专用的 Log Analytics 工作区。
  • AzureContainer Apps 中的 Log Analytics 工作区:用于提供监控和可观察性功能,每个环境都将拥有自己的 Log Analytics 工作区,并在环境中的所有容器应用之间共享。
  • Azure Container Apps 中的容器应用:每个容器应用代表一个可部署的单元,可以包含一个或多个相关容器。(多个容器是一个高级用例,对于本教程,将在每个容器应用中部署单个容器,有关在同一个 Azure Container App 中部署多个容器的更多信息可以在此处找到。)
  • Azure Container Apps 中的修订版:对于每个容器应用,可以创建多达 100 个“修订版”。修订版是一种部署应用程序多个版本的方式,可以选择将流量发送到特定修订版。可以选择修订模式是否支持 1 个活动修订版或同时支持多个活动修订版,以支持 A/B 测试场景或金丝雀部署。
  • Azure Container Apps 中的容器:Azure Container Apps 中的容器在修订版快照中的 pod 中分组,容器可以从任何公共或私有容器注册表部署,它们支持任何基于 Linux 的 x86-64 (linux/amd64) 容器镜像(不支持 Windows 容器)。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485