Slime 是网易数帆旗下轻舟微服务团队开源的服务网格组件,它是一个为简化云原生而生的智能网格管理器,可以通过服务监控自动感知服务状态智能调整服务治理策略,实现Istio/Envoy的高阶功能。
目前slime 包含三个非常实用的子模块:
- 配置懒加载:无须手动配置 SidecarScope,按需加载配置和服务发现信息
- Http插件管理:使用新的 CRD pluginmanager/envoyplugin 包装了可读性,可维护性较差的 envoyfilter,使得插件扩展更为便捷
- 自适应限流:结合监控信息自动调整限流策略
1. 背景
服务网格作为新一代微服务架构,采用 sidecar 模式,实现了业务逻辑和微服务治理逻辑的物理解耦,降低微服务框架的开发与运维成本。权责清晰,易维护,可观测,多语言支持等一些列优势使其逐渐成为微服务话题中的焦点。而 Istio+Envoy 作为其使用最为广泛的实现一直占据着 C 位,背靠 Google 的大树,Istio 已隐隐具备了成为业界标准的趋势。
欲戴皇冠,必承其重。站在风口浪尖的 Istio,获得赞誉的同时也引来了不少非议。项目的优势自不必说,Istio 有着一套行之有效的上层抽象,通过配置VirtualService,DestinationRule 等 CR 可以实现版本分流,灰度发布,负载均衡等功能,但是在面对本地限流,黑白名单,降级等微服务治理的高阶功能时,这套抽象显得力有不逮,起初 Istio 给出的解决方案是 Mixer,将这些原本属于数据面的功能上升到 Mixer Adapter 中,虽然解决了功能扩展的问题,但其集中式的架构遭到了不少关注者对其性能的质疑。最终,Istio 在新版本中自断其臂,弃用了 Mixer,这就使得高阶功能的扩展成为目前版本的一块空白。另一方面 Istio 配置是全量推送的,这就意味着在大规模的网格场景下需推送海量配置,为了减少推送配置量,用户不得不事先搞清楚服务间的依赖关系,配置SidecarScope 做配置隔离,而这无疑增加了运维人员的心智负担,易用性和性能成为不可兼得的鱼和熊掌。
针对 Istio 目前的一些弊端,网易团队开启了 slime 项目。该项目是基于 k8s-operator 实现的,作为 Istio 的 CRD 管理器,可以无缝对接 Istio,无需任何的定制化改造。slime 内部采用了模块化的架构,目前包含了三个非常实用的子模块:
- 配置懒加载:无须手动配置 SidecarScope,按需加载配置信息和服务发现信息,解决了全量推送的问题。
- Http 插件管理:使用新的 CRD pluginmanager/env