基础概念
Service Mesh最核心有两个概念:数据面和控制面。
数据面
数据面负责做网络代理,在服务请求到链路上做一层拦截与转发,可以在核心链路上实现服务路由,链路加密,服务鉴权等。
技术实现可以采用Golang进行高性能网络代理的研发,承载核心应用流量。
控制面
控制面负责做服务发现,服务路由管理,请求度量等。
核心链路的诉求
在面对核心链路大促大流量场景的需求下,解决链路稳定性是极大的挑战。
能力支持
Service Mesh作为底层高性能网络代理,支撑RPC,MSG,Gateway等业务场景。
IO模型
Service Mesh在实现上,支持两种IO模型,一个是Golang经典模型,goroutine-per-connection;一个是RawEpoll模型,就是经典的Reactor模式,IO多路复用+非阻塞IO模式。
对于服务化场景来说可以选择Golang经典模型。
对于接入层和网关有大量长链接的场景,更适合RawEpoll模型。
Golang协程模型
- 一条TCP连接对应一个Read协程,执行收包和协议解析;
- 一个请求对应一个worker协程,执行业务处理,proxy和write逻辑;
常规模型一个TCP连接有Read/Write两个协程,可以取消单独到Write协程,让workerpool工作协程代替,以减少调度延迟和内存占用。
扩展能力
通过plugin机制,支持协议扩展,如:Http1/Http2,Dubbo等协议。
链路安全
对于链路加密,可以采用Go的TLS实现。
内存复用
采用:sync.Pool,slice复用使用slab细粒度,提高复用率,常用结构体复用。
动态配置能力
基于Json提供统一数据面API。
关于Go
在版本上选择最新的1.12.6,其修改了内存回收的默认策略。
- GC优化,减少长尾请求。采用自我抢占机制,将耗时较长的GC标记过程打散,换取更为平滑的GC表现,减少对业务延迟的影响。
有疑问加站长微信联系(非本文作者)
本文来自:简书
感谢作者:更多精彩内容开源 | Service Mesh 数据平面 SOFAMosn 深层揭秘金融级分布式架构天池中间件大赛Golang版Service Mesh思路分享王亚普Service Mesh在企业级应用的生存之道博云技术社区Dubbo Mesh 在闲鱼生