我想这是不可能的。但是我正在寻找最好的方法来分离我的服务的不同层,但是能够快速地访问层,或者没有IPC/RMI的开销。
我使用的主要编程语言是java,但如果需要的话可以使用C++。
我们现在拥有的是一个承载数据库和访问控制的服务器。我们使用RMI对消费者进行数据请求。这很慢,而且不太适应。
我们需要目前还没有的性能和可伸缩性。
我们正在考虑的是使用一个以数据库为基础的分层体系结构,在其之上使用访问控制以及通知总线来通知客户数据库中的更改。主要的问题是我们希望避免/或最小化的通信开销。
是否有任何魔法线程可以在两个上下文中运行(切换上下文)并以这种方式共享信息。我知道简短的答案是否定的,但有什么选择呢?
更新
我们的基础层将提供一个API,可以用来创建将运行在上面的插件。所以我们没有固定的收藏家/消费者。我们可以有5-6个收集器运行和相同数量的消费者。
我们可以有多达1000名消费者。
发布于 2015-06-05 12:31:53
我的第一个建议是,您应该购买一本关于构建可伸缩应用程序的书(或在线教程),因为您似乎很迷茫。
在进程之间共享线程在任何级别上都没有意义--这是没有意义的,但是您可以共享线程访问的数据,这可能是您想要的。
最快的方法将是基于C的IPC (例如,共享内存、信号量等:Shmget)。您说您希望避免IPC的开销,但实际上,它不会比这更快。
但是为什么你想要多个进程呢?如果您担心进程之间通信的开销,那么只需将线程放在一个进程中即可?没有理由您的不同层必须在不同的过程中。
但是无论如何,我不相信你最初关于RMI慢和不缩放的说法是完全正确的。如果没有缩放,您可能没有使用正确的框架。也许您有一个问题,就是服务器上只有一个RMI端点。您是否考虑过具有无状态会话bean的J2EE系统?
不知道自己的需求,很难说。
发布于 2015-06-05 12:48:48
如果您的目标是通知用户,则应该考虑发布/订阅消息传递(pub/sub)。有许多中间件供应商提供这种架构,尽管大多数在生产场景中都是昂贵的。对于开放源码,请查看http://redis.io/topics/pubsub。(无从属关系)
https://stackoverflow.com/questions/30666329
复制相似问题