共计 3779 个字符,预计需要花费 10 分钟才能阅读完成。
影响服务稳定性的因素有很多,其中比拟常见但又往往容易被忽视的就是面向流量的稳定性,流控是保障服务稳定性的重要伎俩。然而,咱们发现大量客户仅仅在开发环境和预发环境中测试流控,却在生产环境中鲜有应用。依据深刻的交换,发现问题次要在二方面:
- 第一:对于首次公布的服务,因为无奈准确预测实在流量的大小,往往无奈给出正当的限流条件,这给流控的施行带来了很大的挑战。
- 第二:对于曾经上线的服务,间接对正在运行的业务进行流控可能会导致业务宕机或申请谬误,进而影响用户体验。局部领有能力的客户,会在测试环境中模仿生产环境中流量,从而验证流控的正确性,进而在生产环境中施行。这最大的问题是验证老本较高,验证流程较长,而且测试环境无奈齐全还原生产环境中流量状况。
咱们能够演绎以上的问题为一点:如何在不影响生产业务的状况下,小老本验证流控能力,进而在生产环境中施行流控。
在不验证的状况下,间接在生产环境中失效流控规定,很有可能让解决劫难的方法成为劫难自身,例如流控规定配置谬误、流控没有达到预期、流控无端失效导致业务宕机等等,这些问题在生产环境中是齐全无奈承受的。
那么有什么方法可能在生产环境中小老本、疾速地验证流控能力?可能在生产环境中确定配置的流量防护策略是否正当?一个简略的思路就是只对线上一部分的流量进行流控验证,即在可控范畴内做流控验证。
基于这一想法,咱们应用微服务引擎 (MSE) 中热点参数防护的性能,提出了一种正当的解决方案:首先在生产环境中进行可控范畴内的流控能力验证、确定流控合理配置,进而在生产环境中启用流控。
MSE 微服务治理简介:微服务治理核心无侵入加强支流 Spring Cloud、Apache Dubbo 和 Istio 等开源微服务框架,提供丰盛的服务治理和流量防护性能,将中间件与业务解耦,领有如下性能:无损上线、无损下线、全链路灰度、流量管制、离群实例摘除等。
01 验证思路
咱们将会依照以下程序验证所提出计划的可行性:
- 搭建根底场景用于模仿生产环境。
- 配置相应的流控规定,用于能力验证。
- 流量测试。
02 根底场景搭建
咱们应用 MSE 服务治理中热点参数防护性能来实现生产环境可控的流控能力验证。
本文以常见的长链路调用场景为例,介绍生产环境下进行可控范畴内的流控能力验证的过程,搭建的具体流程不再介绍,可详见 MSE 产品 help 文档[1]。
模仿场景应用如下后端场景,后端共有 3 个服务:利用 A、利用 B、利用 C。这 3 个服务之间通过 MSE Nacos 注册核心实现服务发现。客户能够通过客户端后者 HTML 来拜访后端服务。客户的申请达到网关后,调用链路为:用户 >MSE 云原生网关 >A>B>C。
阐明:咱们的要求是对于指定带标签的流量,任何配置相应流控规定的利用都应起到流控作用。对于从网关到利用 A 的流量,因携带标签,热点参数防护性能能够失效。然而对于利用 A 至利用 B 的流量,会失落流量中的标签,咱们须要额定标签透传的性能,能力保障利用 B 失去携带标签的流量,从而使得热点参数防护性能能够失效。
名词解释:
- MSE 云原生网关:MSE 云原生网关是兼容 K8s Ingress 规范的下一代网关产品,反对 ACK 容器和 Nacos 等多种服务发现形式,反对多种认证登录形式疾速构建平安防线。更多信息,请参见云原生网关概述[2]
- 带标签申请:申请中的 header 带指定 kv
- 标签透传申请:失常的 RPC 申请,即利用 A 到利用 B 的申请是不会携带前置申请的 header 信息。如果是标签透传,前置申请中指定 header 将会携带后续的申请中
03 流控配置
咱们心愿仅仅对线上可控范畴内的流量进行流控验证,比方用户等级比拟低的申请流量,或者是外部用户的测试流量,从而在不会对线上的服务造成影响的前提下足够地验证流控能力。
咱们模仿如上场景,标识特定的流量申请 header 中退出 key 为 limit,value 为 true 的参数值,特定的流量会被流控规定所管制最大申请范畴,并且保障失常的申请流量不会受到任何影响。
而后咱们对利用 A、利用 B 退出热点参数防护,用于后续计划可行性验证。该操作对 header 含有 limit:true 的申请进行流控,为了成果显著,设定流控失效的 qps 阈值为 20(即 qps 超过 20 时,申请将会被回绝)。
在 MSE 服务治理中,为利用配置热点参数防护的具体过程如下。
3.1 利用 A 流控规定配置
1. 咱们只需在 mse 服务治理页面配置如下热点参数防护能力,就能实现针对特定流量的流控配置。
在利用 a 中顺次抉择 抉择流量 > 流量防护 > 热点参数防护(HTTP 申请) > 新增热点参数防护。
2. 为接口 / a 退出如下配置防护规定。
3. 针对指定的申请配置流控规定,比方下图所示 header 值为 limit 且 value 为 true 的流量会被以后配置的流控规定管制最大的 QPS 阈值 20。
3.2 利用 B 流控规定配置
利用 B 依照利用 A 一样配置。
1. 在利用 b 中顺次抉择 抉择流量 > 流量防护 > 热点参数防护(HTTP 申请) > 新增热点参数防护。
2. 为接口 / b 退出如下配置防护规定。
3. 针对指定的申请配置流控规定,比方下图所示 header 值为 limit 且 value 为 true 的流量会被以后配置的流控规定管制最大的 QPS 阈值 20。
04 流量测试
在配置实现后,为了模仿生产环境,咱们将会顺次发送失常申请、被标记申请,测验流控对失常申请和被标记申请是否失效。
咱们首先依据如下步骤,获取入口地址:
- 登录 MSE 网关治理控制台,并在顶部菜单栏抉择地区。
- 在左侧导航栏,抉择云原生网关 > 网关列表,单击指标网关名称。
- 在左侧导航栏,单击根本概览。
- 在网关入口页签,查看 SLB 的入口地址(ip)。
在获取入口地址之后,咱们将会对 / a 接口顺次进行如下流量测试。
4.1 失常申请无流控
1. 向 / a 接口继续发送无标签的申请。
2. 可在输入中发现申请没有任何限度,均是失常返回,返回如下。
A[192.168.0.98] -> B[192.168.0.57] -> C[192.168.0.56]
4.2 被标记申请利用 A 流控失效
1. 向 / a 接口继续发送含标签申请(header 含有 limit:true)。
2. 当 qps 超过 20 时,申请呈现限流信息,限流信息如下。
Blocked by Sentinel (flow limiting)
4.3 被标记申请利用 B 无流控
1. 敞开 A 服务的流控限度。
2. 向 / a 接口继续发送含标签申请(header 含有 limit:true)。
3. 可在输入中发现申请没有任何限度,均是失常返回,返回如下。
A[192.168.0.98] -> B[192.168.0.57] -> C[192.168.0.56]
阐明:如果没有开启标签透传,利用 A 调利用 B 的申请无奈将 header 透传。从而无奈满足对于指定带标签的流量,任何配置相应流控规定的利用都应起到流控作用的成果。
4.4 配置透传,被标记申请利用 B 流控失效
1. 为利用 A 配置 header 透传。在 k8s 集群中寻找到 spring-cloud- a 服务,在环境变量中退出变量名称:alicloud.service.header,变量援用:limit。
阐明:MSE 服务治理应用 agent 技术,能够使得流量中的 header 透传
2. 向 / a 接口发送含标签申请(header 含有 limit:true)。
3. 当 qps 超过 20 时,申请呈现限流信息,限流信息如下。(报错是因为 A 没有拿到 B 的失常信息)。
{"timestamp":"2023-04-24T06:35:46.835+0000","status":500,"error":"Internal Server Error","message":"429 null","path":"/a"}
阐明:在配置标签透传状况下,可满足对于指定带标签的流量,任何配置相应流控规定的利用都应起到流控作用的成果。
05 总结
到目前为止,咱们通过 MSE 的热点参数防护与自定义 header 透传能力的组合,实现了仅针对有特定标识流量的流控能力。这使得咱们能够在不影响业务的状况下,在生产环境中做可控范畴内的流控能力验证。相较于另外搭建整套预生产环境来验证流控能力来说,该计划的老本更低,且更能间接验证到生产环境中流控规定以及流控后的 Fallback 行为的体现,做到真正的成竹在胸。
在本文中咱们仅仅应用了 MSE 服务治理中的流量管制性能。然而对于微服务架构来说,生产场景中的每一个组件、每一个环节都至关重要。MSE 微服务治理提供微服务各个环节的治理解决方案,旨在帮忙企业疾速落地残缺且强壮的微服务体系。MSE 服务治理能够在不批改任何代码和配置的状况下,升高微服务治理的老本,实现以下多种性能:
- 低成本实现微服务麻利开发:包含服务契约、服务测试、开发环境隔离等。
- 全面打消变更过程中的危险:包含无损下线、无损上线、全链路灰度等。
- 全面打消运行过程中的稳定性问题:包含流量管制、离群实例摘除、熔断降级等。
欢送大家应用 MSE 服务治理并提出宝贵意见。
相干链接:
[1] MSE 产品 help 文档
https://help.aliyun.com/document_detail/478140.html?spm=a2c4g…
[2] 云原生网关概述
https://help.aliyun.com/document_detail/270868.htm#concept-20…
作者:涯客
原文链接
本文为阿里云原创内容,未经容许不得转载。