【发布时间】:2011-06-20 07:01:40
【问题描述】:
我非常喜欢通过 Java 的 RMI 调用远程方法的简单性,但是它的序列化格式的冗长是一个主要的嗡嗡声(是的,我已经进行了基准测试,谢谢)。似乎 Sun 的架构师在设计 RPC(松散地说)组件时做了明显正确的事情,但在实现序列化时却遭遇了巨大的失败。
相反,似乎 Thrift、Avro、Kryo(尤其是)、协议缓冲区(不是那么多)等的架构师在设计序列化格式时通常做了明显正确的事情,但要么不提供 RPC 机制,提供一种不必要的复杂(或不成熟)的机制,或者提供一种比调用远程方法更适合数据传输的机制(对于许多目的来说非常好,但不是我想要的)。
那么,显而易见的问题是:我如何才能使用 RMI 的方法调用的可爱性,同时将上述库之一用于有线协议?这可能不需要大量工作吗?我是否过于严厉地评估上述库之一(NB 一般来说,我非常不喜欢代码生成;我有点不喜欢不必要的注释,更不喜欢 XML 配置;任何类型的“bean”都会使我畏缩——我不需要重量;理想情况下,我只想为我的远程对象实现一个接口,就像 RMI 一样。
【问题讨论】:
-
我认为您提到的许多库(但不是 Kryo)的主要挑战是它们需要定义模式,这使得通用使用任何 POJO RPC 变得困难或不可能。
-
快速序列化是 JDK 序列化兼容的重新实现。不过,不确定是否有必要的钩子来替换 ObjectXXXputStream 类。 github.com/RuedigerMoeller/fast-serialization
标签: java serialization rmi rpc