【DTSE Tech Talk 精选问答】NO.50丨从架构设计到开发实战,深入浅出了解Sermant
【摘要】 云原生无代理服务网格太深奥?带你深入浅出了解Sermant,从架构设计到开发实战,步步为营。本期直播将聚焦于Sermant的架构解析及开发实战中,从开发者视角来看核心设计中的插件机制和类加载器架构,在实战中从基础能力开发,到进阶使用统一动态配置能力、统一日志能力等一步步完成插件开发。
云原生无代理服务网格太深奥?带你深入浅出了解Sermant,从架构设计到开发实战,步步为营。本期直播将聚焦于Sermant的架构解析及开发实战中,从开发者视角来看核心设计中的插件机制和类加载器架构,在实战中从基础能力开发,到进阶使用统一动态配置能力、统一日志能力等一步步完成插件开发。
直播链接:https://bbs.huaweicloud.cn/live/DTT_live/202312061600.html
※ 关于Sermant ※
Q:Sermant隔离仓规则无法生效可能有哪些原因?
A:1.需要检查动态配置中心配置是否正确以及是否正常连接 2.检查流量匹配规则匹配的流量是否正确Q:Sermant有哪些实用的进阶功能?
A:1. Sermant Backend提供了应用运行的可观测能力 2.动态配置中心 3.动态挂载Agent和插件Q:Sermant如何避免请求调用至状态异常的实例?
A:Sermant提供了离群实例摘除的能力,可以将异常状态的实例从可选择实例中进行摘除,来避免调用到下游的异常实例。Q:Sermant能否对第三方源码进行引用?
A:Sermant的类加载器结构很好地解决了和宿主类冲突的问题,可以在插件通过compile或provided的形式引入依赖,如果想使用宿主的对象实例,请通过provided方式引入第三方依赖。Q:Sermant如何最小化版本发布潜在问题的风险?
A:在版本发布前,会对新增功能进行全面的功能和性能、可靠性、安全的测试,并提升自动化测试率,来保障存量能力不被影响。Q:Sermant如何支持可扩展性和灵活性?
A:Sermant架构分为框架和插件,插件可以自定义开发,agent的plugins.yaml文件中可以选择需要挂载的插件。Q:Sermant服务治理对系统环境有哪些要求?指标的采集依赖于Linux环境吗?
A:Sermant可以运行在linux、macos或windows系统。建议在linux环境部署微服务和使用Sermant。服务器指标的采集依赖于Linux环境。Q:Sermant 能无缝嵌入现有的spring boot 项目吗,要做什么修改吗?
A:Sermant主打的能力就是非侵入,当然可以无缝嵌入现有的Springboot项目,不需要做任何修改。Q:Sermant的AOP增强机制对于性能有何影响?如何优化其性能?
A:通过Sermant引入服务治理,相当于在字节码中加入了执行逻辑,这势必会损耗的一定性能。但在插件开发过程中,不要使用反射,这是一个很好的最佳实践。Q:Sermant的AOP增强机制与Spring AOP和AspectJ相比有哪些异同点?
A:在切面的逻辑上基本相同,织入方式上,AspectJ是在编译期进行切面的织入,Sermant是在运行时进行织入的。Q:Sermant的service模块有什么作用呢?
A:在老版本中,Service模块充当着隔离第三方依赖的重要作用,在新的版本中,优化了类隔离架构,我们将不再需要通过Service模块来隔离第三方依赖。Q:Sermant的插件开发是否会出现兼容性问题?对于系统环境有哪些要求?
A:对系统环境当前并无过多要求,因为Java本身就是跨平台的语言,所以只要有Java运行环境即可。Q:Sermant的插件开发有哪些测试和部署策略?
A:当前Sermant社区所有的能力在开发时会有严格的测试流程,其中两轮功能测试和性能测试以及对应的可靠性和安全测试,除此之外,Sermant通过github action来进行自动化测试保障。Q:Sermant的开发实战一般有哪些步骤?
A:第一个步骤基于Sermant Archetype模板创建自己的工程,第二步可以创建声明来指定自己拦截的类,第三步创建拦截器来指明自身所需要实现的逻辑。Q:Sermant的类加载器结构解决了类冲突问题,我可以在插件以compile的形式引入吗?
A:如果需要使用宿主服务的类,则需要通过provide的方式引入,如果使用自身想要使用的jar包,则需要通过compile的方式引入。Q:Sermant的流量控制功能如何实现?能提供一些具体的例子吗?
A:在Sermant的指导文档中,有流控插件使用的实例,具体如何实现,可以参考Sermant中流控插件的源码进行学习。Q:Sermant服务网格开发插件有哪些优势?
A:插件开发简单,通过提供的插件声明定义和拦截器就可以快速完成插件开发,同时,Sermant提供了形如动态配置、心跳等基础能力,更快速的进行服务治理能力的开发。Q:Sermant挂载在宿主应用上时,对应用性能影响大吗?
A:对应用性能影响符合业界标准性能损耗小于15%以下。Q:Sermant基于Maven编译构建如何选择profile?
A:当前使用的主要Profile有agent——基础的Sermant Agent能力,test——全量的服务开启的Sermant Agent,release——用于发布maven产物。Q:Sermant集成了哪些开源的配置中心?
A:Sermant的动态配置能力目前支持Zookeeper、Nacos和Kie作为动态配置中心。Q:Sermant架构在实际项目中的应用场景是什么?如何评估是否适用于我们的项目?
A:在实际应用中,当前使用较多的是流量控制和标签路由能力,如果您的需求是将服务治理能力和业务能力解耦,那么Seramant就适用于您。Q:Sermant能否完全实现服务的零停机部署?
A:当然可以,通过Sermant提供的动态安装和卸载机制,既可以完成服务不停机状态下的接入Sermant。Q:Sermant如何保证插件的兼容性和稳定性?
A:Sermant遵守Instrumentation规范,并没有在字节码增强过程中加入超类和静态字段,以此来保障最大的兼容性。Q:Sermant如何保证代码的可读性和可维护性?
A:1.seramnt代码中注释很详细,代码容易阅读和理解 2.代码开发有严格的设计、开发和测试评审流程Q:Sermant如何收集日志和监控系统状态?
A:通过Sermant提供的统一日志框架可以实现日志的统一采集和事件的统一上报,并通过Backend进行观测。Q:Sermant是否支持第三方插件?如何通过插件机制扩展功能?
A:Sermant支持基于提供的插件声明和拦截器的API所开发插件,通过这种方式来扩展功能,既可以接入到Sermant系统中。Q:Sermant是否支持服务的动态配置和动态参数调整?
A:可以借助Sermant插件中提供的动态配置插件,可以帮助并未支持动态配置的插件,通过动态配置的方式来配置微服务中的@Value值。Q:Sermant相比isito有啥明显的优势吗?Sermant与ServiceMesh的区别Sermant的定位是怎样的?
A:Sermant是基于Java字节码增强技术实现的一种非侵入、高性能的服务网格,相对于ServiceMesh(Istio)性能高出很多,但支持Java语言。Q:Sermant在开发过程中如何进行测试和调试?
A:可以通过JVM Remote Debug进行远程调试,也可以通过将微服务和Agent代码放在一起运行的方式进行调试。Q:Sermant在云原生无代理服务网格中的角色是什么?它如何与其他组件协同工作?
A:Sermatn就是云原生无代理网格,其中包含了控制面和数据面的角色,并没有其他组件来协同工作,唯一需要使用的是动态配置中心。Q:Sermant支持哪些通信协议或技术,例如HTTP、THREAD、RPC、KAFKA等?
A:根据不同的能力会有不同的协议支持,可以在sermant.io的插件使用手册中看到每个插件支持的协议和版本限制。Q:Sermant中的动态配置功能是如何实现的?它的核心原理是什么?
A:用户通过Sermant Agent的配置,来决定Sermant实际对接的配置中心类型,开发者在Plugin开发中,只需要对接Sermant动态配置的通用接口,即可实现动态配置的功能,而不需要关注动态配置中心本身的各种选型和实现。Q:Sermant中的服务网格是如何与服务交互的?
A:通过字节码增强的方式,在服务的字节码中创建字节码增强切面,在运行时,效果等同于通过源码进行开发。※ 其他 ※
Q:什么是调度器?在Sermant中如何实现调度器的功能?
A:调度器中维护了针对各个切点的拦截器的列表,在调用过程中,会将其转换为双向迭代器的形式在前置和后置逻辑中进行调度。Q:什么是配置项的分组信息(Group)?在Sermant中如何使用它?
A:对配置项进行隔离,可以包含应用,命名空间等信息。在插件开发郭晨中,可以使用监听器来监听对应的group。Q:什么是切点?在Sermant中如何定义切点?
A:切点Join Point,是用来指明切面位置,在Sermant中通过插件声明器来指定die前。Q:在服务运行时,如何选择进程ID以执行全量安装/卸载和插件安装?
A:只需要通过执行Sermant Agent中提供的执行脚本,他可以以交互式的方式来引导我们使用者在使用中一步步将Sermant安装到微服务上。Q:Advice?在Sermant中如何实现Advice的正向迭代和逆向迭代?
A:通过一个双向迭代器来管理针对某一织入点的所有拦截器,并且会将双向迭代器在方法执行的上下文中传递。Q:ClassFileTransformer是什么?在Sermant中如何使用它来修改类的字节码?
A:ClassFiTransformer是类文件转换器,是Java提供的字节码增强的核心能力,Sermant底层通过ByteBuddy来使用ClassFiTransformer,来向类的字节码中增加切面。Q:Nacos、Zookeeper等三方动态配置中心在Sermant中是如何被使用的?
A:Sermant框架提供了监听器的封装,用于监听配置中心,只需要部署配置中心,并在核心配置中指定配置中心的类型和地址即可轻松对接。Q:Sermant Backend、Sermant Injector、动态配置中心等组件为Sermant提供了哪些能力?
A:Sermant Backend提供了Agent实例的监控,Sermant Injector组件用于在k8s场景下进行快速的部署,Sermant自身不提供动态配置中心组件,而是提供了对接动态配置中心的能力。Q:插件的重要信息可以通过心跳定时上报吗?能否在监控面板及时观测?
A:在agent的config.properties配置文件中打开event.enable开关可以上传异常信息并通过backend观测。Q:动态配置中心在Sermant的定位是怎么样的?
A:动态配置中心为Sermant动态配置功能配套组件,该功能允许Sermant从动态配置中心拉取配置以实现丰富多样的服务治理能力。用户可按需开启动态配置能力并部署动态配置中心。配置中心使得Sermant在静态配置的基础上,具备了动态配置的关键能力,解决了前者提供的配置不可改变的问题,这是Sermant的服务治理多样化的实现基础。Q:开发Sermant架构需要哪些技术和工具支持?是否需要进行额外的培训或引入新的团队成员?
A:基于Sermant进行开发过程中,只需要有掌握Java开发能力的团队成员既可以进行开发,因为Sermant已经完全屏蔽了在非侵入层面的难点和对接动态配置中心的复杂性,并且提供了建议的API用于插件开发。Q:开发者视角下,Sermant的类加载结构如何简化服务治理能力开发?
A:首先通过底层的类加载机制,避免开发者再创建类加载结构用于避免类冲突问题,同事提供局部类加载机制,用于开发者可以不利用反射使用宿主类,极大降低了开发的难度。Q:目前我在使用Naocs应该怎样接入到使用Sermant?
A:Nacos接入Sermant只需要将Sermant的核心配置dynamic.config.dynamicConfigType改为‘NACOS’即可,并且配置相应的链接地址。Q:切点与插件开发有何关系?如何使用切点来定义插件的行为?
A:插件中的核心要素就是插件声明和拦截器,其中插件声明就是用来指定切面编程的切点的,通过指定切点再指定拦截器来完成插件行为的定义。Q:日志是同步的还是异步的,输出日志应该会占用服务器资源,导致程序运行速度降低吧。那sermant是怎么通过隔离解决这个问题的?
A:当前使用的是同步日志,Sermant有一套独立的日志级别控制配置,当前Sermant中的日志可以通过控制级别的方式来控制输出,减少对性能的损耗。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)