作者:涂鸦
微服务的稳定性一直是开发者非常重视的论题。随着业务从单体架构向分布式架构演进以及布置方式的变化,服务之间的依靠联系变得越来越复杂,业务系统也面临着巨大的高可用挑战。运用高可用服务 AHAS (Application High Availability Service) 是经阿里巴巴内部多年高可用系统沉淀下来的云产品,以流量与容错为切入点,从流量操控、不稳定调用阻隔、熔断降级、热点流量防护、系统自适应维护、集群流控等多个维度来协助确保服务和网关的稳定性,同时供给秒级的流量监控分析功能。AHAS 不仅在阿里内部淘宝、天猫等电商领域有着广泛的运用,在互联网金融、在线教育、游戏、直播职业和其他大型政央企职业也有着很多的实践。
流量漏斗防护原
在分布式系统架构中,每个恳求都会经过很多层处理,比如从进口网关再到 Web Server 再到服务之间的调用,再到服务拜访缓存或 DB 等存储。在高可用流量防护系统中,咱们通常遵循流量漏斗准则进行高可用流量防护。在流量链路的每一层,咱们都需求进行针对性的流量防护与容错手法,来确保服务的稳定性;同时,咱们要尽可能地将流量防护进行前置,比如将一部分 HTTP 恳求的流量操控前置到网关层,提前将一部分流量进行操控,这样能够防止剩余的流量打到后端,对后端造成压力同时也造成资源的浪费。
Ingress/Nginx 网关流量操控
Nginx 为目前比较流行的高功能开源服务器,Ingress 则为实际的 Kubernetes 集群流量进口。AHAS Sentinel 为 Ingress/Nginx 网关供给原生的进口流量操控才能,将流量防护进行前置,提前对剩余的流量进行拦截,确保后端服务的稳定性。近期发布的新版 AHAS Nginx 流量防护插件基于 Sentinel C++ 原生版本实现,与旧版本 sidecar 版本比较进行了很多的功能优化,在上万 QPS 的场景也能够确保准确流量操控,同时不会对网关自身的功能带来很大影响。
AHAS Nginx/Ingress 防护具有以下中心才能及优势:
-
低运用成本:仅需简略装备即可快速将 Nginx/Ingress 网关接入 AHAS 流量防护,并在操控台进行可视化的监控、规矩与回来行为装备
-
操控台动态装备流控规矩,实时收效,无需 reload Nginx
-
精准的进口总流量操控:AHAS Nginx/Ingress 防护支撑上万 QPS 量级精准的进口总流量操控,支撑自界说流控粒度(如某一组 Host, URL 维度,甚至能够细化到参数、IP 维度)
-
配套的可观测才能,实时了解网关流量与防护规矩收效情况
下面咱们就来用一个示例来介绍一下,如何快速将 Kubernetes 集群中的 Ingress 网关接入 AHAS 来玩转流控才能,确保服务稳定性。
快速玩转 AHAS Ingress 流量防护
首要,咱们假定咱们已有一个创建好的阿里云容器服务的 ACK 集群(如果集群中没有 Ingress,能够在 ACK 组件办理中手动装置),咱们只需求在 kube-system 命名空间的 nginx-configuration 装备项 (ConfigMap) 中增加以下两个字段:
use-sentinel: true
sentinel-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 的恳求分组进行流量操控,咱们既能够在接口概况的 Tab 页,也能够在规矩办理的 Tab 页中新增一条流控规矩:
即完成了对 test1 恳求分组的流控装备。这条流控规矩的意思是,在一秒以内,该分组内恳求次数超越 10 的恳求将会被拦截,阈值收效维度为单机维度。默认情况下,恳求被拦截后会回来 429 Too Many Requests 状态码,咱们也能够经过 ConfigMap 或直接在操控台装备流控触发后的回来逻辑。
如果此刻咱们运用压测东西发起 QPS 大于 10 的流量,详细的效果会如下图所示(接口概况监控):
若咱们期望针对某个恳求分组的集群拜访总量进行准确操控,能够装备集群流控规矩,装备总阈值即可,而无需关心网关实例数与负载均衡情况。
综上,咱们对 Ingress/Nginx 网关进行流控操控,需求先要界说好一个的恳求分组,然后再针对这个分组装备相应的流控规矩即可,完好的流程能够参阅以下流程图:
以上就是在阿里云容器服务 ACK 集群上的 Ingress 流控实践的一个比如,如果是自建的 Ingress 或者 Nginx,也能够参阅以下两篇文章快速接入:
-
https://help.aliyun.com/document_detail/178827.html
-
https://help.aliyun.com/document_detail/209640.html
点击此处,前往 AHAS 官网检查更多!