作者:涯客

影响服务安稳性的要素有很多,其间比较常见但又往往容易被忽视的就是面向流量的安稳性,流控是保证服务安稳性的重要手段。但是,咱们发现大量客户只是在开发环境和预发环境中测验流控,却在出产环境中鲜有运用。依据深化的沟通,发现问题主要在二方面:

  • 榜首:关于首次发布的服务,由于无法准确猜测实在流量的巨细,往往无法给出合理的限流条件,这给流控的实施带来了很大的应战。
  • 第二:关于现已上线的服务,直接对正在运行的事务进行流控可能会导致事务宕机或恳求过错,然后影响用户体会。部分拥有才干的客户,会在测验环境中模仿出产环境中流量,然后验证流控的正确性,然后在出产环境中实施。这最大的问题是验证本钱较高,验证流程较长,并且测验环境无法彻底复原出产环境中流量状况。

咱们能够概括以上的问题为一点:如安在不影响出产事务的状况下,小本钱验证流控才干,然后在出产环境中实施流控。

在不验证的状况下,直接在出产环境中收效流控规矩,很有可能让解决灾难的办法成为灾难本身,例如流控规矩装备过错、流控没有到达预期、流控无故收效导致事务宕机等等,这些问题在出产环境中是彻底无法承受的。

那么有什么办法能够在出产环境中小本钱、快速地验证流控才干?能够在出产环境中确定装备的流量防护战略是否合理?一个简略的思路就是只对线上一部分的流量进行流控验证,即在可控范围内做流控验证。

根据这一主意,咱们运用微服务引擎(MSE)中热门参数防护的功用,提出了一种合理的解决计划:首要在出产环境中进行可控范围内的流控才干验证、确定流控合理装备,然后在出产环境中启用流控。

流控验证太麻烦?不敢上生产?MSE 有办法!

MSE微服务管理简介:微服务管理中心无侵入增强干流Spring Cloud、Apache Dubbo和Istio等开源微服务框架,提供丰厚的服务管理和流量防护功用,将中间件与事务解耦,拥有如下功用:无损上线、无损下线、全链路灰度、流量操控、离群实例摘除等。

验证思路

咱们将会依照以下顺序验证所提出计划的可行性:

  1. 建立根底场景用于模仿出产环境。
  2. 装备相应的流控规矩,用于才干验证。
  3. 流量测验。

流控验证太麻烦?不敢上生产?MSE 有办法!

根底场景建立

咱们运用MSE服务管理中热门参数防护功用来完成出产环境可控的流控才干验证。

本文以常见的长链路调用场景为例,介绍出产环境下进行可控范围内的流控才干验证的进程,建立的详细流程不再介绍,可详见MSE产品help文档 [ 1]

模仿场景运用如下后端场景,后端共有3个服务:运用A、运用B、运用C。这3个服务之间经过MSE Nacos注册中心完成服务发现。客户能够经过客户端后者HTML来访问后端服务。客户的恳求到达网关后,调用链路为 :用户>MSE云原生网关>A>B>C。

阐明:咱们的要求是关于指定带标签的流量,任何装备相应流控规矩的运用都应起到流控作用。关于从网关到运用A的流量,因带着标签,热门参数防护功用能够收效。但是关于运用A至运用B的流量,会丢失流量中的标签,咱们需求额外标签透传的功用,才干保证运用B得到带着标签的流量,然后使得热门参数防护功用能够收效。

流控验证太麻烦?不敢上生产?MSE 有办法!

名词解释:

  • MSE云原生网关:MSE云原生网关是兼容K8s Ingress规范的下一代网关产品,支持ACK容器和Nacos等多种服务发现方法,支持多种认证登录方法快速构建安全防地。更多信息,请参见云原生网关概述 [ 2]
  • 带标签恳求:恳求中的header带指定kv
  • 标签透传恳求:正常的RPC恳求,即运用A到运用B的恳求是不会带着前置恳求的header信息。假如是标签透传,前置恳求中指定header将会带着后续的恳求中

流控装备

咱们期望只是对线上可控范围内的流量进行流控验证,比方用户等级比较低的恳求流量,或者是内部用户的测验流量,然后在不会对线上的服务形成影响的前提下满足地验证流控才干。

