【发布时间】:2014-09-22 15:18:53
【问题描述】:
为了简单起见,假设我正在克隆 twitter(我不是)。所以每个用户都可以关注其他用户,并被其他用户关注。对于您关注的每个用户,您都会收到他发送的所有推文。一切都存储在数据存储中(无论是 NoSQL 解决方案还是分片关系数据库)。
但是,当用户在线时,您认为让他们通过 JMS 接收推文而不是轮询数据库并检索新推文是否合适:
- 当用户注册(或登录)时,会创建一个 JMS 主题,以他(或他的 id)命名
- 当用户登录时,他订阅了他关注的每个用户的 JMS 主题
- 会话范围的对象(每个用户)充当 JMS 消息侦听器
- 所有收到的消息都存储在会话中(内存中)
- 通过会话范围对象的 ajax 轮询更新 UI
- 当用户注销或会话超时时,消息监听器被销毁
据称,这背后的想法是为了提高性能 - 即不要过于频繁地查询数据存储,而是将即时的东西缓存在内存中。
整个事情当然希望在集群中运行,并且是可扩展的。
但我不确定:
- 这是否真的值得(在性能和可扩展性方面)
- JMS 是否不会增加不必要的开销,这等于查询数据存储(从而使整个复杂性变得无用)
在某个时间点(当它功能正常时)我会做一些基准测试,但我想听听一些初步意见。
【问题讨论】:
标签: java architecture jms scalability messaging