单机如何实现百万并发TCP连接

单机如何实现百万并发TCP连接,第1张

一开始我无法理解,单机怎么可能实现百万并发连接,因为系统可用端口数只有:65535 - 1024 = 64511,每个TCP连接需要占用一个独立的端口,那最多也只能做到6W多并发连接。然而我忽视了一个很基本的问题,端口号在同一个IP下不能重复,但我们可以给一个网卡绑定多个IP地址,如果单机要主动发起100万并发连接,我们最少需要使用17个IP地址。

TCP服务器监听在指定端口接收客户端连接后,创建一个新的socket用于同客户端进行读写数据,但该socket并不需要也不会绑定一个新的端口,所以对于TCP服务器来说,不存在端口不够用的情况,TCP服务器能够保持多少个并发连接取决于服务器性能、内存大小、带宽大小以及服务器端设置(例如:进程能打开的文件数等)。以100W连接数为例,所需要总内存大小大约为:1,000,000 20K = 20G, 广播一个1KB的消息需要占用的带宽:1,000,000 1K = 1000M,所需打开文件描述符1,000,000个。

对于TCP服务器连接数压力测试来说,瓶颈在客户端,因为每个客户端要连接到TCP服务端需要使用一个本地端口,而对于一个IP地址来说,端口范围就是:0-65536,其中还要一些端口被系统或其他程序使用。所以从一台主机单个IP上发起同TCP服务器的连接数理论最大值为65535,当然我们可以给该主机绑定N个IP地址,同时从多个IP发起连接,所以理论上客户端可以发起的连接数为:IP数*65535,这时客户端的CPU、内存和带宽以及文件句柄资源就是限制。

100万并发连接服务器之类的都是噱头,因为一个服务器只有65535个端口,顶多就只能处理6万多个socket连接,http是基于socket的,所以正常情况下一台机器只能处理这么多并发连接。

当然如果是服务器集群式可以做到的。

对于流行的web服务器,apache和IIS在一秒内能够做到的响应数在万级,机器好能达到十万级。jboss同样。

如果每秒请求在100万,必须要使用集群。

说了这么多,我们再来说netty,个人认为它只是在开发上会比较简便,和jboss的结合性能更好。至于性能上,如果真有人说单机能到1M连接,大概有0.9M的水分吧,因为大部分的连接都处于排队等待之中。这是没有实际意义的。

Nginx很火,因为它就像一个万能药,在任何存在性能需求的场合总能找见它的身影。它可以轻松在百万并发连接下实现高吞吐量的Web服务,同时诸多应用场景下的问题都可以通过种种Nginx模块得以解决。

Nginx天生就适合在linux服务器上处理百万、千万级的并发连接,且优秀的架构使得它未来不需要重构,所以它的生态圈内的第三方模块长期有效。而长年的发展下日益增多的第三方模块进一步赋能Nginx,使Nginx适用于更多的场景,甚至渗透到LVS的领域与F5这样的硬件产品竞争!同时,如OpenResty或者Tengine这样的第三方模块群,进一步发展出了新生态,使Nginx的应用进一步向应用防火墙、CDN等领域扩展。

所以,学好Nginx可以让你在工作中获得立竿见影的效果。

网络上关于Nginx的使用介绍非常多,但往往有两个问题 :

1、仅从如何使用层面介绍,没有把离散的知识点串成线,这导致大家难以应对未出现过的、个性化的定制场景;

2、没有成体系的性能优化知识介绍,在企业生产环境下我们需要从应用到系统的完整优化方案 。

最近看到极客时间上线的视频课程《Nginx核心知识100讲》,涉及到了Nginx的基本用法、http模块、反向代理与负载均衡、OpenResty等各方面的综合知识,很系统化。最值得一提,这个课程的作者--陶辉老师,应该算是Nginx领域的专才了。 有着近10年Nginx方面的研究经验,曾出版过京东热销书籍《深入理解Nginx:模块开发与架构解析》。

简单介绍下这个课程的内容规划,主要分为六个部分:

第1部分初识Nginx: 帮助对Nginx还不熟悉的同学快速了解Nginx的背景,熟悉Nginx的基本用法;

第2部分是Nginx的架构基础: 在这里我们开始探讨Nginx的进程模型以及数据结构,它为后续深入学习打下基础;

第3部分我们开始详解http模块: 这一部分我们先讲清楚Nginx是如何处理http请求的,再按照请求的处理流程来讲解常用http模块中指令、变量的用法,学完后可以帮助我们触类旁通,理解所有http模块的共同逻辑及用法。

第4部分是反向代理与负载均衡: 这一部分以七层负载均衡为主,兼顾四层负载均衡,学完这一部分,你可以搭建出多种不同上游协议的反向代理,并理解如何配置才能高效的处理上下游流量的交互。

第5部分是Nginx的系统层优化: 学完该部分可以有效的调节linux操作系统下cpu、内存、网络、磁盘等配置,与Nginx.conf中的指令相配合,使Nginx的性能最大化。

第6部分是从源码视角深入使用Nginx与OpenResty: 这一部分我们会从Nginx的实现层面,打通前5部分中的知识,帮助大家深刻理解Nginx的机制与能力模型,并介绍OpenResty是如何与Nginx有效搭配使用的。

不多说了,直接附上陶辉出品的“Nginx核心知识框架图”,非常系统地梳理了学好Nginx所需要的知识点。

福利一:限时优惠价¥68(原价¥129),接近半价优惠,11月17日恢复原价;最近两天有啥福利?

福利二:每邀请一位好友购买,可获得24元现金返现,多邀多得,上不封顶,随时提现。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/348129.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-07
下一篇2023-05-07

发表评论

登录后才能评论

评论列表(0条)

    保存