微服务建设层次
微服务能力可以建设在应用代码、Distributed Application Runtime、独立进程、容器编排平台和基础设施等不同层次。这里的 Runtime 主要指 Dapr 这类分布式应用运行时;JVM、CLR 等 Language Runtime 是承载应用和 Agent 的另一层概念。
微服务建设层次图
从上向下,业务语义逐渐减少,平台覆盖面逐渐扩大:
- Application 最理解订单、支付、库存等业务语义。
- Dapr Runtime 通过标准 HTTP/gRPC API 提供 Service Invocation、Pub/Sub、State、Workflow 等 Building Blocks。
- Process/Sidecar 可以把分布式能力、流量代理和采集能力从业务语言中解耦。
- Kubernetes 负责 Workload 编排、服务发现、弹性和平台策略。
- VM/Infrastructure 提供计算、网络、存储和故障域。
层次与能力
| 层次 | 适合建设的能力 | 常见实现 | 不能替代的内容 |
|---|---|---|---|
| Application / Framework | 服务边界、API、业务幂等、事务、超时与重试 | Spring Cloud Alibaba、gRPC/HTTP SDK、Outbox | 平台无法推断业务操作能否重放 |
| Distributed Application Runtime | 服务调用、Pub/Sub、State、Workflow、Binding、Secret | Dapr Building Blocks 与可插拔 Component | 业务规则和数据一致性仍由应用设计 |
| Process / Sidecar | 承载 Dapr Runtime、流量代理、通用遥测、日志采集 | daprd、Envoy、Filebeat | 增加进程、资源和网络路径复杂度 |
| Kubernetes | 部署、调度、服务发现、弹性、配置、网络隔离 | Deployment、Service、HPA、Ingress、NetworkPolicy | K8s 不等于完整的微服务治理体系 |
| VM / Infrastructure | 计算、网络、LB、Firewall、Disk 和故障域 | VM、Bare Metal、Cloud LB、LVM | 资源底座不能完成服务拆分和业务治理 |
名词边界
| 名词 | 含义 | 是否属于微服务治理层 |
|---|---|---|
| Dapr | Distributed Application Runtime,通过 Building Block API 提供分布式能力 | 是,本页所说 Runtime 的主体 |
| JVM | Java Virtual Machine,Language Runtime | 是应用运行环境,也可承载观测 Agent,但不等于 Dapr Runtime |
| VM | Virtual Machine,虚拟机 | 是微服务的基础设施部署边界 |
| LVM | Logical Volume Manager,Linux 逻辑卷管理 | 否,只属于底层存储能力 |
| Process | 操作系统进程 | 是,可部署应用、代理或采集器 |
| Pod | Kubernetes 最小调度单元 | 是,可包含一个或多个 Container |
组合示例
这条链路中,任何一层都不能独立代表完整微服务建设。正确做法是把能力放在最了解其语义、又能统一治理的最低成本层次。
学习地图
进一步参见 Dapr。