服务治理与生态
一、 限流降级
在复杂的生产环境下可能部署着成千上万的Dubbo服务实例,流量持续不断地进入,服务之间进行相互调用。但是分布式系统中可能会因流量激增、系统负载过高、网络延迟等一系列问题,导致某些服务不可用,如果不进行相应的控制可能导致级联故障,影响服务的可用性,因此如何对流量进行合理的控制,成为保障服务稳定性的关键。
Sentinel是阿里中间件团队开源的,面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。本文将基于Dubbo,看看Sentinel是如何进行流量控制的,并且提供Dubbo整合Sentinel的最佳实践。
1. 快速接入Sentinel
Sentinel意为哨兵,这个命名形象的诠释了Sentinel在分布式系统中的工作角色和重要性。以Sentinel在Dubbo生态系统中的作用为例,Dubbo的核心模块包括注册中心、服务提供方、服务消费方(服务调用方)和监控四个模块。Sentinel通过对服务提供方和服务消费方的限流来进一步提升服务的可用性。接下来我们看看Sentinel对服务提供方和服务消费方限流的技术实现方式。
Sentinel提供了与Dubbo适配的模块–Sentinel Dubbo Adapter,包括针对服务提供方的过滤器和服务消费方的过滤器(Filter)。使用时我们只需引入以下模块(以Maven为例):
引入此依赖后,Dubbo的服务接口和方法(包括调用端和服务端)就会成为Sentinel中的资源,在配置了规则后就可以自动享受到Sentinel的防护能力。同时提供了灵活的配置选项,例如若不希望开启Sentinel Dubbo Adapter中的某个Filter,可以手动关闭对应的Filter。
接入Sentinel Dubbo Adapter后,即使未配置规则,Sentinel也会对相应的Dubbo服务的调用信息进行统计。那么我们怎么知道Sentinel接入成功了呢?这时候就要请出一大利器——Sentinel控制台了。
2. 限流必备—监控管理
流量具有很强的实时性,之所以需要限流,是因为我们无法对流量的到来作出精确的预判,不然的话我们完全可以通过弹性的计算资源来处理,所以这时候为了保证限流的准确性,限流框架的监控功能就非常重要了。
Sentinel的控制台(Dashboard)是流量控制、熔断降级规则统一配置和管理的入口,同时它为用户提供了多个维度的监控功能。在Sentinel控制台上,我们可以配置规则并实时查看流量控制效果。
接入Sentinel控制台的步骤如下(缺一不可):
• 按照Sentinel控制台文档启动控制台。
• 应用引入sentinel-transport-simple-http依赖,以便控制台可以拉取对应应用的相关信息。
• 给应用添加相关的启动参数,启动应用。需要配置的参数有:
。 -Dcsp.sentinel.api.port:客户端的port,用于上报相关信息(默认为8719)
。 -Dcsp.sentinel.dashboard.server:控制台的地址
。 -Dproject.name:应用名称,会在控制台中显示
注意某些环境下本地运行Dubbo服务还需要加上-Djava.net.preferIPv4Stack=true参数。比如中Service Provider的启动参数可以配成:
这样在启动应用后就能在控制台找到对应的应用了。以下是常用功能:
• 单台设备监控:当在机器列表中看到您的机器,就代表着已经成功接入控制台,可以查看单台设备的设备名称、IP地址、端口号、健康状态和心跳时间等信息。
• 链路监控:簇点链路实时的去拉取指定客户端资源的运行情况,它提供了两种展示模式,一种用书状结构展示资源的调用链路;另外一种则不区分调用链路展示资源的运行情况。通过链路监控,可以查看到每个资源的流控和降级的历史状态。
树状链路 |
平铺链路 |
• 聚合监控:同一个服务下的所有机器的簇点信息会被汇总,实现实时监控,精确度达秒级。
• 规则配置:可以查看已有的限流、降级和系统保护规则,并实时地进行配置。
《Apache Dubbo微服务开发从入门到精通》——服务治理与生态—— 一、 限流降级(中):https://developer.aliyun.com/article/1224018