简介:微服务的稳定性一直是开发者非常关心的话题。随着业务从单体架构向分布式架构演进和部署方式的改变,服务之间的依赖关系越来越复杂,业务系统也面临着巨大的高可用挑战。作者:涂鸦微服务的稳定性一直是开发者非常关心的话题。随着业务从单体架构向分布式架构演进和部署方式的改变,服务之间的依赖关系越来越复杂,业务系统也面临着巨大的高可用挑战。应用高可用服务AHAS(ApplicationHighAvailabilityService)是阿里巴巴内部高可用系统多年积累的云产品。它以流量和容错为出发点,从流量控制、不稳定调用隔离、断路器降级、热点流量防护、系统自适应保护、集群流控等多个维度保障服务和网关的稳定性,同时提供二级流量监控分析功能。AHAS不仅在阿里巴巴内部淘宝、天猫等电商领域有着广泛的应用,在互联网金融、在线教育、游戏、直播行业等大型政府和央企行业也有大量实践.流量漏斗保护原则在分布式系统架构中,每个请求都会经过很多层处理,比如从入口网关到WebServer再到服务之间的调用,再到服务访问缓存或者DB等存储。在高可用流量防护系统中,我们通常遵循流量漏斗的原则进行高可用流量防护。在流量链路的每一层,我们都需要进行有针对性的流量保护和容错措施,以保证服务的稳定性;同时我们需要尽可能的前置流量保护,比如一些HTTP请求流量控制转发到网关层,提前控制一部分流量,避免不必要的流量冲击后端,造成后端压力,造成资源浪费。Ingress/Nginx网关流量控制Nginx是目前流行的高性能开源服务器,Ingress是实际的Kubernetes集群流量入口。AHASSentinel为Ingress/Nginx网关提供原生入口流量控制能力,前置流量防护,提前拦截冗余流量,保证后端服务的稳定性。最近发布的新版AHASNginx流量保护插件是基于原生版本的SentinelC++实现的。与旧的sidecar版本相比,进行了大量的性能优化。也可以保证在几万QPS的场景下进行精准的流量控制,并且不会对网关本身造成影响。性能有很大的影响。AHASNginx/Ingress防护具有以下核心能力和优势:使用成本低:通过简单配置即可快速将Nginx/Ingress网关接入AHAS流量防护,并在控制台进行可视化监控、规则、返回行为配置动态配置流量控制规则,实时生效,无需重新加载Nginx某组Host,URL维度,甚至可以细化为参数和IP维度)支持可观察能力,实时了解网关流量和防护规则的有效性下面通过一个例子来介绍如何快速连接Ingress网关利用Kubernetes集群AHAS发挥流控能力,保证服务稳定性。快玩AHASIngress流量保护首先,我们假设我们已经创建了一个阿里云容器服务的ACK集群(如果集群中没有Ingress,可以在ACK组件管理中手动安装),我们只需要在kube-system命名空间的nginx-configuration配置项(ConfigMap)中添加如下两个字段:use-sentinel:truesentinel-params:--app=ahas-ingress-demo,完成Nginx/Ingress的访问交通保护。此时,我们打开AHAS控制台,可以看到名为ahas-ingress-demo的Ingress网关。成功接入AHAS流量保护后,我们要做的就是先定义一个请求组。点击请求组管理Tab页,我们新建一个请求组,名称为test1。我们将Host配置为精确匹配类型,值为127.0.0.1;将Path配置为前缀匹配类型,值为/test/。具体配置如下图所示:此时我们可以预见,所有host为127.0.0.1,请求路径以/test/开头的请求都会被归到名为test1的组中。此时,我们访问一个符合请求组的URL,比如http://127.0.0.1/test/demo。在AHAS控制台-界面详情监控页面,我们可以看到test1组的流量监控。接下来,我们需要对名为test1的请求组进行流量控制。我们既可以在接口详情页签也可以在规则管理页签添加流量控制规则:即完成test1的请求分组。流量控制配置。这个流控规则是指在一秒内,本组请求数超过10个的请求将被阻塞,阈值的有效维度为单机维度。默认情况下,请求被拦截后会返回429TooManyRequests状态码。我们也可以通过ConfigMap或者直接在控制台配置流控触发后的返回逻辑。如果此时我们使用压测工具发起QPS大于10的流量,具体效果如下图所示(接口详情监控):某些请求组,我们可以配置集群流控规则,只配置总阈值即可,不需要关心网关实例数和负载均衡。综上所述,我们需要定义一个请求组来控制Ingress/Nginx网关的流控,然后为这个组配置相应的流控规则。完整的流程可以参考下面的流程图:以上是在阿里云容器服务ACK集群上Ingress流控实践的一个例子。如果是自建Ingress或者Nginx,也可以参考以下两篇文章快速入门:https://help.aliyun.com/docum...https://help.aliyun.com/docum...原文链接本文为阿里云原创内容,未经许可不得转载。
