2. Azure微服务基础设施选型

在 Azure 上落地微服务,第一步往往不是写业务代码,而是决定“服务跑在哪里”。这个决定会直接影响服务之间怎么发现彼此、怎么调用、怎么限流、怎么加密、怎么观测。AKS、Container Apps、Service Fabric 和 App Service 都能承载微服务,但它们的通信模型差异很大:有的把网络控制权完全交给你,有的把服务发现和流量治理做成平台能力,有的则更偏向传统 Web 应用的通信方式。理解这些差异,才能避免“选错宿主,后期靠补丁硬撑”。

四种宿主的通信能力定位

AKS(Azure Kubernetes Service)提供的是最完整的 Kubernetes 原生通信能力。Pod 之间通过 Service 做稳定访问,ClusterIP 用于集群内东西向流量,Ingress 或 Gateway API 负责南北向入口。服务发现依赖 CoreDNS,配置通过 ConfigMap 和 Secret 注入。更重要的是,AKS 可以接入服务网格(如 Istio、Linkerd)或 Dapr,实现 mTLS、重试、熔断、流量切分和分布式追踪。代价是这些能力需要你自己安装、配置和运维,网络策略、DNS、证书轮换都要纳入日常管理。

Container Apps是托管型容器平台,通信能力“开箱即用”。它内置服务发现:同一环境内的应用可以用应用名直接互访,平台自动注入 DNS 和环境变量。入口分两类:外部入口暴露给公网,内部入口只在环境内可达。Container Apps 原生集成 Dapr,服务调用、发布订阅、状态管理可以通过 sidecar 完成,不需要自己搭消息中间件。它还支持基于 KEDA 的伸缩和基于流量的修订版本切分。适合希望少运维、但仍需要微服务间可靠调用的团队。

Service Fabric是微软早期的微服务运行时,通信模型围绕 Reliable Services 和 Reliable Actors 构建。它提供命名服务(Naming Service)做服务发现,支持有状态服务,通信方式可以是远程过程调用(Remoting)、HTTP、WCF 或自定义协议。Service Fabric 的强项是有状态、低延迟、高吞吐的场景,但它的通信栈和编程模型绑定较深,容器化支持相对有限,新项目选型时通常不是首选。

App Service本质是 Web 应用托管平台,通信以 HTTP/HTTPS 为主。它支持 VNet 集成、私有终结点、混合连接,也能通过 API Management 或 Front Door 做统一入口。但 App Service 没有内置的服务发现和东西向服务网格,服务间调用通常要依赖外部 DNS、API Management 或 Service Bus。它更适合“微服务数量不多、以 HTTP API 为主、团队不想碰 Kubernetes”的场景。

四种 Azure 宿主的微服务通信能力对比 横向看服务发现、东西向调用、入口治理与运维负担 AKS Container Apps Service Fabric App Service 服务发现 东西向调用 南北向入口 流量治理 运维负担 CoreDNS + Service ClusterIP / Headless Service / Pod 直连 可加 Istio / Dapr Ingress / Gateway API App Gateway / Front Door 网格 / Dapr 可选 mTLS、重试、熔断 高:需自管集群 升级、网络、证书 内置应用名 DNS 同环境自动发现 内部入口 + Dapr 服务调用 / 发布订阅 外部 / 内部入口 自动 TLS、域名 修订版本流量切分 KEDA 伸缩 低:平台托管 专注应用配置 Naming Service 有状态服务寻址 Remoting / HTTP / WCF Reliable Services 反向代理 / App Gateway 需自行配置 分区与副本内建 故障转移强 中高:集群运维 编程模型绑定深 无内置服务发现 依赖 DNS / APIM HTTP/HTTPS 调用 VNet 集成 / 私有终结点 App Gateway / Front Door APIM 统一入口 APIM 策略 / 部署槽 限流、缓存、灰度 低:PaaS 托管 但通信能力有限 选型口诀:要控制选 AKS,要省心选 Container Apps,要有状态选 Service Fabric,纯 HTTP 轻量选 App Service

选型决策:从通信需求反推宿主

选型时不要先问“哪个平台更先进”,而要先问“我的服务之间需要什么样的通信”。如果服务数量多、调用关系复杂、需要 mTLS 和细粒度流量切分,AKS 配合服务网格或 Dapr 是最稳妥的。如果团队规模小、希望把服务发现和入口治理交给平台,Container Apps 的性价比最高。如果业务本身有强状态、要求分区和副本内建故障转移,Service Fabric 仍有价值,但要接受它的学习曲线和生态现状。如果只是几个 HTTP API 互相调用,App Service 加 API Management 就足够,不必为了“微服务”三个字引入 Kubernetes。

一个常见的误区是:先用 App Service 快速上线,等调用关系变复杂后再迁移到 AKS。迁移成本往往被低估,因为服务发现、配置注入、健康检查、证书管理都要重做。更务实的做法是在项目初期就明确通信边界:哪些调用是同步 HTTP,哪些是异步消息,哪些需要跨环境隔离。把这些边界画清楚,再对照上表的四列能力,选型就不再是拍脑袋。

如果团队已经熟悉 Kubernetes,AKS 的长期可控性最好;如果团队没有专职平台运维,Container Apps 能显著降低通信治理的落地成本。Service Fabric 适合已有投资或强有状态场景,App Service 适合轻量 HTTP 微服务。

一个可执行的选型检查清单

下面这份清单可以直接在选型评审会上逐项确认。每一项都对应通信能力,而不是泛泛的平台功能。

检查项 关键问题 倾向 AKS 倾向 Container Apps 倾向 Service Fabric 倾向 App Service
服务发现 是否需要跨命名空间、跨集群发现? 是 同环境内即可 命名服务内建 否,靠外部 DNS
东西向加密 是否要求 mTLS 且自动轮换证书? 网格/Dapr 支持 Dapr mTLS 需自行实现 有限
流量切分 是否需要按百分比灰度? Ingress/网格 修订版本原生 需自建 部署槽交换
异步消息 是否大量使用发布订阅? Dapr/自建 Dapr 内建 需自建 Service Bus
运维人力 是否有专职平台团队? 需要 不需要 需要 不需要

把这张表填完,通常会得到两个候选平台。接下来做一次小规模验证:用真实的一个服务调用链,在候选平台上跑通服务发现、一次失败重试和一次版本切分。验证通过再全面迁移,比直接全量切换风险低得多。选型不是一次性的,随着服务数量和治理要求变化,可以保留从 Container Apps 向 AKS 演进的路径,但前提是通信契约和可观测性从一开始就设计清楚。