Sermant自定义插件开发上手体验

解析 Sermant 热插拔能力:服务运行时动态挂载 JavaAgent 和插件 Sermant 是基于 Java 字节码增强技术的无代理服务网格,其利用 Java 字节码增强技术,为宿主应用程序提供服务治理功能,以解决大规模微服务场景中的服务治理问题,通过 Java 字节码增强技术,可以非侵入的提供服务治理能力。在以往版本中,Sermant 通过配置 - javaagent 指令在微服务启动时接入服务治理能力,当需要接入及卸载 Sermant 时都需要通过重新启动微服务来完成。 阅读详情

作者:用友汽车信息科技(上海)有限公司    刘亚洲 Java研发工程师

一、研究缘由

由于目前我们所处的行业是汽车行业,项目上进行云服务的迁移时使用到了Sermant中的相关插件, 为了加深对Sermant开发和运行机制的了解,我们从零开始体验Sermant自定义插件的开发。

下面我们就Sermant-example中的first-plugin-demo来进行研究说明。

二、下载Sermant-example

首先我们下载sermant-example的demo:

下载完成之后,我们从最简单的自定义插件开始,也即first-plugin-demo。

三、执行打包

对first-plugin-demo执行打包,打完包的结构:

可以看到我们的项目和对应的插件模板项目都在里面了。

四、启动项目

java -javaagent:sermant-agent.jar -jar Application.jar

然后访问controller方法

从而可以看到拦截的效果:

可以看到启动的过程中,完成了拦截的效果。

也即它走了拦截器的前置和后置方法。

五、动态配置验证

配置的动态配置里面配置的配置中心是zookeeper,因此我们在启动项目前需要启动一个zookeeper作为配置中心,同时开启动态配置开关。

完成之后,我们需要在相应的监听节点下创建一个配置项,来测试动态配置的功能:

再次进行访问,可以在控制台看到如下效果:

也即完成了动态配置的功能。而我们可以看到

其实质是创建了配置监听器,实现了配置处理的process方法,其中DynamicConfigEvent就是监听到的配置更改的事件,包含了配置的group,key,content等配置信息。实现动态配置的相关实现是调用了自己实现的process方法,基于map对配置进行存储和处理,从而实现配置切换。

六、全流程中的参数argsMap到底是什么

之前一直很好奇配置里面的信息到底是什么,最近debug之后有所发现。

我们可以看到加载的argMap里面的相关参数:

我们可以看到argsMap里面的参数基本上和上面的配置,同时会加载插件里面的配置信息。完成这些操作之后,就可以在全流程中去完成对应信息的加载了。

ConfigManager.initialize(argsMap) ,主要是解析一些配置,由于配置存在yaml和properties等不同的形式,因此这里采用策略模式来进行解析。主要的相关配置信息可以参考BaseConfig这个接口的实现。

七、插件的加载是在plugins.yaml

插件的加载是在plugins.yaml里面配置的,比如我们自定义的插件:

而实现插件的关键在于plugins.yaml中配置了哪些插件。因为这些插件正是后续进行拦截的基础。也即它告诉了程序,需要加载哪些插件,不需要加载哪些插件。有了这个基础,才会进行后面精准的转换、installOn操作。

八、拦截原理

我们可以看到上面控制台打印的拦截信息,那如何实现拦截的呢?

可以看到我们执行first-plugin-demo这个示例的时候:会发现我们执行业务方法的时候,它就会进行织入拦截器,执行对应的onMethodEnter和方法执行完后的onMethodExit方法。

这两个方法和byte-buddy中的使用实现的功能是类似的。在需要拦截的方法中执行织入的逻辑。

同时可以从控制台debug中的信息可以看到调用的情况:

完成上面的调用之后,我们便可以看到控制台输出的信息了。

这里我们以进入方法为例,来进行说明:

可以看到进入对应的织入方法之后,最终会走到我们需要进行扩展的迭代器中,来实现迭代。

可以看到进入了first-plugin-demo中的插件拦截:

完成拦截进入到业务方法中,实现拦截功能的织入。然后进入后置拦截,完成after的拦截逻辑。

参考:

官网:https://sermant.io

仓库地址:GitHub - sermant-io/Sermant: A Cloud-Native Proxyless Service Mesh based on Java Bytecode Enhancement Technology

Demo仓库:https://github.com/sermant-io/Sermant-examples

ST7789P3初始化配置 【代码】ST7789P3初始化配置。 阅读详情

相关推荐

SDIO协议

