abh*_*dtu 16 scalability real-time publish-subscribe rabbitmq apache-kafka
我有一个用例,需要按照发布/订阅消息传递模式在服务器和客户端之间进行实时通信.生产者将是java,节点等服务器,客户端将是 - java桌面应用程序,移动应用程序(android/ios),浏览器(javascript).
我已经探讨了下面讨论的许多选项,但我无法提出强大的可扩展解决方案.
使用案例:服务器将发布各种主题的通知/消息,订阅一组主题的所有客户端(java/js/ios)将实时获取这些消息.
我按照3种方法解决了这个问题1> socketIo/socketcluster 2>使用mosquitto/rabbitmq作为代理探索了mqtt协议.3>探索卡夫卡
主要目标是使该架构具有高度可扩展性,不仅可以同时拥有超过百万个客户端连接,而且每秒可以发布和消耗超过百万条消息.
第一种方法很简单,但它可以工作,但webSocket不是可扩展的解决方案.
第二种方法可行,但是rabbitmq将创建大量队列(百万个客户端的百万个队列),因为它为每个连接到它的客户端维护队列,而且RabbitMq没有高消息发布和消耗率,加上假设我们有一个集群RabbitMQ的节点那么只有一个节点用于处理请求和其他的用于高可用性,但不平行的消耗.
第三,我探索了kafka,它以我的基准着称,我使用kafka的高级java api在java中创建客户端,可以用来订阅kafka主题,并且发布到该主题的任何消息都可以实时传递给客户端.
所以我的问题是使用kafka客户端进行实时推送通知有多好,其中所有的Java桌面应用程序(可能是一百万)将包含这个kafka java客户端sdk并将订阅某些主题,在这里我对待每个客户端作为消费者群体.
而且,这里一个主要问题是,这卡夫卡的客户是规模大,由于其阶依赖,因此使用此客户端Android将不会是一个很好的选择,也是我不认为它会奏效.
MQTT擅长在这里,因为它有针对Android,JAVA,IOS等官方phao客户
此外,我还没有在网上使用kafka看到用于百万消费者的发布/订阅消息传递的示例,大多数人正在将其用于数据管道,例如:实时日志处理,向HDFS提供数据,分析引擎等,流处理.
主要问题是我如何使用mqtt协议(适用于android/ios/web/iot)和kafka作为消息代理(具有较高的发布/订阅率)并为此问题提出可扩展的解决方案.
我的用例在某种程度上也类似于uber,其中有数百万的android/ios设备(客户端),我们实际上可以看到我们在地图上所有汽车的实时移动,有没有人知道后面的架构是什么这些实时跟踪汽车.
归档时间: |
|
查看次数: |
8502 次 |
最近记录: |