是否可以在节点集群上水平扩展Node-RED? 无法找到相同的任何文档。我的方案是每秒处理数百万个事件并使用Node-RED实时处理它们。
答案 0 :(得分:7)
我在Google Groups Node-RED论坛(https://groups.google.com/forum/#!topic/node-red/Nx1WWqBeLbI)上发布了这个问题,并得到了有趣的答案。记下下面的各种选项。
如果您的输入是通过HTTP,那么您可以使用任何标准负载平衡技术在运行相同Node-RED流的节点集群上加载平衡请求 - 例如一个人可以使用HAProxy,Nginx等。重要的是要注意,因为我们在许多节点上运行相同的流,所以我们不能在上下文变量中存储任何状态。我们必须将状态存储在Redis等外部服务中。
如果您正在摄取MQTT,那么我们有多种选择: 选项A :让每个流听取不同的主题。您可以在MQTT代理上将不同的网关发布到不同的主题 - 例如流实例1订阅设备/ a /#Node-RED实例2订阅设备/ b /#等等。
选项B :一些MQTT代理支持“共享订阅”(HiveMQ)的概念,它等同于点对点消息传递 - 即,一个子组中的每个消费者都获得一条消息,然后代理使用循环法进行负载均衡。有关如何使用HiveMQ启用此功能的详细说明,请参阅此处 - http://www.hivemq.com/blog/mqtt-client-load-balancing-with-shared-subscriptions/。 HiveMQ支持负载平衡消费者的好处是消费者代码不需要更改。您可以继续使用任何MQTT使用者 - 只有主题URL会更改:)
选项C:您为消息提取添加了一个简单的Node-RED流,用于读取有效负载并向负载均衡的Node-RED流群集发出HTTP请求(类似于选项1)
选项D:这是对选项C的扩展,需要使用Apache Kafka在消息提取和消息处理之间创建缓冲区。我们通过MQTT从设备中提取消息并提取有效负载并将其发布到Kafka主题上。 Kafka可以使用消费者群体的概念来支持消息队列范例。因此,我们可以使用相同的使用者组订阅多个订阅Kafka主题的节点红色流实例。如果您的消息代理不支持负载平衡使用者,则此选项也是有意义的。
已发布包含此处链接的博客帖子 - http://www.narendranaidu.com/2016/07/scaling-node-red-horizontally-for-high.html