envoy代理转发与L5 Cluster 负载均衡

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: envoy代理转发与L5 Cluster 负载均衡

一、envoy
envoy是什么。

原文地址点这里

image.png

服务网格(借图)

image.png

Envoy是Istio中的Sidecar官方标配 (边车模式)(借图)


原文点 这里

在传统模式下,如果微服务之间要进行通信,那么程序需要自己处理各种通信的细节,这就包括服务发现、熔断机制、超时重试和 tracing 等功能。这些功能通常实现为与某种编程语言相关的 library,这也导致了这样的 library 无法在不同的编程语言之间共享。如果我们可以将这部分功能抽取出来,形成一个独立的进程,这样的进程称为 Sidecar。通常来说,我们会将应用程序和 Sidecar 部署在一起,那么程序的入口流量和出口流量都会由这个 Sidecar 去代理,这样就可以通过 Sidecar 去实现服务发现、熔断机制、超时重试等功能了。

Envoy Proxy可以用来充当 Sidecar 进程。通常来说,我们会将应用程序和 Envoy 部署在一起,形成一个微服务。另一方面,为了实现高可用,通常一个微服务会部署多份副本,这些副本加在一起,就形成了 Service Cluster。下图显示的就是服务与服务之间的通信:
image.png

除了可以充当 Sidecar 进程之外,Envoy Proxy 还可以充当反向代理,将流量转发给后端的 Service Cluster。充当反向代理的 Envoy,通常也可以称为 Edge Envoy。在微服务中作为反向代理与K8s结合(Envoy反向代理微服务实践,Envoy 作为 Kubernetes 的 API 网关)。
image.png

在查看其配置前,我们不妨先脑补一下网络代理程序的流程,比如作为一个代理,首先要能获取请求流量,通常是采用监听端口的方式实现,其次拿到请求数据后需要对其做些微处理,例如附加Header头或校验某个Header字段内容等,这里针对来源数据的层次不同,就可以分为L3\L4\L7,然后将请求转发出去,转发这里又可以衍生出如果后端是一个集群,需要从中挑选出一台机器,如何挑选又涉及到负载均衡等。脑补下来大致流程应该就是这个样子,接下来我们看看Envoy是如何组织其配置信息的。

Envoy配置的简单配置信息如下:
image.png

关键字段说明:

Listener: 服务(程序)监听者。就是真正干活的。 Envoy 会暴露一个或者多个listener监听downstream的请求。

Filter: 过滤器。在 Envoy 中指的是一些“可插拔”和可组合的逻辑处理层。是 Envoy 核心逻辑处理单元。

Route_config: 路由规则配置,即请求路由到后端那个集群(cluster)。

Cluster: 服务提供方集群。Envoy 通过服务发现定位集群成员并获取服务。具体请求到哪个集群成员是由负载均衡策略决定。通过健康检查服务来对集群成员服务状态进行检查。

根据上面我们脑补的流程,配合上这份配置的话,Envoy大致处理流程如下图:
image.png

Envoy内部对请求的处理流程其实跟我们上面脑补的流程大致相同,即对请求的处理流程基本是不变的,而对于变化的部分,即对请求数据的微处理,全部抽象为Filter,例如对请求的读写是ReadFilter、WriteFilter,对HTTP请求数据的编解码是StreamEncoderFilter、StreamDecoderFilter,对TCP的处理是TcpProxyFilter,其继承自ReadFilter,对HTTP的处理是ConnectionManager,其也是继承自ReadFilter等等,各个Filter最终会组织成一个FilterChain,在收到请求后首先走FilterChain,其次路由到指定集群并做负载均衡获取一个目标地址,然后转发出去。

二、鹅厂的L5系统
原文点这里《腾讯运维10年,我斩获了这5把“杀手锏”》

image.png

世界上管理服务器最多的系统

运营管理系统管理了上亿服务器,脉络非常清晰,根本不会出现混乱。L5 系统(上图)也类似于 DNS 系统,有一排能提供的服务模块,从而解决的单点问题。

L5 如何做容错?
image.png

L5-主机/接口级的容错原理

