王程铭(呈铭)
蚂蚁集团技术工程师,Apache Committer
专注 RPC、Service Mesh 和云原生等领域。
本文 7368 字,预计阅读 15 分钟
前言
MOSN(Modular Open Smart Network)是一款主要使用 Go 语言开发的云原生网络代理平台,由蚂蚁集团开源并经过了双十一大促几十万容器的生产级验证。
MOSN 为服务提供多协议、模块化、智能化、安全的代理能力,融合了大量云原生通用组件,同时也可以集成 Envoy 作为网络库,具备高性能、易扩展的特点。MOSN 可以和 Istio 集成构建 Service Mesh,也可以作为独立的四、七层负载均衡,API Gateway、云原生 Ingress 等使用。
MOSN 作为数据面,整体由 NET/IO、Protocol、Stream、Proxy 四个层次组成,其中:
-
NET/IO 用于底层的字节流传输
-
Protocol 用于协议的 decode/encode
-
Stream 用于封装请求和响应,在一个 conn 上做连接复用
-
Proxy 做 downstream 和 upstream 之间 stream 的转发
那么 MOSN 是如何工作的呢?下图展示的是使用 Sidecar 方式部署运行 MOSN 的示意图,服务和 MOSN 分别部署在同机部署的 Pod 上, 您可以在配置文件中设置 MOSN 的上游和下游协议,协议可以在 HTTP、HTTP2.0 以及 SOFARPC 等中选择。
以上内容来自官网 https://mosn.io
RPC 场景下 MOSN 的工作机制
RPC 场景下,MOSN 的工作机制示意图如下:
我们简单理解一下上面这张图的意义:
1. Server 端 MOSN 会将自身 ingress 的协议端口写入到注册中心;
2. Client 端 MOSN 会从注册中心订阅地址列表,第一次订阅也会返回全量地址列表,端口号是 Server 端 ingress 绑定的端口号;
3. 注册中心会实时推送地址列表变更到 Client 端(全量);
4. Client 端发起 rpc 调用时,请求会被 SDK 打到本地 Client 端 MOSN 的 egress 端口上;
5. Client 端 MOSN 将 RPC 请求通过网络转发,将流量通过负载均衡转发到某一台 Server 端 MOSN 的 ingress 端口处理;
6. 最终到了 Server 端 ingress listener,会转发给本地 Server 应用;
7. 最终会根据原来的 TCP 链路返回。
全局视野下的 MOSN 工作流程
现在我们已经了解了 MOSN 的工作机制,那么 MOSN 作为 MESH 的