MOSN 当前能力具备能力说明
当前 MOSN 具备如下的能力:
NET/IO
- 屏蔽IO处理细节
- 定义网络链接生命周期
- 定义可编程的网络模型,核心方法,监控指标
- 定义可扩展的插件机制
- 定义适用于client/server端的能力
- 基于golang net包实现
PROTOCOL
- 定义编解码核心数据结构
- 三段式:Headers + Data + Trailers
- 定义编/解码器核心接口
- 定义扩展机制接受解码数据
- 提供通用的编/解码引擎
- 编码:对业务数据进行编码并根据控制指令发送数据
- 解码:对IO数据进行解码并通过扩展机制通知订阅方
- 定义编解码核心数据结构
STREAMING
- STREAM: 为网络协议请求/响应提供可编程的抽象载体
- 考虑PING-PONG,PIPELINE,分帧STREAM三种典型流程特征
- 定义STREAM生命周期,核心事件
- 定义STREAM层编/解码核心接口
- 核心数据结构复用PROTOCOL层
- 定义可扩展的插件机制
- 定义连接池模型
- 编/解码过程中需处理上层传入的全局状态定义
- 不同协议根据自身协议流程封装STREAM细节
- STREAM: 为网络协议请求/响应提供可编程的抽象载体
PROXY
- 基于STREAM提供多协议转发能力
- 提供云部署亲和的后端管理能力
- 提供负载均衡,健康检查等核心能力
- 提供可配置的路由转发能力
- 维护上/下游核心统计指标
- 基于全局状态定义的请求拦截,由STREAM进行协议转换
协议支持
- SOFARPC
- 基于Codec扩展实现BOLT v1, v2,TR协议编解码
- 将SOFA RPC请求/响应分解为headers,body两部分
- Tr协议body中的request id并入headers
- 基于Stream扩展实现sofa rcp协议流程,链接池
- 链接池只有一个client,无扩容机制
- HTTP
- 使用 fasthttp 开源软件
- HTTP2
- 使用go自带的 http2
- [注] mosn前期重点在做sofarpc支持,对http和http2使用了开源版本,未经过性能优化
- SOFARPC
SOFARPC – 心跳处理
- SrvA 2 Mesh
- SrvA根据链接空闲状态开始/停止心跳发起
- Mesh收到心跳请求后根据后端cluster健康度对Srv A进行响应
- Mesh 2 Mesh
- Mesh定时异步对后端Mesh进行健康检查
- 后端Mesh收到健康检查请求后做带缓存的透传
- Mesh 2 Srv B
- 后端Mesh缓存失效后透传健康检查到Srv B
- SrvA 2 Mesh
Mesh间通信-HTTP2
- HTTP 2特性
- 分帧多路复用
- 二进制传输
- 服务器推送
- 头信息压缩
- 数据流优先级
- PING帧探活
- HTTP 2特性
复杂路由支持
- 通过子集群匹配与header过滤组合使用支持复杂的分流需求
- 通过header kv匹配决定目标路由
- Value匹配规则支持正则表达式
- 通过子集群匹配灵活调度流量到统一集群内的不同子集群
- 路由声明
- 通过一组kv定义路由过滤规则
- 通过路由权重调整各子集群流量比例
- 后端子集群声明
- 后端可携带多组自定义metadata,每组metadata为kv形式
- 通过一组metadata keys归纳一个子集群,用于与路由声明中定义的keys对应
- 一个集群内部可声明多个子集群
- 路由声明
网络/协议层扩展机制
- 通过实现4层网络Filter在4层处理阶段注入扩展点
- Connection Read/Write Filter
- Listener Event Handler
- 通过实现协议Stream Filter在协议处理阶段注入扩展点
- Stream Encode/Decode Filter
- Stream Event Handler
- 通过实现4层网络Filter在4层处理阶段注入扩展点