L5 有由 L5 DNS 和 L5 agent 两部分构成。CGI 通过给模块ID和命令ID,根据模块下设备的成功率和延迟情况,通过 IP+PROT 给 CGI 一个反馈。访问之后,通过成功率和延迟情况,把数据上报给了 L5 agent,然后做统计数据。(小马理解为由L5告诉CGI本次host该具体访问哪台机器IP和端口)(CGI 间的调用,CGI拿着ID先找L5,得到IP后由envoy进行代理转发到具体的CGI接口所在机器)

比如我们在某台机器9.1.1.110上能看到这样的一些CGI信息,这台9.1.1.110机器把L5模块ID信息转为实际的IP和端口然后进行远程转发访问实际的接口所在的机器http://9.2.2.222:80?c=xx&a=xx:
image.png

根据统计数据,当发现失败率特别低的时踢掉。当发现成功率和失败率有一定下降,会把访问权重降低,从而达到容错和负载均衡的作用。

可以注册一个模块,加多台设备,形成容错效果。如发现一台机器失败率很高,就把它踢掉。它成功率恢复过来,还可以再加回来。

新加一台服务器设计它的权重为 1,假如之前的是 100,可以逐渐上线。还可以给它一个得分,得分下降的时候,快速把它踢掉。L5 具有灰度、容错、路由、负载均衡的能力。
image.png

L5 对运维团队有哪些帮助?

减少了 80~90% 的日常故障;

不再需要频繁的变更 ip+port(也是故障源);

同过名字便利的服务上下线;

通过权重灰度上线;

模块访问关系可帮助定位根源故障;

接口的延迟和失败率可用来监控;

集容错、负载均衡、路由、灰度、监控能力于一身。

微服务为什么不用l5作负载均衡而用的是服务发现(点这里)?

实践证明,l5新增机器要自己手动把ip填进去登记一下,刷新一下L5配置,这样新的机器才能通过模块ID和命令ID被找到。不像微服务服务发现一样,新增机器会自动被发现。

三、envoy作为GRPC服务网关
image.png

架构对比


image.png

作为网关


参考文献:

envoy文档

Envoy反向代理微服务实践

《腾讯运维10年,我斩获了这5把“杀手锏”》

Envoy 作为 Kubernetes 的 API 网关

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
负载均衡 安全 应用服务中间件
nginx--代理和负载均衡
nginx--代理和负载均衡
|
1月前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
146 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
6月前
|
负载均衡 算法
Envoy 负载均衡与限流设计
【2月更文挑战第29天】Envoy负载均衡策略包括优先级、恐慌阈值、区域感知和资源限制。它按优先级分配流量,使用恐慌阈值避免健康节点过载,实现区域内的首选服务选择,并通过资源管理限制上游集群的连接和请求数。此外,Envoy提供全局限流功能,在网络和HTTP层面对通信进行控制,确保服务器稳定性。
|
6月前
|
负载均衡 应用服务中间件 Linux
Nginx安装Windows、Linux | 正向代理、反向代理、负载均衡
Nginx安装Windows、Linux | 正向代理、反向代理、负载均衡
180 0
|
负载均衡 网络协议 前端开发
【Nginx一】——Nginx介绍(正向代理 反向代理 负载均衡 动静分离)
【Nginx一】——Nginx介绍(正向代理 反向代理 负载均衡 动静分离)
138 0
|
负载均衡 应用服务中间件 nginx
10分钟学会windows中iis搭建服务器集群实现负载均衡和nginx代理转发
10分钟学会windows中iis搭建服务器集群实现负载均衡和nginx代理转发
|
负载均衡 算法 关系型数据库
【服务网格架构】Envoy架构概览(5):负载均衡
【服务网格架构】Envoy架构概览(5):负载均衡
|
负载均衡 算法 关系型数据库
Envoy架构概览(5):负载均衡
Envoy架构概览(5):负载均衡
|
负载均衡 算法 中间件
Nginx代理——正向、反向代理,动静分离和负载均衡(下)
Nginx代理——正向、反向代理,动静分离和负载均衡(下)
152 0
Nginx代理——正向、反向代理,动静分离和负载均衡(下)
|
负载均衡 网络协议 应用服务中间件
Nginx代理——正向、反向代理,动静分离和负载均衡(上)
Nginx代理——正向、反向代理,动静分离和负载均衡(上)
286 0
Nginx代理——正向、反向代理,动静分离和负载均衡(上)