DTT NO.50丨Sermant:无代理服务网格架构解析及无门槛玩转插件开发

举报
华为云社区精选 发表于 2023/12/11 09:35:12 2023/12/11
【摘要】 聚焦于Sermant的架构解析及开发实战中,从开发者视角来看核心设计中的插件机制和类加载器架构,在实战中从基础能力开发,到进阶使用统一动态配置能力、统一日志能力等一步步完成插件开发。

本期直播的主题是《从架构设计到开发实践,深入浅出了解Sermant》,华为云云原生DTSE技术布道师、华为云高级工程师、Sermant开源社区PMC核心成员栾文飞,为广大开发者详细从架构设计角度介绍了Sermant的类加载器架构和插件化机制,并在实战中从基础能力开发,到进阶使用统一动态配置能力、统一日志能力一步步完成插件开发。

Sermant核心机制——插件化

Sermant分为两层,Sermant框架层和Sermant服务治理层,Sermant框架提供了一系列的API用于插件开发者可以快速进行服务治理插件的开发。

服务治理层是由多种不同的服务治理能力组成,包含流量控制、标签路由等都是被包装在不同的插件中。其中还包括Backend可用于一些状态展示和事件监控管理。

Sermant的插件化机制中得益于Java 的SPI机制,在很多高可扩展的的项目中,都会利用SPI去加载自己的扩展,Sermant在框架中定义插件声明接口,用于加载不同的服务治理插件,插件开发者只需要按照接口契约,即可轻松将插件接入Sermant。

Sermant核心机制——类隔离

Sermant将框架、插件、微服务之间进行了全面的类隔离,避免框架和插件之间、插件与插件之间以及Sermant与微服务之间出现类冲突问题,并且从开发者的视角来看,服务治理能力开发中对类隔离能力无感知,且无需担心类冲突问题。

除此之外,在Sermant的类加载结构中还有一个很重要的机制,在服务治理插件的开发过程往往会利用到宿主服务的一些类,如果盲目的进行隔离,将会在开发中引入大量的反射逻辑,这会极大的影响执行性能。所以Sermant类加载结构中添加了一个局部类加载机制,可以允许插件在切面出使用切面类的类加载器对用到的宿主类进行类加载,从开发者视角来看,服务治理能力开发中,避免复杂的反射操作,开发效率提升巨大。

Sermant插件开发实战Tips

基础能力

Sermant服务治理插件简单来讲就是一系列切面的集合,最终完成了复杂的治理能力。在面向切面编程时,有两个核心的概念,即Join point(切点)——指定切面的横切位置;Advice(通知)——切面执行的具体行为。对应Sermant的插件开发中也有逻辑与之对应,在Sermant中声明切面位置的称之为插件声明,执行切面逻辑的称之为拦截器。

Sermant的插件声明可以基于类名、超类、注解等进行类定位,并通过方法名、类型、参数、返回值等进行方法定位,定位完成后进行字节码增强。

Sermant的拦截器提供了Before、After、Throw三个关键的生命周期,并在其上提供了形如跳过方法执行,修改方法参数,修改方法返回,修改异常抛出等通用能力。

阶能力——统一动态配置

Sermant提供了一种基于分层模型设计的配置管理方案,它的核心组件包括Group和Key。Sermant通过不同的Group(分组信息)来对配置项进行隔离,使配置管理更具灵活性和可扩展性;同时,通过Key对配置项进行具体属性的标识,实现了对配置项的精准控制和高效维护,Sermant的模型概念在各主流配置中心中均有对应。

最重要的一点,Sermant为开发者和使用者屏蔽了配置中心的差异,可以无需修改任何代码,就可以让Sermant对接多种配置中心。插件开发者,只需要通过Group和Key进行配置的划分,无需了解各配置中心的实际字段,就可以开发出不依赖配置中心的动态服务治理能力。

阶能力——统一日志

Sermant日志开发者在使用统一日志时,通过JUL接口来构造日志即可,无需再依赖其他第三方日志门面依赖,仅需使用Java 原生日志接口,并且Sermant提供的统一日志是和微服务完全隔离的,避免了边车日志系统对微服务日志系统带来不良的影响。

除此之外,Sermant中改造了日志处理器,针对高级别的日志进行了监控,可以配置将高级别日志进行异常的上报,可以第一时间发现边车运行的异常状态,无需开发者进行二次开发。

Follow me,一起动手实战“插件开发

开发实战环节,带领开发者开发了一个简单的监控能力,针对特定的类和方法进行监控,通过定义插件声明和拦截点,就可以快速完成一个简单监控插件的开发。

在基础能力完成后,又通过动态配置的方式,控制了监控能力的开启和关闭,并且通过Sermant统一日志,将异常场景所产生的日志进行了监控,通过简单的几个步骤,就可完成一个非侵入的监控组件,可见Sermant的插件开发学习曲线对开发者非常友好。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。