0%

Envoy 限流系列(一)概览

限流是网关代理的核心能力之一,Nginx 和 Envoy 都有多种限流机制,来应对不同场景的限流需求

准备挖一个新坑,系列性的介绍 Envoy 的各种限流策略,大致按照这个思路:

  1. 功能介绍
  2. 核心代码实现
  3. 与 Nginx 对比

本文作为开头,先水一篇,来点概览性的介绍 ^_^

限制对象

从限制的对象来说,限流分为三种:

  1. 连接,包括:

    1. 新建连接频率

    2. TLS 握手频率

    3. 并发连接数量

  2. 请求

    一般是请求速率

  3. 带宽

    包括单连接级,和某个范围聚合的

限流生效范围

从限流策略的生效范围来说,又分为两种

  1. 本地限流

    也就是网关代理的单机级别,因为不需要远程通讯,执行效率最高,是很常见的一种方式,不过依赖流量在各个网关实例上相对平均

  2. 全局限流

    跨越网关单机,全局级的限流,因为依赖远程通讯,执行效率会低一些,但是限流更准确

限流用途

限流有两类用途:

  1. 保护上游后端

    因为上游后端的服务能力是有上限的,保证转发给后端的请求量,在后端的服务能力之内,从而保证服务的稳定,不至于产生过载/雪崩,导致服务不可用

  2. 防 CC 攻击

    在对公网服务的网关中,很常规的保护机制,因为公网的流量可以认为是不授信的,而且恶意请求也是经常会发生的事情

Envoy vs Nginx

Nginx 开源已经 20 年了,Envoy 也开源 8 年了,年头都不算小了

我的个人观点,各有优劣势,也都有不够完善的地方,具体的细节,后面我们慢慢分析

在我看来,很大的一个区别是:

Nginx 作为成熟的南北向网关,在防 CC 攻击这块是更成熟的,Envoy 虽然也有用于南北向网关,不过,更多是在东西向网关,在防 CC 攻击这块,是明显更弱的

比如,防 CC 攻击,最常见的的策略是,针对每个 IP 限流,Envoy 还是不支持的(严谨的说,是官方还没有,第三方插件还是可以搞的)。因为在内网调用中,异常的调用来源,都是内部服务,可以追溯到应用 owner 来背锅的

如果是来自公网的异常调用,是很难找到攻击者来背锅的,这就必须依赖网关来做好基础防护了