服务治理定义
服务治理通常是指通过限流、熔断等手段,保障微服务的可靠运行,即运行时治理。更加宽泛的服务治理还包括微服务持续集成(开源软件管理、自动化测试等),微服务部署最佳实践(滚动升级、灰度发布等),微服务可观测性能力(日志、监控、告警等)构建等。
华为云微服务治理专题主要探讨运行时治理。我们首先从常见的故障模式开始。
扩容缩容
在扩容场景下,新启动的微服务实例需要初始化数据库连接、初始化缓存等,处理能力一定时间才能够达到峰值。消费者调用新启动的微服务实例,也需要新建立网络连接,这个过程通常是非常消耗CPU并且耗时的操作。在高并发或者高TPS场景下,新启动的实例处理缓慢,很容易导致调用链路雪崩,引起故障。
在缩容场景下,一般会采用优雅停机等策略,将下线的实例先从注册中心摘除,然后再停止进程,防止正在处理的请求失败或者消费者将新请求转发到下线实例。但是现实环境中,优雅停机没有正确实现的情况非常普遍,下线实例被异常终止没有执行优雅停机逻辑的情况也非常普遍。
实例不对等
实例不对等通常有很多原因。在资源受限的场景,可能部分实例使用处理能力相对比较弱的资源。在高可用场景,不同的AZ的时延也存在差异。资源不对等场景触发故障的主要原因是处理能力比较弱的实例会拖慢系统总体的处理能力,需要有合理的机制在实例之间调度请求的执行。
业务逻辑差异
提供者通常存在非常多的业务接口,每个业务接口处理的逻辑不同,这些接口的处理时延也是不一样的。部分访问频率很低的接口,可能非常耗时,甚至触发故障、内存泄漏等问题。当这些耗时接口被频繁访问的时候,会抢占其他接口的处理资源,导致其他接口的处理也变得缓慢。
超出系统处理能力的流量
秒杀、大促和热点事件等场景,会产生超出系统处理能力的流量,这些流量如果没有被快速丢弃,就会占用大量的处理资源,并触发系统处理链路的大量超时甚至系统瘫痪。有机器人参与的情况下,资源容易被机器人全部抢走,正常用户得不到公平合理的处理资源。