搞了一个更完善的javaagent项目结构

本文探讨了如何使用javaagent解决多环境服务部署的隔离问题,详细阐述了javaagent在mq、dubbo、xxl-job和runner线程控制的隔离策略,并介绍了如何优雅地实现javaagent,包括不侵入宿主应用、可配置性、日志统一和自定义bean注入。文章最后解构了一个优雅的javaagent项目结构,展示了其实现的各个关键点和打包过程。
摘要由CSDN通过智能技术生成

一、啥是javaagent?

在日常的开发实践中,javaagent的应用场景可谓是非常广泛了,无论是在链路监控的APM中,还是在诊断工具的Arthas中,亦或是在处理log4j2漏洞的”疫苗“中,都能看到javaagent的身影,并发挥着重要的作用。

二、遇到了啥问题需要用javaagnent来解决呢?

pre.多服务、多环境的部署的现状

  • 多环境不是指devfatuatpro这样的多环境,而是 fat 中包含了 fat1fat2fat3 等多套环境
  • 不同的业务中,如studyplay,它们所部署的fat环境数量是不确定的
  • 同一个业务中,每套fat环境部署的服务也不一定是一致的,如study业务中的fat-3中仅部署了appA,没有部署appB

ps:fat环境共用一个注册中心,每个服务(如appA)数据库也是只有一个,apollo配置亦是如此

1.如此部署服务会导致什么问题?

一些基于或类似于注册中心的调用可能会出现不可控的情况,示意如下:

appC去调用appA的时候,可能会调用到3套环境中的其中一个,是不可控。 为了解决这个问题,就需要对各个环境的调用进行隔离。

ps:更详细的可背景以参考之前的文章:一种多业务下多环境的dubbo隔离方案

2.需要隔离的“调用”有哪些?

常用的基于或者类似于注册中心的调用有以下这些:

  • mq
  • dubbo
  • xxl-job
  • runner线程
  • 其它自研的框架调用

3.能“抓老鼠”就是好猫?

能实现隔离功能就行了嘛?不一定!除了解决基本的隔离的基本问题外,还期待:

a.可配置

通过配置文件进行配置,支持统一管理,不需要跨越多个平台来配置。

b.不影响宿主应用的正常功能使用

这个属于底线要求了,不能影响正常的业务功能逻辑。

c.不侵入代码提交

这并不是一个业务需求,并且是不需要上线的,因此不宜提交。

d.兼容多种运行场景

目前存在的运行方式有:

  • 使用springboot的打包插件,打包成一个fatjar来启动(下称jar in jar形式)
  • 指定class文件启动,不打包成jar包(下称 非jar in jar形式)

ps:若有一种运行环境不支持,或一个服务不配合,都无法达到完整的隔离

三、javaagent是怎么实现环境隔离的?

1.首先来分析下能不能实现隔离

a.mq隔离

先给个环境隔离的示意图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听铃的声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值