咱们模仿如上场景,标识特定的流量恳求header中参加key为limit,value为true的参数值,特定的流量会被流控规矩所操控最大恳求范围,并且保证正常的恳求流量不会遭到任何影响。

然后咱们对运用A、运用B参加热门参数防护,用于后续计划可行性验证。该操作对header含有limit:true的恳求进行流控,为了作用显着,设定流控收效的qps阈值为20(即qps超越20时,恳求将会被拒绝)。

在MSE服务管理中,为运用装备热门参数防护的详细进程如下。

3.1 运用A流控规矩装备

  1. 咱们只需在mse服务管理页面装备如下热门参数防护才干,就能完成针对特定流量的流控装备。

在运用a中顺次挑选 挑选流量 > 流量防护 > 热门参数防护(HTTP恳求) > 新增热门参数防护。

流控验证太麻烦?不敢上生产?MSE 有办法!

2.为接口/a参加如下装备防护规矩。

流控验证太麻烦?不敢上生产?MSE 有办法!

  1. 针对指定的恳求装备流控规矩,比方下图所示header值为limit且value为true的流量会被当时装备的流控规矩操控最大的QPS阈值20。

流控验证太麻烦?不敢上生产?MSE 有办法!

3.2 运用B流控规矩装备

运用B依照运用A一样装备。

  1. 在运用b中顺次挑选 挑选流量 > 流量防护 > 热门参数防护(HTTP恳求) > 新增热门参数防护。

  2. 为接口/b参加如下装备防护规矩。

流控验证太麻烦?不敢上生产?MSE 有办法!

  1. 针对指定的恳求装备流控规矩,比方下图所示header值为limit且value为true的流量会被当时装备的流控规矩操控最大的QPS阈值20。

流控验证太麻烦?不敢上生产?MSE 有办法!

流量测验

在装备完成后,为了模仿出产环境,咱们将会顺次发送正常恳求、被符号恳求,检验流控对正常恳求和被符号恳求是否收效。

咱们首要依据如下步骤,获取进口地址:

  1. 登录MSE网关管理操控台,并在顶部菜单栏挑选地域。
  2. 在左边导航栏,挑选云原生网关 > 网关列表,单击目标网关名称。
  3. 在左边导航栏,单击基本概览。
  4. 在网关进口页签,检查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透传

流控验证太麻烦?不敢上生产?MSE 有办法!

流控验证太麻烦?不敢上生产?MSE 有办法!

  1. 向/a接口发送含标签恳求(header含有limit:true)。

  2. 当qps超越20时,恳求呈现限流信息,限流信息如下。(报错是因为A没有拿到B的正常信息)。

{"timestamp":"2023-04-24T06:35:46.835+0000","status":500,"error":"Internal Server Error","message":"429 null","path":"/a"}

阐明:在装备标签透传状况下,可满足关于指定带标签的流量,任何装备相应流控规矩的运用都应起到流控作用的作用。

总结

到目前为止,咱们经过MSE的热门参数防护与自定义header透传才干的组合,完成了仅针对有特定标识流量的流控才干。这使得咱们能够在不影响事务的状况下,在出产环境中做可控范围内的流控才干验证。相较于另外建立整套预出产环境来验证流控才干来说,该计划的本钱更低,且更能直接验证到出产环境中流控规矩以及流控后的 Fallback 行为的表现,做到真实的心中有数。

在本文中咱们只是运用了MSE服务管理中的流量操控功用。然而关于微服务架构来说,出产场景中的每一个组件、每一个环节都至关重要。MSE微服务管理提供微服务各个环节的管理解决计划,旨在帮助企业快速落地完整且健壮的微服务体系。MSE服务管理能够在不修改任何代码和装备的状况下,降低微服务管理的本钱,完成以下多种功用:

  1. 低本钱完成微服务敏捷开发:包含服务契约、服务测验、开发环境阻隔等。
  2. 全面消除变更进程中的危险:包含无损下线、无损上线、全链路灰度等。
  3. 全面消除运行进程中的安稳性问题:包含流量操控、离群实例摘除、熔断降级等。

流控验证太麻烦?不敢上生产?MSE 有办法!

欢迎大家运用MSE服务管理并提出宝贵意见。

相关链接:

[1]MSE产品help文档

help.aliyun.com/document_de…

[2]云原生网关概述

help.aliyun.com/document_de…

点击此处进入微服务引擎 MSE 官网检查