一、servicecomb-mesher
使用 go 语言基于 go-chassis 开源框架实现,go-chassis 框架以插件的形式支持负载均衡、流量控制、调用链追踪、熔断降级、服务治理、动态配置管理等微服务能力。mesher目前支持sidecar和edgeservice两种运行模式。支持服务间使用http、dubbo协议通信。mesher以调用链的形式处理请求,可以根据配置自由裁剪处理函数。
A、部署方式
启动 mesher,mesher会根据配置信息启动两个服务,分别监听在本地回环和本地 ip 上。第二步,mesher(127.0.0.1:30101)接收到请求后,使用 LocalRequestHandler 处理请求,首先准备 consumer 调用链,获取并解析 client 调用的服务名和端口,创建 Invocation,之后通过 consumer 调用链进行处理,最后建立一个 client 对外部的目的服务发起调用;监听在 127.0.0.1:30101 的 mesher 作为 consumer,使用处理请求,consumerChain 调用链默认包含如下处理器(handler):
chassisHandler.Router,chassisHandler.RatelimiterConsumer chassisHandler.BizkeeperConsumer
chassisHandler.Loadbalance
chassisHandler.Transport
第三步,监听在 192.168.88.64:30102 的 mesher 接收到请求后,调用RemoteRequestHandler 处理请求,首先将请求转为 Invocation,准备 provider 调用链,解析地址,将目的地址替换为业务服务的地址,然后调用处理链处理请求,最终向内部真正的业务 server 发起 http 调用;监听在 192.168.88.64:30102 的 mesher 作为 provider 处理请求,providerChain 调用链默认包含如下处理器(handler):
chassisHandler.RatelimiterProvider
chassisHandler.Transport
B、dubbo协议
dubbo协议采用固定长度的消息头(16字节)和不定长度的消息体来进行数据传输
C、dubbo流量转发时序
二、MOSN
A、分层结构
1、NET/IO 作为网络层,监测连接和数据包的到来,同时作为 listener filter 和 network filter 的挂载点
2、Protocol 作为多协议引擎层,对数据包进行检测,并使用对应协议做 decode/encode 处理
3、Stream 对 decode 的数据包做二次封装为 stream,作为 stream filter的挂载点
4、Proxy 作为 MOSN 的转发框架,对封装的 stream 做 proxy 处理
B、部署方式
-
Downstream:调用端的数据流向统称。
-
Upstream:服务端的数据流向统称。
-
clientListener:用于接收调用端(业务进程)请求数据的监听端口。
-
serverListener:作为服务端流量代理,用于接收调用端的请求
-
clientCluster:服务提供者的地址列表,实际应用中这块数据应该来自于注册中心。
-
serverCluster:真正提供服务的业务进程,也就是说一个MOSN可以代理多个服务端进程。
C、连接池
D、建立连接时序
E、读请求转发时序
Proxy实现api.ReadFilter(github.com/mosn/api)的OnData方法
streamConn实现StreamConnection的Dispatch方法
proxy.downStream实现了types.StreamReceiveListener的OnReceive方法
F、写请求转发时序