我正在查看slave/pool模块,它看起来与我想要的类似,但似乎我的应用程序中有一个单点故障(如果主节点发生故障).
客户端有一个网关列表(为了后退 - 都做同样的事情)接受连接,一个是由客户端随机选择的.当客户端连接时,检查所有节点以查看哪个节点负载最小,然后将负载最少的服务器的IP转发回客户端.然后客户端连接到此服务器,并在那里执行所有操作.
总之,我希望所有节点都充当网关并实际处理客户端请求.负载平衡仅在客户端最初连接时完成 - 所有实际数据包并在客户端的"主"节点上处理.
我该怎么做?
我不知道是否实现了这个模块,但我可以说,负载平衡被高估了.我可以争辩的是,随机放置工作是最好的选择,除非你知道更多的信息将来会有多少负载,在大多数情况下你真的没有.你写的:
当客户端连接时,检查所有节点以查看哪个节点负载最小,然后将负载最少的服务器的IP转发回客户端.
你怎么知道所有那些负载最小的节点在下一个ms中不会被加载到最高?你怎么知道所有那些你不会包含在列表中的高负载节点不会在下一个ms中降低负载?除非你的情况非常罕见,否则你真的无法知道.
只需测量(或计算)节点的性能,并根据它选择设置节点的概率.无论当前负载如何,随机选择节点.使用此作为初始方法.当你设置它时,你可以尝试组成一些更复杂的算法.我敢打赌,击败这种初步方法将是非常艰苦的工作.相信我,非常努力.
编辑:为了更清楚地说明一个细微的细节,我强烈主张你无法预测当前和历史负荷的未来负荷,但你应该使用有关任务持续时间概率和任务生命周期的当前分解的知识.这项工作很难尝试实现.