微服务“新秀”之Service Mesh

女主宣言

本文出自于ADDOPS团队,该文章的译者霍明明参与了360 HULK云平台容器化及虚拟化平台相关服务建设,对微服务有着独到的见解。今天的主角Istio是Google/IBM/Lyft联合开发的开源项目,估计很多同学在此之前可能完全没有听过这个名字,请不必介意,因为Istio出世也才五个月而已。让我们跟着作者一起揭开Service Mesh的神秘面纱。

PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!

前言

有人将 Service Mesh 看成是一次 "Network Application Revolution",我还是非常认同的,所以也就有了进一步了解和学习Service Mesh的动力。


在看本文章前,强烈建议先看一下这两篇文章《深度剖析Service Mesh服务网格新生代Istio》,《从分布式到微服务,深挖Service Mesh,了解一下Service Mesh的历史。


1

Envoy 简介

在 Service Mesh 模式中,每个服务都配备了一个代理“sidecar”,用于服务之间的通信。这些代理通常与应用程序代码一起部署,并且它不会被应用程序所感知。Service Mesh 将这些代理组织起来形成了一个轻量级网络代理矩阵,也就是服务网格。这些代理不再是孤立的组件,它们本身是一个有价值的网络。其部署模式如图所示:

  • 绿色部分代表应用程序

  • 蓝色部分则是sidecar


服务网格是用于处理服务到服务通信的“专用基础设施层”。它通过这些代理来管理复杂的服务拓扑,可靠地传递服务之间的请求。 从某种程度上说,这些代理接管了应用程序的网络通信层。

Envoy是 Service Mesh 中一个非常优秀的 sidecar 的开源实现。我们就来看看 Envoy 都是做些什么工作。


2

Envoy 用到的几个术语

  • Host: 通常我们将 Host 看做是一个具备网络通信功能的实体(可以是一台物理机,也可以是一台移动设备等等) 。在 Envoy 中,host 是一个逻辑网络中的应用. 可能运行在由有多个主机组成的底层硬件,只要它们各自独立寻址。

  • Downstream: 请求发起者(服务请求方)。

  • Upstream: 请求接收者(服务提供方)。

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

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

  • Mesh: 在本文中 "Envoy mesh" 指的是由一组 Envoy 代理组成的,为不同服务之间可靠传递请求的服务网格。

  • Runtime configuration: Envoy 配置是热更新的,无需重启。

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


3

Envoy 基础概念


线程模型

Envoy 使用单进程多线程模式。一个主线程,多个工作线程。主线程协调和管理这多个线程来工作。每个线程都独立监听服务,并对请求进行过滤和数据的转发等。


一个连接建立后,这个线程将会管理该连接的整个生命周期。通常 Envoy 是非阻塞的,对于大多数情况建议每个 Envoy 配置的工作线程数等于机器的 CPU 线程数。

Listeners

Envoy 中真正干活的(通常是一个监听服务端口的工作线程)。


Envoy 会启动一个或者多个listener,监听来自 downstream 的请求。当 listener 接收到新的请求时,会根据关联的filters模板初始化配置这些 filters,并根据这些 filters 链对这些请求做出处理(例如:限速、TLS 认证、HTTP 连接管理、MongoDB 嗅探、TCP 代理等等)。


Envoy 是多线程模型,支持单个进程配置任意数量的 listeners。通常建议一个机器上运行一个 Envoy 进程,而不关心配置了多少个listerners(如上:大多数情况listener数量等于机器的CPU线程数)。


目前 Envoy 只支持 TCP 类型的 listeners。每个 listener 都可以独立配置一些L3/L4层的 filters。

Listener 还可以通过 listener 发现服务来动态获取。

Network (L3/L4) filters

network (L3/L4) filters 构成了Envoy连接处理的核心。 在 listener 部分我们介绍过, 每个 listener 可以组合使用多个 filters 来处理连接数据。


目前有三种类型的 network (L3/L4) filters:

  • Read: 当 Envoy 接收来自下游服务请求数据时被调用。

  • Write: 当 Envoy 向上游服务发送数据时被调用。

  • Read/Write: 上面两种fileter都是单向控制,Read/Write filters 在接收来自下游服务请求数据和向上游服务发送数据时被调用,是双向控制。


这些 filter 通过分析原始字节流和少量连接事件(例如,TLS握手完成,本地或远程连接断开等)对连接进行处理。

Network Filter(L7)/HTTP Filter

HTTP 协议是当前许多服务构建的基础协议,作为核心组件,Envoy 内置了 HTTP 连接管理 filter。 该 filter 将原始数据字节转换成 HTTP 协议类型数据(比如: headers、body、trailers等)。它还会处理一些通用的问题(比如:request日志、request ID生成和request追踪、请求/响应头控制、路由表管理和状态数据统计等)。


HTTP 连接管理提供了三种类型的filter:


HTTP 协议是当前许多服务构建的基础协议,作为核心组件,Envoy 内置了 HTTP 连接管理 filter。 该 filter 将原始数据字节转换成 HTTP 协议类型数据(比如: headers、body、trailers等)。它还会处理一些通用的问题(比如:request日志、request ID生成和request追踪、请求/响应头控制、路由表管理和状态数据统计等)。

HTTP 连接管理提供了三种类型的filter࿱

  • 0
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值