【发布时间】:2019-11-18 12:27:19
【问题描述】:
我必须为我们的自定义服务器而不是 http 编写负载均衡器。 我在互联网上浏览了很多文章。每个地方都提到负载均衡器将连接重定向到实际服务器。 但是没有提到如何重定向连接。 有人能告诉我如何在 C 中实现连接重定向吗?
谢谢
【问题讨论】:
标签: load-balancing
我必须为我们的自定义服务器而不是 http 编写负载均衡器。 我在互联网上浏览了很多文章。每个地方都提到负载均衡器将连接重定向到实际服务器。 但是没有提到如何重定向连接。 有人能告诉我如何在 C 中实现连接重定向吗?
谢谢
【问题讨论】:
标签: load-balancing
在这种情况下重定向连接意味着在两个连接之间创建代理 - 外部(面向客户端)和内部(面向服务器)。一方面你监听传入的连接,另一方面你选择一个后端服务器并重定向来自客户端连接的流量。本质上,您是从两个 ip 元组创建一个流:
((external ip, external port, external interface) , (internal ip, internal port,internal interface))
数据流为:
client load balancer server
[c1 sock]<--->[external socket | internal socket]<--->[s1 sock]
基本操作模式为:
您可以在不使用套接字的情况下在网络层实现它,但这需要用户空间 TCP/IP 堆栈实现以及直接从网络适配器队列读取数据包的能力。
nginx 可以负载平衡 TCP 和 UDP 连接。为什么不使用它而不是重新发明轮子呢?几年后您的解决方案可能会经过更多调整和实战测试。
【讨论】: