sle*_*ica 12 publish-subscribe mongodb redis
我正在使用MongoDB支持实时的websocket服务器应用程序.
客户群不断增长,单线程性能已不再足够.我需要一个pub/sub层来跨线程分发消息.
我通常会选择Redis,但由于应用程序已经使用了MongoDB,我可以使用tailable游标来避免依赖.但是,我担心性能.
对于pub/sub架构,MongoDB的游标性能与Redis相比如何?
Did*_*zia 24
实际上,他们是非常不同的野兽.
MongoDB tailable游标有点像队列.它可以使用上限集合,因此您不必显式删除集合中的项目.它非常有效,但请记住,MongoDB将在每次写入操作时锁定整个集合(实际上是数据库),因此它限制了可伸缩性.另一个可扩展性限制是连接数.每个客户端连接都将在mongod服务器(或mongos)中添加连接线程.
仍然可以预期每秒数万件物品没有重大问题,这对于一系列应用来说已经足够了.
另一方面,Redis通常可以同时处理更多连接,因为每个连接都不会创建一个线程(Redis是一个单线程事件循环).它还具有极高的CPU效率,因为它不会在所有项目中排队.使用Redis pub/sub,项目将在与发布相同的事件循环迭代中传播到订阅者.这些项目甚至没有存储在内存中,Redis甚至没有一个索引可以维护.它们仅从套接字缓冲区中检索,以便在另一个套接字缓冲区中推送.
但是,由于没有排队,因此根本无法保证发送Redis发布/订阅消息.如果订阅者在发布消息时关闭,则该订阅者将丢失该消息.
使用Redis,您可以在单个核心上每秒获得数十万个项目,特别是如果您使用流水线操作和多个发布客户端.
| 归档时间: |
|
| 查看次数: |
3801 次 |
| 最近记录: |