请求服务器x从服务器y回复

我需要你们的一些build议:我正在处理一个自定义的loadbalancer /软件,我们将使用2台主服务器和大约8台从服务器。 简而言之:用户向主服务器发送请求,主服务器将接收并处理请求,向从服务器发送请求,从服务器应该直接向“用户”发送数据。

用户 – >主服务器

主服务器 – >从服务器

从服务器 – >用户

  • 数据应该直接发送给用户而不是通过主服务器的原因是带宽和低预算。

现在我有以下想法:-IPinIP,但在Layer7中是不可能的(到目前为止,我知道有一些昂贵的路由器)-IP Spoof,使用C / C ++我们将使它看起来像来自主服务器的答复。

但是我想,也许答复“奴隶服务器 – >用户”可能来自不同的IP而不会在用户或他的反病毒防火墙的问题。 我不太了解“家庭”防火墙/路由器和/或防病毒软件。 我猜用户机器不好处理?

我相信这取决于如何configuration自定义负载平衡器(我猜你的原理图中指出的主服务器)和从属服务器应用程序。 在负载均衡器中经常见到两个原则,围绕请求/回复路由进行实际的devise:

1)如果您可以告诉主服务器不要使用自己的IP地址作为源IP,而是使用客户端IP(例如在数据包中,因为它首先来到主服务器,按照您的原理图)将数据包传递给从服务器时。 从属服务器自然会将其答复直接发送给客户端,而不是通过主服务器。 这是在负载均衡器中看到的一个相当常见的function,我们networking人员经常称源代码重写为“source nat”,而不是ip spoofing来区分良性意图,并且您应该能够针对该主题制作一些有趣的Google。

2)另一种devisescheme是embedded与HTTP中的X-Forwarded-For头相似的元信息,或者用于携带原始客户端IP地址作为数据的一部分的remote_addr / remote_host(不记得是哪个)字段即使它已经被ip分组中的中间主机地址replace。 如果使用您使用的协议有可能实现类似的function,则主服务器需要将该元信息注入到选定的字段中。 您的从服务器上的应用程序将需要被指示发送答复到该字段的地址,而不是在IP数据包的源地址。 这种devise的一个好处就是它可以很好的logging,因为你可以访问所有涉及特定stream的节点地址。

这是原则性的,实际上,如果客户端期望从服务器的应答成为请求的同一会话的一部分(等等等等),那么实际上可能会有些磕磕绊绊。 这一切都取决于你试图通过的协议的期望,以及你有什么基础设施来解决你的问题:-)