Sermant:无代理服务网格架构解析及无门槛玩转插件开发
本文分享自华为云社区《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的插件开发学习曲线对开发者非常友好。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
从概念到实践,带你掌握层次递归查询
本文分享自华为云社区《GaussDB数据库SQL系列-层次递归查询》,作者: Gauss松鼠会小助手2。 一、前言 层次递归查询是一种常见的SQL查询方式,特别是在一些层次化的数据存储结构中经常用到。本文主要以GaussDB数据库为实验平台,为大家讲解其使用方法。 二、GuassDB数据库层次递归查询概念 层次化结构可以理解为树状数据结构,由节点构成。举个简单的例子,如下图所示,由子节点向上查询根节点,或者由根节点遍历所有子节点: 递归查询是指查询中需要多次调用自身的查询方式。在递归查询中,查询会反复地递归进入到一个子查询中,直到查询得到满足条件的结果或遍历完整个查询范围。递归查询在数据库领域中有着重要的应用。方便数据处理,简化开发代码。 在GaussDB数据库中,递归查询可以通过使用 “select…start with…connect by…prior…” 和“WITH RECURSIVE”语法来实现。 三、GaussDB数据库层次递归查询实验示例 1、创建实验表 --创建实验表 CREATE TABLE area( a_code VARCHAR(10) ,a_n...
- 下一篇
在自动化测试时,Python常用的几个加密算法,你有用到吗
本文分享自华为云社区《『加密算法』| 自动化测试时基于Python常用的几个加密算法实现,你有用到吗?》,作者:虫无涯 。 写在前边 这几天做自动化测试,遇到一个问题,那就是接口的请求的密码是加密的; 产品的要求是不能使用其他特殊手段,他给提供加密算法,需要在接口请求的时候,使用加密算法处理后的数据传参; 其实这样来说反而简单了很多,因为已经知道加密算法,那就在传参前先把密码进行加密处理就行了(心理默默的想,这个产品也太好了吧); 本文主要是整理了几个加密算法,以便后续测试使用。 公用数据 为了方便后续举例,我们设计一个类,来把需要演示的加密算法统一封装起来: # -*- coding:utf-8 -*- # 作者:虫无涯 # 日期:2023/12/1 # 文件名称:test_pass.py # 作用:常用的加密算法实现 # 联系:VX(NoamaNelson) # 博客:https://blog.csdn.net/NoamaNelson import hashlib class TestPass(): def __init__(s...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装