云原生微服务的下一站:Proxyless Service Mesh
本文分享自华为云社区《DTSE Tech Talk | 第46期:云原生微服务的下一站:Proxyless Service Mesh》,作者:华为云社区精选。
本期直播主题是《云原生微服务的下一站:Proxyless Service Mesh》,华为云云原生DTSE技术布道师、华为云技术规划专家,Sermant开源社区创始人杨奕以及华为云云原生DTSE技术布道师、Sermant社区PMC李来,和开发者一起交流了微服务架构演进历程、新一代的新一代云原生无代理服务网格Sermant如何解决以往架构的痛点以及实操演示如何改造升级微服务架构。
微服务架构各自的痛点
在微服务的概念出现之前分布式业务的改造最早是通过传统的SOA(面向服务)架构来进行的。SOA架构一般会部署集中式的Load Balancer或者中心网关。它的优点是架构简单,但是性能低下,可扩展性差。
此后微服务SDK架构开始流行起来,例如Dubbo和Spring Cloud,主要是通过业务应用中引入SDK来实现服务注册发现、限流降级、全链路灰度等服务治理能力。这种架构的性能卓越,功能丰富,但应用改造成本高,升级困难。
近年来较为流行的微服务架构是Service Mesh 边车架构,它通过在微服务旁边挂载一个单独sidecar进程,去接管各种服务治理能力。Service Mesh架构的特点是应用改造成本低,可以解决多语言问题,但是资源消耗高,性能低下。
Sermant是什么
Sermant是面向Java微服务的新型云原生Proxyless Service Mesh方案,它结合了上述三种微服务架构的优势,并且解决了它们的痛点问题,既有SDK架构的高性能、多功能的好处,又有边车架构的零侵入优势, 而且还能一键接入。
Sermant核心原理是利用字节码增强为宿主应用程序提供插件化的服务治理功能,并且提供动态配置用于调整运行时服务治理功能。此外,配套的Backend组件也使得Sermant具有边车自身运行时的可观测能力。
Sermant的核心架构优势
Sermant的Proxyless Service Mesh架构具有高性能、插件化、非侵入的特点。
- 高性能
Sermant利用了Java的字节码增强能力,实现方式是面向AOP的服务治理能力注入。相对于Istio这种sidecar架构来说,无独立进程开销,性能提升明显。
- 插件化
Sermant框架底座封装了字节码增强的SPI接口,提供了动态配置、事件上报等能力,基于这个底座的插件开发基础,Sermant提供了完善和便利的开发生态,把所有的服务治理功能插件化。目前开源仓库中的插件已经有了限流降级、灰度发布、优雅上下线等能力
另外,各个插件之间、插件和业务之间做到了类隔离,不但使得治理能力解耦,也避免了和业务应用之间的类冲突问题。Sermant完善的类隔离机制使得插件可以轻松地实现热插拔,在故障注入等场景以及插件升级时无需中断应用即可将插件动态注入到业务应用进程中。
- 非侵入
Sermant是基于JavaAgent实现的,利用字节码增强的能力,Sermant不需要修改业务应用的源代码,在运行时可以动态修改目标类的字节码,对于业务应用的开发者来说是无感知的。
在虚机场景,开发和运维人员只需在java -jar启动应用程序的命令前,添加一段-javaagent的启动参数指定Sermant的jar包的路径就可以让应用在运行时挂载Sermant。
在容器场景,在部署了sermant-injector组件后,创建容器时只需在Deployment中添加一行sermant-injection:enabled的Label就能在创建Pod时让业务应用挂载Sermant启动,真正做到一键接入。
Sermant在微服务治理中的应用
- 微服务架构改造
传统的SOA/ESB架构做改造升级一般为两种:引入微服务SDK对海量的微服务做全量改造;引入传统的sidecar架构,对微服务做少量改造。前者的改造量巨大,各业务部门之间难以协同推进;后者工作量较少,但是性能和运维问题仍存在隐患。
Sermant的改造方式对应用非侵入,周期短,并且支持灰度改造,在不影响业务稳定的前提下,可以逐步实现架构的整体升级。
▲ 微服务架构改造
- 全链路灰度发布
Sermant的流量染色、流量标签透传、标签路由能力使得Sermant具备了完整的全链灰度发布的能力。并且染色、透传、路由规则都支持动态配置,让全链灰度发布可以按照实际场景的需求来进行开关或调整治理规则。