SDIO协议1 概述  SDIO,全称:Secure Digital Input and Output ,即安全数字输入输出接口。2 特点①与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。②与较早的多媒体卡系统规格版本全兼容(向前兼容)。③与SD存储卡规格版本2.0全兼容。④与SD I/O卡规格版本2.0全兼容:支持两种不同的数据总线模式:1位(默认)和4

Let the development board fly! 3万+

Sermant 开源项目使用教程

Sermant(也称为 Java-mesh)是一个基于 Java 字节码增强技术的无代理服务网格。它利用 Java 字节码增强技术为应用程序提供服务治理能力,解决大规模微服务架构中的服务治理问题。Sermant 的愿景还包括构建一个插件开发生态系统,帮助开发者在不干扰应用程序代码的情况下,更轻松地创建服务治理功能。 ## 项目快速启动 ### 准备工作 1. 下载 Sermant 发布包(推

gitblog_01055的博客 1070

ITK-snap医学图像标注方法(超级详细)——保姆级

医学3D图像标注方法,非常详细,保姆级

jialiyk的博客 3万+

从零开始带你上手体验Sermant自定义插件开发

本文对Sermant的自定义插件开发的流程进行了体验和探索,包括项目编译、运行、动态配置验证、插件拦截原理等内容,希望对初次体验Sermant高效开发插件的开发者有所帮助。

华为云官方博客 1675

Simulink机电仿真避坑指南:如何用MATLAB解决液压系统建模的3大典型问题

本文针对液压系统建模在Simulink动态仿真中常见的三大难题——参数物理意义缺失、模型收敛性差及性能优化瓶颈,提供了专业的MATLAB解决方案。文章详细阐述了如何从物理参数推导仿真模型、破解代数环与刚性系统问题,并分享了模型降阶与加速技巧,旨在帮助工程师构建精确高效的机电系统仿真模型。

o9p0q1的博客 295

头歌OpenGauss数据库-G.视图的使用

OpenGauss数据库-G.视图的使用

python一生之敌的博客 1383

玩转Sermant开发,开发者能力机制解析

本着从入门到精通的思路,本文对在Sermant开发中所常用的能力,从机制上进行更深入的解析。

华为云官方博客 1495

优化算法 | 赏金猎人优化算法(Bounty Hunter Optimizer, BHO)及其在多无人机移动边缘计算与路径规划中的应用(附matlab源代码)

移动边缘计算(Mobile Edge Computing, MEC)通过将计算资源下沉至网络边缘,有效解决了物联网终端设备计算能力不足与能耗受限的问题。无人机(Unmanned Aerial Vehicle, UAV)因其高机动性、灵活部署和广域覆盖等优势,被广泛用作MEC的移动服务器平台。多无人机辅助MEC系统的核心优化问题在于:如何在满足任务处理时延约束和无人机能量限制的前提下,联合优化无人机的三维飞行轨迹、任务卸载决策与计算资源分配,以最小化系统总能耗或最大化任务完成效率。

尘世冰封的专栏 223

实例讲解基于Sermant快速开发服务治理插件

我们通过案例讲解,说明如何基于Sermant开发一个接口统计调用时长的插件,并用于生产环境的部署。

华为云官方博客 841

【即插即用模块】注意力篇 | ECCV 2024 | DPB:高低频动态分离+双提示融合,PSNR直冲40+!

本文提出了一种基于频率提示的图像恢复方法FPro,通过动态滤波器分离输入特征的高低频分量,并采用双提示块(DPB)进行频域专属提示生成与调制。DPB包含低频提示调制器(LPM)和高频提示调制器(HPM),分别处理不同频段信号,通过生成提示组件并融合解码器特征来优化恢复效果。实验表明,该方法在U型结构中表现优异,尤其适用于分割、底层视觉和多模态任务。模块通过动态无监督频率分离、频域专属提示生成和适配性融合机制,有效解决了传统方法对频域信息关注不足的问题,显著提升了图像恢复质量。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 147

Python爬虫实战:爬取Bilibili和YouTube视频、弹幕和评论

随着视频内容平台的爆发式增长,视频网站成为了人们获取信息、娱乐和知识的重要渠道。在这些平台上,视频、弹幕和评论数据可以为我们提供重要的信息,帮助我们了解用户的行为、视频的受欢迎程度以及内容的互动情况。本篇文章将带你实现一个Python爬虫,用来爬取Bilibili和YouTube上的视频、弹幕、评论等数据。我们将详细介绍爬虫的实现过程,使用最新的Python技术,并且会提供完整的代码。Bilibili网站提供了多种方式来获取视频数据,最直接的方式是通过其开放的API接口来获取视频、弹幕和评论等数据。

