我们正在尝试设置负载平衡的服务器,以便在我们扩展应用程序时将负载分散到许多服务器上。我们的软件正在作为网络服务器在Go Listening中创建。
我们使用PING / PONG在Go中创建了一个简单的服务器,以查看每个服务器最多可以处理多少个请求。是的,我们了解到,当您添加数据库访问权限和所有其他处理代码时,该单个服务器每秒将不会达到相同数量的事务。这仅仅是测试代码,可确保每个盒子上的速度保持一致,以排除任何外部延迟源。
我们有一个2U物理盒,带64 GB内存和(2)Xeon 4110 8 Core 16 Thread处理器。我们的Internet连接是1 GB光纤,并且所有服务器都在虚拟局域网内部进行了连接,因此延迟不应该成为问题。
我们有(3)个Go服务器设置,每个服务器使用Cent OS 7在VM中具有4 GB内存和4个CPU。
我们每个箱子每秒可以完成47,000个查询。我们假设,如果我们在盒子前面安装了HAProxy,那么我们应该能够在3台服务器的组合中达到大约140,000 qps。
我们正在HAProxy中使用TCP路由方法,因为它似乎比HTTP方法快得多。我们不需要基于URL进行路由,因此目前看来TCP更好。
使用loader.io对47,000 qps进行了测试,其中1分钟内2000个客户端扩展到4000个客户端。每个服务器平均处理相同数量的qps。
我们将HAProxy设置为仅连接到1台服务器,以查看中间的速度。在一台服务器上,我们说大约46,000 qps。
我们在HAProxy之后又增加了2台服务器,总共增加了3台,并且qps没有增加,但是从观察所有计算机上的htop可以看出,这3台服务器上的负载均已分散。总共将达到46,000 qps。
HAProxy服务器设置为具有8个CPU和16 GB的ram,并且在观看htop时并没有在CPU上最大化。
有1个外部IP地址进入HAProxy,后端通过内部10.x.x.x IP地址链接,每盒1个。每个后端服务器还具有一个外部IP地址,我们用来分别测试每个服务器的速度,以确保它们均以47,000〜qps的速度工作。
我们确实提高了loader.io的速度,使其每秒运行2000到8000个客户端,目的是向HAProxy服务器施加更多的负载,但是根本没有增加qps。
看来我们有足够的能力来处理CPU,RAM和Internet流量中的简单ping / pong请求。
HAProxy是否可以基于端口耗尽对每个外部IP处理的最大限制?我们确实将服务器上的端口增加到1024-65000。
使用watch ss -s最多不会使用超过10,000个端口,并且在任何等待状态下几乎没有,因为我们已将服务器设置为重用tcp连接并减少了fin超时。
我们只是在尝试使前端Web代理能够处理大量流量并将其传递给后端服务器进行处理。
我们的Go代码当前每个VM的运行速度约为10,000 qps,因此,如果我们希望在上述示例中达到140,000 qps,则需要14个VM来处理它。我们的目标是能够分配超过140,000的功能,并只需在后端添加更多服务器来处理负载的增加。