linux – 如何扩展支持长轮询的Web服务器

我计划添加更多Web应用程序服务器以支持不断增加的客户端,部署HAproxy和Keepalived以实现负载平衡和高可用性.

我的服务器使用具有以下特征:

>工作不是cpu密集型的.消息是小于100的JSON文本
字符.
>用户将通过客户端设备Y向服务器发送消息.通常每天4-5条消息
>客户端设备X持续等待来自服务器的消息.如果消息在服务器上可用,则客户端设备X必须能够在2秒内获得它.否则,此消息已过时.

为此原因,

>客户端设备X正在使用长轮询HTTP连接以便响应.每个连接将持续5秒钟并重新连接.
>客户端设备X和客户端设备Y连接到同一服务器,因此X和Y可以轻松发送消息

如果有超过60,000个客户端设备X连接到服务器,我的负载均衡器或路由器将耗尽TCP端口.例如,扩展到20,000个用户的最佳方法是什么?

我的服务器在ubuntu服务器上运行,使用tomcat和Java Servlet.

解决方法

我不认为您的60k客户端是实际问题.如果没有足够的文件描述符,您可能会遇到问题,但作为操作系统配置的一部分,这应该很容易修复.

这就是为什么连接不是你的问题.每个连接的特征在于其源IP地址,源端口,目标IP地址和目标端口.在网络堆栈内,这个四元组用于将数据包与文件描述符匹配(每个文件描述符代表一个连接).您的服务器具有固定的目标IP地址和目标端口(您的服务器是其客户端的目标)但源IP地址和源端口是可变的.端口是16位数,因此来自一个客户端的最大连接数为64K. IPv4地址是一个32位数字,为您提供4,294,967,296个可能的源地址.做一些基本的数学运算,您的服务器可以将64K * 4,296个连接映射到单个源IP和端口.

这就是为什么您更可能遇到最大数量的打开文件描述符和客户端数量的问题.

相关文章

Linux中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...