java - 需要通用/动态序列化/编码,类似于 Terracotta

标签 java serialization jvm marshalling terracotta

问题:我使用的软件 Lift 有“用户 session ”,可以在其中放置任何类型的对象,这些对象在用户请求之间保留(带有 GC 超时)。虽然它易于使用且功能强大,但它有一个主要缺点:对象不可序列化,因此您无法将它们分发到其他服务器实例以实现高可用性。

是否有一个 API/工具可以获取随机对象,通过反射分析其结构,创建一个可以提取所有对象数据的编码器/解码器,并以可用于分发的格式返回它将对象传递给其他 JVM。编码器/解码器本身应该是可序列化的。应该有一种方法来明确定义一些数据应该被忽略,例如使用 transient ,并且还应该能够认识到一些引用的对象实际上是必须以特殊方式处理的系统对象(单例)。理想情况下,它应该是一个迭代过程,因此您可以限制要编码的对象的“大小”。

这有点类似于Terracotta的做法,只不过我想实现自己的传输和后端,并且我不想使用他们的“增强器”,因为限制包的数量会非常困难要修改的类,因此必须在运行时修改我的所有类以防万一,这将非常昂贵。

编辑:严格来说,拥有自己的传输和后端并不是绝对必须的,但 Terracotta 的服务器是单点故障,我想要一个完全分布式的系统,我可以在其中强制最低复制级别,以及我可以将请求转发到拥有用户 session 副本的服务器。

最佳答案

虽然这不是我想要的,但我发现至少有一种 Terracotta 的替代品,叫做 XSTM它们似乎有相似的概念,同时更具“可扩展性”。

关于java - 需要通用/动态序列化/编码,类似于 Terracotta,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5847219/

相关文章:

java - 什么是 transient 和 volatile 修饰符?

java - 检索传递给 JVM 的主类/jar 文件名

Java,如何找出哪个类或方法使用了大量内存?

java - java中调用sleep会重新加载寄存器中缓存的值?

java - 如果 wait() 抛出 InterruptedException,线程是否等待直到它获取对象的监视器?

java - 如何在多条线交叉的矩形内找到区域?

c# - DataContractJsonSerializerOperationFormatter 不反序列化使用 JSON.NET

java - 为什么 java.awt.image.BufferedImage 不可序列化?

java - Maven 程序集 : NoClassDefFoundError

java - 使用环境变量覆盖 application.properties 中的变量的 Spring 怪异行为