我正在研究一种分布式算法,并决定使用Akka在各种机器上扩展它。机器需要非常频繁地交换消息,并且这些消息引用了每台机器上存在的一些不可变的对象。因此,在某种意义上“压缩”消息似乎是明智的,因为共享,复制的对象不应在消息中序列化。这不仅可以节省网络带宽,而且还可以避免在反序列化消息时在接收方创建重复的对象。
现在,我的问题是如何正确执行此操作。到目前为止,我可以想到两种选择:
在“业务层”上进行处理,即,将我的原始消息对象转换为某些参考对象,这些参考对象用某些符号引用代替对共享的复制对象的引用。然后,我将发送那些参考对象,而不是原始消息。可以将其视为用URL替换一些实际的Web资源。就编码而言,这样做似乎很简单,但同时也将序列化问题拖到了实际的业务逻辑中。
编写了解共享,复制对象的自定义序列化程序。就我而言,此解决方案可以通过序列化程序将复制的共享对象作为全局状态引入actor系统。但是,Akka文档没有描述如何以编程方式添加自定义序列化程序,这对于与序列化程序编织共享对象是必要的。另外,我可以想象有两个原因,为什么不鼓励这种解决方案。所以,我在这里问。
非常感谢!