MSE 结合 Dragonwell,让 Java Agent 更好用

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
应用实时监控服务-应用监控,每月50GB免费额度
简介: 阿里云微服务引擎(MSE)通过 Java Agent/SDK/Service Mesh 等方式,给您带来零接入成本、无侵入的、全生命周期的微服务治理能力。

作者:卜比


背景


随着越来越多的云原生微服务应用的大规模部署,大家对微服务治理的能力需求越来越长。


Java Agent 技术能够让业务专注于业务逻辑,与此同时,中间件通过 Java Agent 支持无侵入修改程序行为,提供微服务治理能力。


此外,Java Agent 支持通过环境变量的方式注入,中间件、云产品团队可以通过设置环境变量来支持。


所以目前基于 Java Agent 实现的云原生可观测、微服务治理能力被越来越多的采用。比如开源的 Skywalking、OpenTelemetry,商业化的阿里云 MSE 等,都支持 Java Agent 接入。


问题


我们以 MSE 微服务 demo 为例。


https://github.com/aliyun/alibabacloud-microservice-demo/tree/master/mse-simple-demo/helm/mse-simple-demo


先在一个 Kubernetes 集群中安装好 ack-onepilot,然后部署上述 demo。


先可以访问 demo 中的 gateway,验证下可以正常工作:


1.png


您也可以参考 MSE 的帮助文档体验下全链路灰度等微服务治理能力。


  https://mp.weixin.qq.com/s/95WZHL0HhFtzxMlfK-8jkg


我们登陆容器时,就能看到注入的 agent:


2.png


但这样的结果是容器中所有的 JVM,都会挂载 Agent。


比如 java -version:


3.png


比如 jstack:


4.png


1. java/jps/jstack/jcmd 等 JDK 自带的问题排查工具,都会去从环境变量加载 Java Agent


2. 因为 Java Agent 是在 JVM 初期加载的,所以 Java Agent 会先耗费 6-7s 来加载 agent 逻辑。


3. 但作为 JDK 工具,其实没有任何业务逻辑,不需要微服务治理能力。可以不用加载 Java Agent 的。


我们设想下这个场景:线上应用出现问题了,运维同学要抓现场,上去就想 jstack 拉一下 stacktrace 信息。


结果先要加载 java agent,不但浪费了 CPU 和内存,更容易错过问题排查的现场。


但,一边要通过环境变量无侵入注入 Java Agent,一边又要不在某些进程内注入。看起来无解了?


MSE 携手 Dragonwell,让微服务治理更友好


首先,注入 Java Agent 与否,是 JVM 确定的。我们只需要修改 JVM 即可。


在这一点上,Dragonwell 团队有着丰富的经验。


其次,我们看下 JVM 的行为,现有的开源行为如下:


  • JDK 相关命令,都会从 JAVA_TOOL_OPTIONS 加载 Java Agent
  • OpenJDK9 之后,引入了 JDK_JAVA_OPTIONS,这个环境变量只会被java命令使用。jps/jstack 等命令不会加载。
  • 有些 JDK 厂商,会有自己的扩展环境变量, 比如,IBM 会读取 IBM_JAVA_OPTIONS,开源后的 OpenJ9 开始使用 OPENJ9_JAVA_OPTIONS,Oracle/OpenJDK 使用_JAVA_OPTIONS。 


本来 JDK_JAVA_OPTIONS 能够很好的满足需求,但作为“你发任你发,我用 Java8”的业务开发同学,稳定为先,所以 Java 8 是一定要支持的。


经过和 Dragonwell 的讨(si)论(bi),确定了如下修改:


  • DRAGONWELL_JAVA_OPTIONS,和 IBM_JAVA_OPTIONS类似,设置某些只用于 Dragonwell 的 Java 参数。
  • DRAGONWELL_JAVA_TOOL_OPTIONS_JDK_ONLY,和 JDK_JAVA_OPTIONS 类似。 


如果 DRAGONWELL_JAVA_TOOL_OPTIONS_JDK_ONLY=true,则 JAVA_TOOL_OPTIONS 只会被 java 命令加载。jps/jstack 不会加载环境变量、不会加载 Java Agent。


经过上面的改造,就可以做到只对业务 Java 进程加载 Java Agent。同时不影响 jps/jstack 等 JDK 自带的运维命令。


当然,Dragonwell 作为开源项目,讨论的整体流程都是在 GitHub Issue 上完成的,欢迎围观、吃瓜、吐槽:


https://github.com/alibaba/dragonwell8/issues/330#issuecomment-1138083844


最终效果


让我们使用最新的 Dragonwell 版本,跑一下业务应用,模拟一下运维场景:


5.png


可以看到,JDK 运维工具不会加载 Java Agent 了。


业务进程加载了 Java Agent(您也可以在 MSE 微服务治理控制台上看到应用);也避免了 Java Agent 影响了  java -version 等运维脚本。


MSE 给你带来更强大的微服务治理能力


阿里云微服务引擎(MSE)通过 Java Agent/SDK/Service Mesh 等方式,给您带来零接入成本、无侵入的、全生命周期的微服务治理能力。