2201_76125261的博客 1775

Sermant框架下的服务治理插件快速开发及使用指南

Sermant是基于Java字节码增强技术的云原生无代理服务网格,它具有非侵入、插件化和高性能的特点。通过Sermant核心框架,可以很容易的开发用于各种服务治理用途的插件,包括负载均衡、流量控制、标签路由、标签透传等。在本文中,我们通过案例讲解,说明如何基于Sermant开发一个接口统计调用时长的插件,并用于生产环境的部署。

hwcloud_OS的博客 409

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Sermant 的整体流程学习梳理

本文主要对Sermant运行的整体流程进行了学习梳理,分析了Sermant的入口执行流程、SPI加载过程等内容,供Sermant开发者参考。

hwcloud_OS的博客 1050

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

探讨微服务治理场景中,Sermant Backend如何管理插件动态配置

新增的Backend的可视化配置管理功能给Sermant的微服务动态治理带来了极大的便利性,Backend从观测变成了观测和管控一体化的平台,提升了Sermant使用者的服务治理体验。

华为云官方博客 2310

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

本文从开发者视角来看核心设计中的插件机制和类加载器架构,在实战中从基础能力开发,到进阶使用统一动态配置能力、统一日志能力等一步步完成插件开发。

华为云官方博客 730

Sermant运行流程学习笔记,速来抄作业

本文主要对Sermant运行的整体流程进行了学习梳理,分析了Sermant的入口执行流程、SPI加载过程等内容,供Sermant开发者参考。

华为云官方博客 2174

Sermant热插拔能力在故障注入场景的实践

本篇文章将通过故障注入场景,来展示Sermant热插拔能力的应用价值。

华为云官方博客 1854

开发者能力机制解析,玩转Sermant开发

本文将详细解析Sermant的插件加载和调度机制,以及开发者中常用到的统一动态配置和统一日志解析能力,带领开发者深入浅出地掌握Sermant的底层机制。

hwcloud_OS的博客 213

正式成为CNCF的一员,我们是如何做到的 | Sermant 2024年度总结

Sermant在经历了2022年的萌芽期和2023年的快速发展后,2024年迎来了重要的突破——Sermant正式加入了CNCF(云原生计算基金会),成为云原生开源生态中的重要成员。

hwcloud_OS的博客 828

Sermant Backend配置管理功能在微服务治理场景中的应用

Sermant中的动态配置在实现微服务的多样化治理中扮演着重要的角色,是实现微服务治理的重要手段之一。在2.0.0版本之后新增的Backend的可视化配置管理功能给Sermant的微服务动态治理带来了极大的便利性,Backend从观测变成了观测和管控一体化的平台,提升了Sermant使用者的服务治理体验。

hwcloud_OS的博客 907

新特性速览! Sermant 2.1.0版本重磅发布

9月底,Sermant社区正式发布了2.1.0 Release版本,本次版本更新为大家带来了许多新的重要特性。在此前版本xDS协议支持的基础上,2.1.0版本新增了路由和负载均衡的CRD的支持,同时路由插件也适配了当前的xDS协议。此外新增了RocketMQ灰度发布插件,首次支持了消息队列的灰度发布;用户体验上,我们对Backend的Agent管理功能再次进行了完善,现在可以直接在Backend上直接对插件进行动态热插拔。

hwcloud_OS的博客 1060

Sermant在异地多活场景下的实践

对于一个软件系统,我们希望当系统出现故障时仍然可以正常对外提供服务,软件系统的这种特性称之为高可用, 异地多活架构便是用来解决高可用问题的。最早的系统架构一般为单机架构,当数据库出现故障时,可能会导致业务长时间中断。为了解决这一问题,数据库发展为由主库和从库组成,主库负责读和写操作,从库只提供读操作,主数据库的数据会实时同步至从数据库保持数据的一致性和完整性。当主库出现问题时,从库切换为主库继续工作。不过,这些服务都部署在同一机房甚至是同一个机柜,当机房出现故障后,系统仍然不能正常对外提供服务。

sdgfafg_25的博客 1080
上一篇: HDC 2024 | 华为云云原生开源+OpenHarmony,加速开发者应用创新
下一篇: 华为云发起,openGemini正式成为CNCF官方项目!
华为云开源
博客等级 码龄4年 281粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值