加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

Linux服务端的最大并发数是多少呢

发布时间:2022-01-07 20:23:07 所属栏目:系统 来源:互联网
导读:本篇文章为大家展示了Linux服务端的最大并发数是多少呢,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 1. 开场白 在开始今天的文章之前,先抛一个面试题出来: 你接触过的单机最大并发数是多少? 你认为当前正
本篇文章为大家展示了Linux服务端的最大并发数是多少呢,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
 
 1. 开场白
在开始今天的文章之前,先抛一个面试题出来:
 
你接触过的单机最大并发数是多少?
 
你认为当前正常配置的服务器物理机最大并发数可以到多少?
 
对于后端开发人员来说,并发数往往和技术难度是呈正相关的,实际上也确实如此:体量决定架构。
 
服务端根据不同业务场景会有不同的侧重点,单纯追求高并发其实并不是根本目的,高可用&稳定性更重要。
 
所以最终我们的目的是:保证高可用高稳定的基础上追求高并发,降本增效。
 
高可用&高并发是我们直观感受到的,本质上这是个复杂的系统工程,每个环节都会影响结果,每一块都值得研究和深入。
 
Linux服务端的最大并发数是多少呢
 
2. C10K问题和C10M问题
在2000年初的时候,全球互联网的规模并不大,但是当时就已经提出了C10K问题,所谓C10K就是单机1w并发问题,虽然现在不觉得是个难题了,但是这在当初是很有远见和挑战的问题。
 
在APUE第三版都没有提到epoll,所以我们解决C10K问题的时间并不长,其中IO复用epoll/kqueue/iocp等技术对于C10k问题的解决起到了非常重要的作用。
 
开源大神们基于epoll/kqueue等开发了诸如libevent/libuv等网络库,从而大幅提高了高并发网络的开发效率,对于C/C++程序员来说并不陌生。
 
Linux服务端的最大并发数是多少呢
 
这里简单提一下针对下一个10年的展望和挑战:C10M问题。
 
站在浪尖的那一批人早就开始思考让单机达到1000w并发,现在听起来感觉不可思议,但是要达到这个目标,除了硬件上的提升,更重要的是对系统软件和协议栈的改造。
 
Linux服务端的最大并发数是多少呢
 
Errata Security的CEO Robert Graham在Shmoocon 2013大会上的演讲,大佬重要的观点是:
 
不要让OS内核执行所有繁重的任务:将数据包处理、内存管理、处理器调度等任务从内核转移到应用程序高效地完成,让诸如Linux这样的OS只处理控制层,数据层完全交给应用程序来处理。
 
确实也是如此,难道你不觉得Linux内核做了太多不该自己做的事情了吗?
 
近几年出现的DPDK、PFRING、NETMAP等技术也是类似的思想,现在流行的协处理器+CPU的架构也是这样的:
 
3. 服务器最大并发数分析
前面提到的C10K和C10M问题都是围绕着提升服务器并发能力展开的,但是难免要问:服务器最大的并发上限是多少?
 
 
3.1 五元组
 
做过通信的盆友们一定听过五元组这个概念,一个五元组可以唯一标记一个网络连接,所以要理解和分析最大并发数,就必须理解五元组:
 
这样的话,就可以基本认为:理论最大并发数 = 服务端唯一五元组数。
 
3.2 端口&IP组合数
 
那么对于服务器来说,服务端唯一五元组数最大是多少呢?
 
有人说是65535,显然不是,但是之所以会有这类答案是因为当前Linux的端口号是2字节大小的short类型,总计2^16个端口,除去一些系统占用的端口,可用端口确实只剩下64000多了。
 
对于服务端本身来说,DestPort数量确实有限,假定有多张网卡,每个网卡绑定多个IP,服务端的Port端口数和IP数的组合类型也是有限的。
 
对于客户端来说,本身的端口和IP也是一样有限的,虽然这是个组合问题,但是数量还是有限的:
 
 
3.3 并发数理论极限
 
看了前面的端口&IP的组合数计算,好像并发数并不会特别大。
 
错了,是真的会很大。
 
分析一下,前面的计算都是针对单个服务器或者客户端的,但是实际上每个服务器会应对全网的所有客户端,那么从服务端看,源IP和源Port的数量是非常大的。
 
理论上服务端可以接受的客户端IP是2^32(按照IPv4计算),端口数是2^16,目前端口号仍然是16bit的,所有这个理论最大值是2^48,果然很大!
 
 
3.4 实际情况
 
天下没有免费的午餐。
 
每一条连接都是要消耗系统资源的,所以实际中可能会设置最大并发数来保证服务器的安全和稳定,所以这个理论最大并发数是不可能达到的。
 
实际中并发数和业务是直接相关的,像Redis这种内存型的服务端并发十几万都是没问题的,大部分来讲几十/几百/几千/几万等是存在的。

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读