4

我计划创建一个软件负载均衡器,它将位于 linux 中的许多套接字服务器前面。客户端将连接到负载均衡器。负载均衡器将维护一个替代 ip 及其端口的表。它将客户端连接到最佳可用 ip 和端口并断开与客户端的连接。因此它将退出场景(将不再连接到客户端)。在这种情况下,只有连接的设备将是客户端和新的套接字服务器,但不是负载均衡器。

Example : Cleint ip 10.1.2.3 port 1234  
           load balancer Ip 10.1.2.4 port 1235
           list of socket servers   in Load Balancer: 
           A Ip 10.1.2.4 port 1236 
           B Ip 10.1.2.4 port 1237
           C  Ip 10.1.2.5 port 1238
    Now 
for the 1st request to the load balancer from client, the load balancer  will establish a connection between the client &  server A and disconnect itself from client.
     for the 2nd request to the load balancer from client, the load balancer  will establish a connection between the client &  server B and disconnect itself from client.
     for the 3rd request to the load balancer from client, the load balancer  will establish a connection between the client &  server C and disconnect itself from client.

Any Help on implementing this in Java is greatly appreciated.
4

4 回答 4

2

我会使用 redis 来存储查找表。每个负载均衡器服务器将在 redis 的查找表中查找与最可用/最优先级服务器的连接。此查找将返回一个整数,它是服务器的索引。客户端中的每个应用程序都将存储服务器 ip 及其各自的索引。所以这个查找速度非常快,不到 30 毫秒。此时连接会更快。不需要重定向。如果存在并发连接,并且在应用程序尝试连接到查找的服务器时,所需服务器上的 qouta 已完成,则还提供了回退。在这种情况下,它将再次查找最可用的服务器,即递归地重新开始,直到连接成功或所有资源都完成并且连接请求被标记为死胡同。

为每次查找保留几毫秒的连接怎么样?在该查找的连接延迟到期后,页面文件将可用于新连接。这将减少递归查找,但也会阻止连接。延迟应该足以建立可能会有所不同的连接。另一方面,在此延迟期间新连接将被阻止,这可能会导致糟糕的用户体验。您需要在这两者之间进行权衡:减少查找和阻止连接与从不阻止连接并忍受非常快的递归查找。

于 2016-01-06T11:54:29.283 回答
2

这种微型设计对于手机和标签等小型设备中的应用程序很有帮助。服务器可以对特定设备允许请求的往返次数设置限制。在线服务器的偏离路线扩展将有助于减少往返次数。

于 2015-09-24T00:07:39.153 回答
1

困难在于断开设备与服务器端的连接并将其与预期的服务器连接。
可以有一个解决方法:改用重定向。

  • 每个服务器都是客户端设备的负载平衡器和服务提供者
  • 每个服务器将始终跟踪其打开文件限制,并从最大打开文件限制中保留安全边距
  • 此池将用于检查是否需要任何重定向。
  • 当打开文件限制达到安全限制时,任何进一步的连接请求都会将下一个可用的服务器 ip 返回给客户端设备。
  • 可以在内存中的查找表中维护下一个最近的可用服务器 ip。
  • 设备将检查返回的值是否以重定向ip开头,它将自动重新连接到接收到的ip。否则将假定设备从任何服务器成功获取服务。

这样我们就可以避免打开文件限制和连接被拒绝错误。

于 2013-10-06T12:03:39.440 回答
0

我不太明白负载均衡器应该与客户端断开连接的要求。如果您的套接字实际上是 TCP 连接,就像它们看起来那样,我看不出您如何将连接卸载到在其他地方运行的客户端,而无需一些低级别的黑客攻击。例如,查看来自linux virtual server的 ldirectord 。这允许完全卸载连接。

为了简单起见,我只使用HAProxy。做大部分你想要的,除了卸载连接。

最后,您还可以使用某种循环 DNS 解决方案。这也将根据您的需要卸载连接。

于 2013-04-22T09:26:58.310 回答