是否可以在节点集群上水平扩展Node-RED?无法找到相同的任何文档.我的方案是每秒处理数百万个事件并使用Node-RED实时处理它们.
我在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