线上解决方案

线上解决方案

置顶
Java线上解决方案系列目录

Java线上解决方案系列目录

从事游戏行业多年,一直使用Java做开发,不可避免的就经历了许多,其中也踩过不少坑。最早的游戏是不支持热更的,导致出了BUG就必须停服;后续项目引入热更,但也不是特别完美,再往后热更升级,引入第二版:动态加载子类热更;受第二版热更方式启发,后来又加入了线上动态代码执行,主要用于规整数据

2021-11-09
11,923 7
像本服一样调用远程代码(优化版)

像本服一样调用远程代码(优化版)

在上一篇 像本服一样调用远程代码(跨进程远程方法直调)中,我们已经详细讲解了跨服方法调用的原理。但示例代码里有一些实现方式是自己实现的方式,相对比较原始。这里对其中2点的实现进行优化优化1:本地方法直调改为reflectam

2022-04-30
3,518 1
多线程并发解决方案:单线程执行解决复杂的并发场景

多线程并发解决方案:单线程执行解决复杂的并发场景

在JAVA体系中,多线程是一个比较重要的模块,同时也是一个饱受争议的模块。 一方面,合理利用多线程确实能提高计算性能,确保程序合理运行。但并非所有人都能深入理解多线程,可能不恰当的使用反而导致业务复杂,难以维护,bug滋生,这在业务复杂的环境下尤为明显。

2022-03-20
4,865 0
Arthas原理:Arthas的命令分类及原理

Arthas原理:Arthas的命令分类及原理

在[Arthas原理:理解ClassLoader](//yeas.fun/archives/arthas-classloader)一文中,我们首先介绍了代码隔离的概念,并讲解了代码隔离的基础:ClassLoader; 在[Arthas原理:如何做到与应用代码隔离?](//yeas.fun/archives/arthas-isolation)一文中,我们介绍了利用ClassLoader实现代码隔离的原理,并讲解了Arthas与应用之间的代码在代码隔离的基础上如何进行代码互调的。

2022-02-26
10,918 3
Arthas原理:如何做到与应用代码隔离?

Arthas原理:如何做到与应用代码隔离?

代码隔离,也就是arthas所保证的:对业务代码无侵入,目标应用无需重启也无需感知arthas的存在。 那首先我们来讲下:arthas为什么要进行代码隔离? 我们都知道arthas是一个开源框架,它是在应用正在运行的时候,打通应用与arthas的连接通路。这就对arthas提出一个需求:arthas不能影响应用运行的代码,不能因为arthas的连接而导致业务逻辑的运行不正常。 同样的,应用里面的代码也不能影响arthas的正常工作。即:arthas的代码要和应用代码进行隔离,从机制上保证双方的互不干扰。

2022-01-30
13,449 5
Arthas原理:理解ClassLoader

Arthas原理:理解ClassLoader

阿里的arthas一经推出就大受好评,主要原因就是它提供了一套线上问题的解决方案,比如可以在线查看服务器状态;可以支持热更新,原理类似我们之前所讲的[JAVA热更新1:Agent方式热更](//yeas.fun/archives/hotswap-agent) ; 它还可以支持对线上的代码跟踪执行情况,打印执行参数和返回参数等功能。功能那是异常强大,关键的一点是它对应用是无侵入的,也就是不影响到目标应用的业务逻辑。

2022-01-22
10,137 1
像本服一样调用远程代码(跨进程远程RPC方法直调)

像本服一样调用远程代码(跨进程远程RPC方法直调)

想要调用远程方法,传统的方式需要以下几个步骤: 需要先判断是否是本服请求。如果是本服,则执行本服逻辑;如果是跨服,则需要把请求发到对应服务器上; 跨服务之间的消息通信; 消息发送到跨服之后,如何根据参数来调用对应的代码?

2021-12-18
4,264 0
JAVA不停服执行代码(动态代码执行)

JAVA不停服执行代码(动态代码执行)

在项目上线之后,不可避免的会遇到出BUG的情况。之前的做法可能是提前写好一段代码,然后通过后台接口来进行调用。但这种方式必须得提前写好规整逻辑,但不能覆盖所有情况。因此我们就期望直接在线上执行一段代码,来进行我们业务数据的规整。这就是JAVA不停服在线上执行代码。

2021-11-20
6,360 5
JAVA热更新2:动态加载子类热更

JAVA热更新2:动态加载子类热更

上一篇《JAVA热更新1:Agent热更》我们讲解了JDK提供的Agent方式来实现代码不停服更新,受限于JDK的Agent一些限制,这种方式无法实现以下功能:只能修改方法体,不能变更方法签名、不能增加和删除方法/类的成员属性。对于Instrumentation和JVM的agent...

2021-11-05
3,131 1
JAVA热更新1:Agent方式热更

JAVA热更新1:Agent方式热更

线上问题的解决一直是java程序员头疼的一个问题。有的应用很敏感,例如游戏行业,可能需要做到1个月都不能停服,那线上问题出了问题怎么办呢?谁也不能保证更新线上的逻辑百分百不出问题,这就需要我们在不停应用的情况下在线解决。随着技术的逐渐成熟,java社区也逐渐提供了一些线上解决方案。