引言
越来越多的公司开始研究Service Mesh,线上大批量应用案例的依旧很少,已经上线的很多问题解决的并不完美,为后面迭代和稳定性埋下隐患。目前来看整体开源生态成熟度还有需要完善,本文为笔者试水service mesh过程中发现的问题归纳整理。
一、目标与价值
业务侧只需要引入轻量级SDK,其他基础能力下沉到网格SideCar代理中,一个美好的愿望 “接管所有非业务关心的能力”。
二、组织形态整合
如果将Service Mesh作为公司战略推动,Service Mesh依赖Kubernate底座,相关人员最好整合到一个部门,统一运维和开发。
三、技术问题
下面就使用最广泛的Istio和Envoy为例就其线上运行需要解决的技术问题归纳整理。
实现目的: 公司已有的注册中心接入服务网格(Istio),完成服务注册与发现能力
基本原理: 通过Istio提供的ServiceEntry将网格外注册中心接入网格
https://mp.weixin.qq.com/s/4bTdmaQVKi8YHhBJCbrVKQ
实现目的: 需要实现网格内外通信,那网格内的服务调用原有服务需要支持原有的RPC协议
基本原理: 与使用的RPC框架关联,如果使用gRPC自研由于Istio原生支持HTTP/2则改动极小,如果使用dubbo或者自研RPC框架,可以通过EnvoyFilter转换实现,可以参考腾讯开源框架 aeraki
https://github.com/aeraki-framework/aeraki
实现目的: 网格流量需要支持限流、熔断等治理能力并与现有治理平台融合
基本原理: 通过Envoy提供的Filter插件机制,将限流配置与EnvoyFilter规则映射完成限流,可以参考网易开源的slime框架
https://github.com/slime-io/slime
实现目的: 网格流量的监控指标和埋点需要与原有监控体系融合
实现原理: Istio提供了kiali、jaeger、grafana、prometheus相关监控体系,将这些这表对接到原有监控系统。另外一些自定义的监控指标可以通过wasm扩展。
https://mp.weixin.qq.com/s/ZO7dZ3mddISFjB4NTJHdjQ
在默认情况下,Istio会全量下发注册中心配置信息,占用过多的内存严重影响性能。常见的方案有:
在对代理SideCar进行部署和升级时的处理,需要做到平滑先摘流量再部署升级。