该用哪一个消息队列呢?

业务系统中的核心业务数据变化比较少,但是读取量却巨大无比,目前不超过30W条数据,但是每日的读取量都在3000W+以上,整个业务数据直接使用Java序列化缓存起来占用的内存总量不超过175MB,如果采用Redis/memcache等集中式缓存的话,对存储空间和并发量来讲都可以接受,只是需要实现非常可靠的高可用性,至少要双机(主备、双写等方式都可以接受),并且要有良好的单点失败处理机制(如果Cache挂5秒,连接Cache使用1秒超时的话估计系统整个会被拖垮)。

鉴于这样的特征,我考虑使用本地缓存的方式来存储这些最核心的数据,给WEB前端系统提供最可靠、最高效的支持。缓存直接分散到各WEB机器上去了,可靠性立马就上来了,由于是本地JVM内的数据,用Hash存储的话,性能那也是Redis/memcache之流没法比了。

接下来需要决绝的问题就是如果同步更新缓存这个问题了。

有好些可以选择的方案:

(1)采用OSCache之类的JGroup方式来组播方式更新;

(2)定时加载DB中有变化的那一部分数据;

(3)使用支持发布/订阅机制的消息队列等;

(4)采用Linkedin的Databus的方式,来直接解析DB的binlog来更新;

个人倾向于使用方案(3),不光是为了处理这个业务,对于我等互联网业务来讲,要使用异步解耦合的地方实在是多,有了消息队列这个大刀,很多地方都可以砍一砍了。只是,消息队列也实在是多,比如RabbitMq、ActiveMq、Memcacheq、ZeroMq、MSMQ、Redis、Kafka等等,对于Kafka我是情有独钟的,一直也想使用它做实时的日志分析的队列,只是很遗憾,业务系统中采用的消息队列要求是不能丢数据、最好有顺序、支持持久化存储消息、可用性要很好,它有点不满足这个要求(最新的0.8版本支持这些特性),其中Redis、ZeroMQ也被淘汰了,只剩下RabbitMq、ActiveMq这个2个重量级产品和相对较为轻量的Memcacheq、MSMQ了。

看来要把这几款产品拉出来溜一溜了!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值