最近,我增加了一些负载平衡功能,一个软件,我写的。这是一个网络应用程序,它不基于输入从SQL数据库来的一些数据捣弄。由于捣鼓可以是相当密集的,我加的能力,对不同的服务器上运行拆分负载此应用程序的多个实例,但因为它是现在的负载均衡是一种手动行为。用户必须指定哪些实例采取输入域的哪一部分。

我想利用该下一级并编程实例自动协商所述输入数据的潜水并认识到,如果它们中的一个“消失”(已崩溃或已被断电),使得剩余的实例可以取失败的实例的工作量。

为了实现这个我使用的实例之间的一个简单的心跳协议考虑,以确定谁在线,谁不是,虽然这不是非常复杂的,我想知道是否有任何建立的心跳网络协议(基于UDP,TCP或两者)。

显然,这种情况经常发生在网络世界具有集群,故障转移和高可用性技术,所以我到底想我想知道,也许有任何确定的方案或算法,我应该知道的或实现。

修改

看来,基于问题的答案,要么没有很好地建立心脏搏动的协议或没有人知道它们(这将意味着他们没有那么完善的毕竟),在这种情况下,我只是要推出自己的。

虽然没有提供什么,我一直在寻找具体我要投票支持的马特·戴维斯的回答,因为它是最接近的,他指出,使用多播一个好主意。

感谢大家的时间〜

有帮助吗?

解决方案

Distribued交互仿真(DIS),其下的 IEEE标准 1278,使用经由UDP广播的5秒的默认心跳。甲DIS心跳本质上是一个实体状态PDU,这充分限定的状态下,包括的位置的给定实体的,。由于其模拟社区内应用,DIS也使用被称为航位推算,以提供更高的频率心跳时的实际位置,例如,是其预测位置的一个给定的阈值之外的一个概念。

在你的情况下,DIS实体状态PDU将是矫枉过正。我只提它记下的是心跳可以在频率根据具体情况而变化的事实。我不知道,你需要这样的事情你描述的应用程序,但你永远不知道。

有关心跳,使用UDP,TCP不。心跳是,本质上无连接诡计,如此这般该UDP(无连接)是更相关这里比TCP(面向连接的)。

要记住约UDP广播的事情是,广播消息被限制在广播域。总之,如果你具有由一个层3装置分离的计算机,例如,路由器,然后广播节目是行不通的,因为路由器不会从一个广播域到另一个发送广播消息。在这种情况下,我会建议使用多播,因为它会跨越广播域,提供时间生存(TTL)值设置得足够高。它也比单播定向更自动化的方法中,这将需要发送者知道接收机的IP地址,以发送消息。

其他提示

我不知道这会回答这个问题,但你可以通过这样的Weblogic服务器集群工作引擎盖下有兴趣。从书掌握的BEA WebLogic服务器

  

[...]的WebLogic服务器集群提供了集群中的服务器的松耦合。集群中的每个服务器是独立的,不依赖于任何其他的服务器进行任何基本的操作上。即使与其他所有服务器的联系被丢失,每个服务器将继续运行,并能够处理它接收到的请求。集群中的每个服务器通过定期心跳消息来维护自己的集群中的其他服务器的列表。每10秒钟,每一个服务器集群中发送心跳消息到其他服务器,让他们知道它仍然活着。心跳消息使用内置到JVM IP组播技术派,使这一机制有效和可伸缩的服务器集群中的数字变大。每个服务器从其他服务器接收这些心跳消息,并利用它们来维持其当前的群集成员名单。如果服务器错过从任何其他服务器一排的接受三个心跳消息,它需要的是服务器从它的会员名单中,直到它接收来自服务器的其他心跳消息。此心跳技术允许动态地添加服务器和从群集下降与在现有的服务器的配置没有影响。

思科内容交换机是用于该问题的硬件解决方案。他们实现一个虚拟IP地址作为前端到多个真实服务器,其真正的IP地址是已知的开关。交换机定期发送HTTP HEAD请求的Web服务器,以验证他们仍在运行(该交换机软件所谓的“保活”,虽然这并不使服务器本身还活着)。 Cisco交换机接受对虚拟IP流量,并将其转发到实际Web服务器,使用可配置的负载平衡,如循环,或用户定义的负载均衡。

这些开关零售在$ 3-10K范围内,虽然我的商业伙伴约300 $拿起一个在eBay一年前。如果你能买得起,它们代表了成熟的硬件解决方案,如何跨多个服务器透明传播服务的问题。红帽包括一个内置的端口配置,使您可以实现使用廉价的红帽箱自己的思科交换机。谷歌“虚拟IP地址”和“思科内容路由器”的详细信息。

除了努力硬件负载均衡器,你也可以尝试一个免费开源的负载均衡软件应用程序,如的 HAProxy的时,可用于Linux和BSD系统。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top