envoy 学习笔记(一)之 架构
一、背景
大型系统微服务化后,会被拆解成无数微服务,大量的微服务增加了服务管理的难度,因此出现了服务治理,包括:分布式追踪、服务发现与负载均衡、运行时指标监控等等。为了达成这个目标,微服务的职责分为两部分:
- 完成自身业务做事情
- 配合服务治理做事情
根据架构的演进,可以看到服务治理方便演进如下:
可以看到以上演化过程,到了第三代,微服务专注于业务,不需要关心服务治理的相关事情,服务治理完全交由sidecar 来完成,当让这种模式设计是用于云上的,每个服务旁边都会有一个sidecar。
本章节学习 sidecar 典型产品 envoy,虽然是被设计是在云上使用的,但是还是可以通过虚拟机来进行学习。
二、envoy 架构
具体可参考: https://jimmysong.io/blog/service-mesh-the-microservices-in-post-kubernetes-era/#envoy
其架构图:
从图中可以得到如下信息:
(1) 请求发送会被 envoy 拦截 (实际上不是 envoy拦截,而是有另外程序更改 iptables ,将 host 上的 进入流量转发给了 envoy,交由它处理 );
(2) envoy 中的 listener(监听的端口,(1) 中的进入流量就是被转发到给端口),有多个 filter ,多个 filter 可以处理进入流量,若想自定义增加一种处理流量的方式,可以自定义filter,放到 listene 的 filter chain 中,达到扩展的目的;
(3) envoy 使用了 xDS 协议,xDS 协议指可以有专门的系列 Discovery Service服务(只要符合 xDS API 要求即可),目前有图中的:
- Route Discovery Service :路由发现服务,配置路由信息
- Cluster Discovery Service:集群发现服务,配置集群
- Endpoint Discovery Service:终端发现服务,配置集群中的实例(增删)
- Listener Discovery Service:监听器发现服务,配置 envoy 的监听器 ,envoy 可以有多个 listener;
- Health Discovery Service:健康检查服务
- 。。。。。。。
(4) xDS 的某个服务没有提供的话,也可以直接在 envoy的配置文件中进行配置;