Erlang中的高可用性?
在Erlang中实现高可用性的典型方法是什么 让我们假设一些Erlang中的高可用性?,erlang,load-balancing,high-availability,Erlang,Load Balancing,High Availability,在Erlang中实现高可用性的典型方法是什么 让我们假设一些genu服务器在本地注册为?模块。给定N独立并由defaul Erlang节点互连,每个节点运行该gen_server的一个实例,如何1)确保不会由于某些参与节点的故障而丢失请求(只要其中至少一个节点在线),2)对它们进行负载平衡,以避免某些节点过载,而其他节点则挂起等待新消息?据我所知,不存在内置的负载平衡器:没有pg2或更新的pg就足够了(可能仍然是在这方面进一步工作的良好基础) 我敢打赌,这是一个常见的问题,并且经过良好的战斗测试
genu服务器
在本地注册为?模块
。给定N
独立并由defaul Erlang节点互连,每个节点运行该gen_server
的一个实例,如何1)确保不会由于某些参与节点的故障而丢失请求(只要其中至少一个节点在线),2)对它们进行负载平衡,以避免某些节点过载,而其他节点则挂起等待新消息?据我所知,不存在内置的负载平衡器:没有pg2
或更新的pg
就足够了(可能仍然是在这方面进一步工作的良好基础)
我敢打赌,这是一个常见的问题,并且经过良好的战斗测试的“Erlangish”解决方案确实存在。它们是什么?我认为对于1)只有一次保证,您需要某种分布式事务算法,因为连接可能会失败,并且您不知道远程节点中请求的状态:远程节点是否已死亡?它是否处于活动状态,只是因为网络故障而断开了连接?在失败之前,它在请求处理过程中走了多远?您应该检查一下,它与Erlang深度集成 如果您放宽了1的要求(例如,如果请求是幂等的。您只关心至少一次,或者故障并不常见),那么远程
gen_server
可能就足够了,只要在与远程服务器的连接因任何原因断开时重放请求即可
对于2,我们在节点前面以最少连接的方式使用or或webserver,尽管我相信您指的是“内部”Erlang。在这种情况下,我将执行以下操作,以获得带有负载信息的本地ETS:
模块
助手,定期向群集中的其他助手广播本地模块
的邮箱大小(或其他度量)流程组实现了强大的最终一致性。
您可能有过载的服务器暂时离开流程组,它们最终将停止接收请求。您可以按节点拥有多台服务器,触发次数较低,以便离开组进行更均匀的分发。我认为对于1)只有一次保证,您需要某种分布式事务算法,因为连接可能会失败,并且您不知道远程节点中请求的状态:远程节点是否已死亡?它是否处于活动状态,只是因为网络故障而断开了连接?在失败之前,它在请求处理过程中走了多远?您应该检查一下,它与Erlang深度集成 如果您放宽了1的要求(例如,如果请求是幂等的。您只关心至少一次,或者故障并不常见),那么远程
gen_server
可能就足够了,只要在与远程服务器的连接因任何原因断开时重放请求即可
对于2,我们在节点前面以最少连接的方式使用or或webserver,尽管我相信您指的是“内部”Erlang。在这种情况下,我将执行以下操作,以获得带有负载信息的本地ETS:
模块
助手,定期向群集中的其他助手广播本地模块
的邮箱大小(或其他度量)流程组实现了强大的最终一致性。
您可能有过载的服务器暂时离开流程组,它们最终将停止接收请求。您可以按节点设置多个服务器,并使用较低的触发器离开组,以便进行更均匀的分发