更新时间:2024-10-23 GMT+08:00

Mesher简介

什么是Mesher

Mesher是Service Mesh的一个具体的实现,是一个轻量的代理服务以Sidecar的方式与微服务一起运行。

Service Mesh是由William Morgan定义:

Service Mesh是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,Service Mesh保证请求可以在这些拓扑中可靠地传输。在实际应用当中,Service Mesh通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但应用程序不需要知道它们的存在。

随着云原生应用的崛起,Service Mesh逐渐成为一个独立的基础设施层。在云原生模型里,一个应用可以由数百个服务组成,每个服务可能有数千个实例,而每个实例可能会持续地发生变化。服务间通信不仅异常复杂,而且也是运行时行为的基础。管理好服务间通信对于保证端到端的性能和可靠性来说是非常重要的。

Service Mesh实际上就是处于TCP/IP之上的一个抽象层,假设底层的L3/L4网络能够点对点地传输字节(同时,也假设网络环境是不可靠的,所以Service Mesh必须具备处理网络故障的能力)。

从某种程度上说,Service Mesh有点类似TCP/IP。TCP对网络端点间传输字节的机制进行了抽象,而Service Mesh则是对服务节点间请求的路由机制进行了抽象。Service Mesh不关心消息体是什么,也不关心它们是如何编码的。应用程序的目标是“将某些东西从A传送到B”,而Service Mesh所要做的就是实现这个目标,并处理传送过程中可能出现的任何故障。

与TCP不同的是,Service Mesh有着更高的目标:为应用运行时提供统一的、应用层面的可见性和可控性。Service Mesh将服务间通信从底层的基础设施中分离出来,让它成为整个生态系统的一等公民——它因此可以被监控、托管和控制。

为什么要使用Mesher

  • 业务代码无须改造
  • 支持老旧应用接入
  • 普通应用快速成为云原生应用
  • 业务代码零侵入

基本实现原理

Mesher是L7层协议代理,Mesher以Sidecar模式运行在应用所在的Pod内,与Pod共享网络与存储:

  1. Pod中的应用使用Mesher作为http代理,可以自动发现其他服务。
  2. Mesher会代替Pod中的应用向注册中心注册应用相关信息,以便让其他应用发现。

发起一次网络请求的过程中存在微服务消费者consumer和提供者provider,场景如下:

  • 场景一:仅consumer使用Mesher作为Sidecar。

    provider需要自己实现服务注册发现,或者使用Java开发框架,否则通过Mesher接入的consumer无法发现provider。

    应用间的网络请求如下:

    consumer-> Mesher -> provider

  • 场景二:consumer、provider均使用Mesher作为Sidecar。

    此场景无需再使用微服务开发框架。

    应用间的网络请求如下:

    consumer -> Mesher -> Mesher ->provider

  • 场景三:仅provider使用Mesher作为Sidecar

    consumer需要使用Java开发框架。

    应用间的网络请求如下:

    consumer-> Mesher -> provider

注意事项

应用上云后需要做出一定的配置变更。例如在Mesher所处环境外,consumer在访问provider时使用http://IP:port/进行访问。在使用Mesher后,使用http://provider:port/即可进行访问,接入说明将详细讲解。