云原生服务网格流量控制思考

971 阅读2分钟

随着云原生技术的不断发展及应用,很多服务都已部署上云。

保障云上环境的稳定是重要的一环。

一个重要的影响稳定的场景就是突发大流量冲击。

面对该场景,较好的应对措施就是进行流量控制。

本文就流量控制进行简单分析。

我之前写过有关服务网格间的流量流转机制,juejin.cn/post/719872…

流量控制实际就是在上述中的某一路径进行拦截处理。

整体的流量路径如下图所示:

流量控制.jpg

简单分类,存在三种场景:

1)从公网中访问。例如:某用户访问公司官网时,会先后经过DNS解析域名,选择APIG,ELB,访问某一服务网格的入口网关,最终抵达某个POD中。

2)不同服务网格间的访问。例如:存在服务A和服务B,分别位于不同服务网格中,服务A需要访问服务B,获取一些信息。此时,需要通过VPCEP,到达对方的入口网关,最终抵达某一POD中。

3)同一服务网格中的访问。例如:存在存在服务A和服务B,同属于一个服务网格中,当服务A访问服务B时,会先被si cecar流量劫持,最终抵挡业务容器中。

针对场景1,我们可以在APIG中配置重要API的访问次数限制。在官网中也针对该功能进行了简单介绍。

APIG.png

针对场景2,我们通过EnvoyFilter机制流量拦截。

Envoy下的RateLimit提供了流控服务,支持Envoy APIs,项目地址:github.com/envoyproxy/…

apis.png

services.png

在v3 rls.proto文件中,定义了一个服务RateLimitService,我们可以在自己实现的流控服务中增加该grpc接口的具体实现,当流量被EnvoyFilter拦截时,就会转发到该服务中,进行流控判断,是否通过。

针对场景3,我们可以在sidecar中补充流控规则。