Skip to content

微服务治理

微服务架构将单体应用拆分为多个小型服务,每个服务独立开发、部署、扩展。微服务治理是确保微服务架构可运行、可维护、可扩展的一套技术和实践。

微服务架构引入的核心理由是单数据库的 IO 瓶颈和压力,此外,引入微服务还有其他理由,单体应用的问题:代码库庞大、部署困难、技术栈固定、扩展受限、单点故障。

微服务的代价:分布式复杂性(服务间通信、数据一致性)、运维复杂度(大量服务需要管理)、调试困难(调用链路长)。

微服务治理的目标:管理服务数量庞大的系统,保证服务的可用性、性能、一致性。

微服务治理的核心组件

服务注册与发现:服务如何注册自己的地址,客户端如何发现服务地址。

配置中心:如何动态管理配置,所有实例能够及时获取最新配置。

API 网关:统一入口,处理认证、限流、路由、聚合。

负载均衡:如何将请求分发到多个服务实例。

缓存架构:提升系统性能、降低数据库负载。

微服务的健壮性

微服务架构下,服务间的依赖关系复杂,单个服务的故障可能级联扩散,导致整个系统雪崩。健壮性是服务在异常情况下维持核心功能的能力。

熔断降级:服务故障时快速失败,返回默认值,避免雪崩。

限流保护:保护服务不被过载请求打垮,确保服务在容量范围内稳定运行。

舱壁隔离:将资源隔离,避免单个服务的问题影响整个系统。

微服务的可观测性

微服务架构下,服务数量众多、调用链路复杂,问题定位和性能分析变得困难。可观测性是通过系统的外部输出(日志、指标、链路)来理解系统内部状态的能力。

监控告警:收集和展示系统的运行指标,及时发现和处理异常。

链路追踪:记录一个请求经过的所有服务,快速定位故障和性能瓶颈。

微服务拆分原则

按业务能力拆分:订单服务、库存服务、用户服务。每个服务负责一个完整的业务能力。

按数据子域拆分:参考领域驱动设计(DDD),每个服务对应一个限界上下文。

单一职责:每个服务只做一件事,做好一件事。

独立数据存储:每个服务有自己的数据库,避免共享数据库。

无状态服务:服务不保存状态,状态存储在外部(Redis、数据库),便于扩展。

微服务的数据一致性

分布式事务:跨服务的数据一致性难以保证,强一致性方案性能差。

最终一致性:接受短暂不一致,通过补偿机制保证最终一致。

幂等性:同一操作执行多次,结果与执行一次相同。

事件驱动:通过事件总线异步通信,降低服务耦合。

Saga 模式:长事务拆分为多个本地事务,每个事务有补偿。

TCC 模式:Try-Confirm-Cancel 三阶段提交。

微服务的测试与部署

单元测试:测试单个服务的逻辑。

集成测试:测试服务间的交互。

契约测试:测试服务接口的兼容性。

金丝雀发布:先发布到少量实例,验证后全量发布。

蓝绿部署:维护两套环境,切换流量实现零停机部署。

滚动发布:逐个替换实例,保证持续可用。

微服务治理是微服务架构的基石,理解服务治理的组件和模式,有助于设计可维护的微服务系统。

三高指标

在分布式架构(如你正在搭建的 K8s + AI 推理集群)中,“三高”是评价一个系统是否达到“工业级”水准的核心指标。

简单来说,三高指的是:高可用 (High Availability)高性能 (High Performance)高并发 (High Concurrency)


1. 高可用 (High Availability, HA)

探讨核心:系统能不能“不宕机”?

高可用衡量的是系统面对故障时的生存能力。通常用“几个 9”来表示(如 99.99% 意味着一年停机时间不超过 52 分钟)。

  • 底层手段
    • 冗余 (Redundancy):不要单点。MySQL 必须有主从,Operator 必须能自动拉起挂掉的 Pod。
    • 故障转移 (Failover):主节点挂了,从节点秒级接管。
    • 数据备份:利用 OSS/S3 定期存快照。
  • 你的 AI 场景:如果一个 vLLM 节点显卡掉线了,流量能不能自动切到另一个备用显卡节点?

2. 高性能 (High Performance)

探讨核心:系统跑得能不能“足够快”?

高性能关注的是响应时间 (Latency)吞吐量 (Throughput)

  • 底层手段
    • 缓存:用 Redis 减少数据库 IO。
    • 异步:用 RocketMQ 把耗时任务从主流程剥离。
    • 硬件加速:对于 C 开发者,你会关注利用 GPUDirect StorageRDMA 网络减少数据拷贝。
    • 索引优化:在 ElasticSearchMilvus 中通过精密的索引算法加速搜索。
  • 你的 AI 场景:生成一个 Token 需要多少毫秒(TPOT)?首字返回需要多久(TTFT)?

3. 高并发 (High Concurrency)

探讨核心:系统能不能“扛得住多人同时用”?

高并发衡量的是系统在单位时间内处理请求的能力(QPS/TPS)。

  • 底层手段
    • 水平扩展 (Scaling):一台服务器扛不住 1000 人,那就通过 K8s HPA 自动扩容到 10 台。
    • 池化技术:连接池(MySQL)、线程池、甚至 GPU 算力池。
    • 分库分表:当 MySQL 单表数据过亿影响并发时,进行拆分。
  • 你的 AI 场景:当 1000 个用户同时在网页上找你的 Agent 聊天时,系统是依然顺滑,还是直接 OOM 崩溃?

三者的关系:互相牵制,动态平衡

作为架构师,你需要理解这三者往往是冲突的:

  • 为了高可用,你需要多副本数据同步,这会增加延迟,降低高性能
  • 为了高并发,你可能需要引入复杂的缓存逻辑,这增加了系统的复杂性,反而可能降低高可用
指标解决的问题核心工具
高可用别挂了。Operator, Keepalived, K8s
高性能别慢了。Redis, C/C++ 优化, SSD
高并发别挤爆了。Nginx, RocketMQ, K8s HPA

总结建议(结合你的背景)

在你的 Agent 项目 中,目前最难调优的其实是 “高性能”

  1. C/Python 混合优化:利用 Python 处理业务逻辑,底层推理交给 C++ 优化的 vLLM。
  2. 流量调度:使用我们刚才聊过的限流降级,当并发超过“高并发”阈值时,牺牲一部分用户的体验来换取整体的“高可用”。

既然了解了三高的定义,你想看看在 K8s 环境下,如何利用 Prometheus 监控指标来实时定义你系统的“三高”基准线吗?