通过 MSE 微服务治理,不用改一行代码即可享受全链路灰度、无损上下线、服务测试等微服务治理能力,为您的开发、测试、上线、运维保驾护航。


MSE 云原生网关预付费、MSE 注册配置预付费首购 8 折,首购 1 年及以上 7 折更多 MSE 特性,欢迎进钉钉群交流


640.png

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
Arthas 监控 Java
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
本文介绍了阿里云 Java Agent 4.x 版本在基于 OTel Java Agent 二次开发过程中的实践与思考,并重点从功能、性能、稳定性、兼容性四个方面介绍了所做的工作。同时也介绍了阿里云可观测团队积极参与开源建设取得的丰厚成果。
279 6
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
|
6月前
|
Java 关系型数据库 MySQL
GraalVM 静态编译下 OTel Java Agent 的自动增强方案与实现
在 2024 OpenTelemetry Community Day 会议中,阿里云可观测工程师张乎兴(望陶)和饶子昊(铖朴)为大家带来了《GraalVM 静态编译下 OTel Java Agent 的自动增强方案与实现》的演讲分享,介绍阿里云在相关领域的探索方案,本文是相关分享对应的中文整理。
286 19
|
5月前
|
数据采集 人工智能 监控
【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集
【Azure 应用程序见解】Application Insights Java Agent 3.1.0的使用实验,通过修改单个URL的采样率来减少请求及依赖项的数据采集
|
8月前
|
监控 Java Maven
揭秘Java Agent技术:解锁Java工具开发的新境界
作为JDK提供的关键机制,Java Agent技术不仅为Java工具的开发者提供了一个强大的框架,还为性能监控、故障诊断和动态代码修改等领域带来了革命性的变革。本文旨在全面解析Java Agent技术的应用场景以及实现方式,特别是静态加载模式和动态加载模式这两种关键模式。
1513 0
|
8月前
|
监控 Java 数据库
Zabbix【部署 05】 Docker部署Zabbix Server Agent Agent2 Web interface及 Java-Gate-Way(详细启动脚本及踩坑记录)不定时更新
Zabbix【部署 05】 Docker部署Zabbix Server Agent Agent2 Web interface及 Java-Gate-Way(详细启动脚本及踩坑记录)不定时更新
618 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
Gemini 2.0:谷歌推出的原生多模态输入输出 + Agent 为核心的 AI 模型
谷歌最新推出的Gemini 2.0是一款原生多模态输入输出的AI模型,以Agent技术为核心,支持多种数据类型的输入与输出,具备强大的性能和多语言音频输出能力。本文将详细介绍Gemini 2.0的主要功能、技术原理及其在多个领域的应用场景。
160 20
Gemini 2.0:谷歌推出的原生多模态输入输出 + Agent 为核心的 AI 模型
|
1月前
|
人工智能 API 语音技术
TEN Agent:开源的实时多模态 AI 代理框架,支持语音、文本和图像的实时通信交互
TEN Agent 是一个开源的实时多模态 AI 代理框架,集成了 OpenAI Realtime API 和 RTC 技术,支持语音、文本和图像的多模态交互,具备实时通信、模块化设计和多语言支持等功能,适用于智能客服、实时语音助手等多种场景。
155 15
TEN Agent:开源的实时多模态 AI 代理框架,支持语音、文本和图像的实时通信交互
|
1月前
|
人工智能 自然语言处理 前端开发
Director:构建视频智能体的 AI 框架,用自然语言执行搜索、编辑、合成和生成等复杂视频任务
Director 是一个构建视频智能体的 AI 框架,用户可以通过自然语言命令执行复杂的视频任务,如搜索、编辑、合成和生成视频内容。该框架基于 VideoDB 的“视频即数据”基础设施,集成了多个预构建的视频代理和 AI API,支持高度定制化,适用于开发者和创作者。
96 9
Director:构建视频智能体的 AI 框架,用自然语言执行搜索、编辑、合成和生成等复杂视频任务
|
29天前
|
机器学习/深度学习 人工智能 算法
Meta Motivo:Meta 推出能够控制数字智能体动作的 AI 模型,提升元宇宙互动体验的真实性
Meta Motivo 是 Meta 公司推出的 AI 模型,旨在控制数字智能体的全身动作,提升元宇宙体验的真实性。该模型通过无监督强化学习算法,能够实现零样本学习、行为模仿与生成、多任务泛化等功能,适用于机器人控制、虚拟助手、游戏角色动画等多个应用场景。
62 4
Meta Motivo:Meta 推出能够控制数字智能体动作的 AI 模型,提升元宇宙互动体验的真实性
|
1月前
|
人工智能 自然语言处理 JavaScript
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
Agent-E 是一个基于 AutoGen 代理框架构建的智能自动化系统,专注于浏览器内的自动化操作。它能够执行多种复杂任务,如填写表单、搜索和排序电商产品、定位网页内容等,从而提高在线效率,减少重复劳动。本文将详细介绍 Agent-E 的功能、技术原理以及如何运行该系统。
98 5
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统

相关产品

  • 微服务引擎