4.5.1 Mesher 简介
什么是 Mesher
Mesher是Service Mesh的一个具体的实现,是一个轻量的代理服务以Sidecar的方式与 微服务一起运行。
Service Mesh是由William Morgan定义:
Service Mesh是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务 拓扑,Service Mesh保证请求可以在这些拓扑中可靠地传输。在实际应用当中,
Service Mesh通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一 起,但应用程序不需要知道它们的存在。
开发指南 4 对接微服务应用
随着云原生应用的崛起,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或Go Chassis开发框架,否则 通过Mesher接入的consumer无法发现provider。
应用间的网络请求如下:
开发指南 4 对接微服务应用
consumer-> Mesher -> provider
● 场景二:consumer、provider均使用Mesher作为Sidecar。
此场景无需再使用微服务开发框架。
应用间的网络请求如下:
consumer -> Mesher -> Mesher ->provider
● 场景三:仅provider使用Mesher作为Sidecar consumer需要使用Java或者Go Chassis开发框架。
应用间的网络请求如下:
consumer-> Mesher -> provider
注意事项
应用上云后需要作出一定的配置变更。例如在Mesher所处环境外,consumer在访问 provider时使用http://IP:port/进行访问。在使用Mesher后,使用http://provider:port/
即可进行访问,接入说明将详细讲解。
4.5.2 接入说明
须知
不同于微服务开发框架,Mesher的能力是由ServiceStage平台提供的。您必须在 ServiceStage平台创建Mesher组件,才能使用Mesher。
本章节介绍http应用如何通过Mesher接入CSE。由于Mesher支持多语言,因此本章仅 描述通过Mesher接入CSE时的规范要求。具体的代码样例可以参考:
● .Net core接入服务网格
● PHP接入服务网格
前提条件
已开发好了一个http应用(支持多语言)。
操作步骤
步骤1 修改微服务调用的URL,将URL中的${IP:Port}修改为服务名。
例如调用一个名为“provider”的微服务,API为“/hello”,则调用URL通常为:
http://${IP:Port}/hello。例如:
http://127.0.0.1:80/hello
您需要将调用的URL修改为:
http://provider/hello
步骤2 为微服务调用请求设置http proxy,proxy的地址为:http://${IP:Port}。例如:
http://127.0.0.1:30101
若一个微服务被其他微服务调用,则该微服务的监听地址中必须包含127.0.0.1(监听 端口和其他监听地址不做限制)。
开发指南 4 对接微服务应用
步骤3 在ServiceStage平台创建Mesher组件,请参考创建微服务组件。
须知
Mesher组件名称必须和微服务名称一致。
----结束
开发指南 4 对接微服务应用
5 部署微服务应用
微服务应用部署,请参考部署组件。
开发指南 5 部署微服务应用
6 使用微服务引擎功能
使用服务注册 使用配置中心 使用服务治理 使用安全认证