我被要求为我的组织创建一个简单的警报消息系统。我一直在研究redis,我想我是否应该用它作为通信引擎来构建应用程序。
我的要求是:
警报生成器必须基于Web
警报消息必须能够发送到网络上的所有计算机或计算机的任何子集
计算机客户端必须向系统确认它已收到消息
服务器必须跨数据中心群集。
必须将消息快速传递到客户端
必须在Windows堆栈上运行
我正在考虑为编写器设置一个带有asp.net页面的web场,并将sql server作为数据存储库。我还计划在服务器场上设置一系列wcf端点,以处理服务器间通信和服务器-客户端通信。
服务器间通信将用于协调和分发客户端列表以接收警报,其中服务器-客户端通信将用于向客户端计算机获取实际警报。
我越是考虑过这种方法,就越意识到需要多少运动部件。(从每个客户端发送到服务器的心跳,从所有服务器发送到彼此的心跳…)
自从阅读了redis,我想知道我是否可以删除wcf端点并使用redis的pub-sub功能来处理消息分发?redis是否跨集群中的所有节点分发发布事件?我可以让我的所有客户端应用程序直接订阅redis数据库吗?这些连接在集群上是否平衡?

最佳答案

redis集群还很年轻,对redis来说并不是很大的优势。主要用于redis节点间的数据分片。redis sentinel主要用于管理一个主服务器(用于写入)和许多从服务器(用于读取)。在客户端之间平衡负载应该是手动的。
redis的分区容限实际上是不好的(但对其他的分区来说是很好的)。
你需要可靠的交货吗?你需要重新发送信息吗?redis不会这样做,如果您没有订阅,那么您将不会收到消息,也不会帮助检查哪些消息已经发送(或者您在redis上使用enterprise集成模式实现自己的系统)。而且redis不耐用,崩溃会导致数据丢失。
对于集群上的发布订阅,我建议您看看ApacheKafka,它非常受集群技术的欢迎,特别是对于大数据。
http://kafka.apache.org

10-08 04:51