您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

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

时间:2020-06-24 10:36:56  来源:  作者:

文章来源:
https://mp.weixin.qq.com/s/ZynmF0GaplHsabIovopMSw

原文作者:程序员大白啊

1. 开场白

在开始今天的文章之前,先抛一个面试题出来:

你接触过的单机最大并发数是多少?
你认为当前正常配置的服务器物理机最大并发数可以到多少?
说说你的理解和分析。

思考几分钟,如果你可以有理有据地说出答案,那确实就不用再往下看了,关上手机去陪陪家人是个不错的选择。

思考几分钟,如果你没有头绪或者对答案不确定,那么你先不用着急关闭页面去玩耍,你应该继续往下看,因为这个问题很不错。

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

 

对于后端开发人员来说,并发数往往和技术难度是呈正相关的,实际上也确实如此:体量决定架构

服务端根据不同业务场景会有不同的侧重点,单纯追求高并发其实并不是根本目的,高可用&稳定性更重要

所以最终我们的目的是:保证高可用高稳定的基础上追求高并发,降本增效

高可用&高并发是我们直观感受到的,本质上这是个复杂的系统工程,每个环节都会影响结果,每一块都值得研究和深入。

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

 

2. C10K问题和C10M问题

在2000年初的时候,全球互联网的规模并不大,但是当时就已经提出了C10K问题,所谓C10K就是单机1w并发问题,虽然现在不觉得是个难题了,但是这在当初是很有远见和挑战的问题。

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

 

C10K问题最早由Dan Kegel发布于其个人站点,原文链接如下:

http://www.kegel.com/c10k.html

相关资料显示Dan Kegel目前工作于google,从1978年起开始接触计算机编程,是Winetricks和Crosstool的作者,大佬年轻时的照片:

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

 

Dan Kegel这篇文章阅读难度并不大,大白建议从事服务端开发或者对高性能网络开发有兴趣的读者尝试读一读。

在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的架构也是这样的:

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

 

3. 服务器最大并发数分析

前面提到的C10K和C10M问题都是围绕着提升服务器并发能力展开的,但是难免要问:服务器最大的并发上限是多少

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

 

3.1 五元组

做过通信的盆友们一定听过五元组这个概念,一个五元组可以唯一标记一个网络连接,所以要理解和分析最大并发数,就必须理解五元组:

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

 

这样的话,就可以基本认为:理论最大并发数 = 服务端唯一五元组数
3.2 端口&IP组合数

那么对于服务器来说,服务端唯一五元组数最大是多少呢?

有人说是65535,显然不是,但是之所以会有这类答案是因为当前Linux的端口号是2字节大小的short类型,总计2^16个端口,除去一些系统占用的端口,可用端口确实只剩下64000多了。

对于服务端本身来说,DestPort数量确实有限,假定有多张网卡,每个网卡绑定多个IP,服务端的Port端口数和IP数的组合类型也是有限的

对于客户端来说,本身的端口和IP也是一样有限的,虽然这是个组合问题,但是数量还是有限的:

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

 

3.3 并发数理论极限

看了前面的端口&IP的组合数计算,好像并发数并不会特别大。

错了,是真的会很大。

分析一下,前面的计算都是针对单个服务器或者客户端的,但是实际上每个服务器会应对全网的所有客户端,那么从服务端看,源IP和源Port的数量是非常大的。

理论上服务端可以接受的客户端IP是2^32(按照IPv4计算),端口数是2^16,目前端口号仍然是16bit的,所有这个理论最大值是2^48,果然很大!

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

 

3.4 实际情况

天下没有免费的午餐。

每一条连接都是要消耗系统资源的,所以实际中可能会设置最大并发数来保证服务器的安全和稳定,所以这个理论最大并发数是不可能达到的

实际中并发数和业务是直接相关的,像redis这种内存型的服务端并发十几万都是没问题的,大部分来讲几十/几百/几千/几万等是存在的。

4. 客户端最大连接数

理解了服务器的最大并发数是2^48,那么客户端最多可以连接多少服务器呢

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

 

对于客户端来说,当然可以借助于多网卡多IP来增加连接能力,我们仍然假定客户端只有1张网卡1个IP,由于端口数的限制到2^16,再去掉系统占用的端口,剩下可用的差不多64000。

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

 

也就是说,客户端虽然可以连接任意的目的IP和目的端口,但是客户端自身端口是有限的,所以客户端的理论最大连接数是2^16,含系统占用端口。

5. NAT环境下的客户端

解决前面的两个问题之后,来看另外一个问题:

一个公网出口NAT服务设备最多可同时支持多少内网IP并发访问外网服务?

毕竟公网IP都是有限并且要花钱的,我们大部分机器都是在局域网中结合NAT来进行外网访问的,所以这个场景还是很熟悉的。

来看下内网机器访问外网时的IP&端口替换和映射还原的过程,就明白了:

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

 

因为这时的客户端是NAT设备,所以NAT环境下最多支持65535个并发访问外网。

6.小结

本文通过一道面试题切入,先描述了C10K和C10M问题,进而详细说明了客户端的最大访问数和服务端的最大并发数计算和原理,最后描述了NAT场景下的访问并发数。

虽然理论服务端并发数非常大,但是我们也没有必要觉得并发数高就厉害,服务复杂程度不一样,切忌唯并发数来判断业务和开发者水平

试想echo服务和订单交易服务显然是不一样的,我们应该做的是在服务稳定和高可用的前提下去从缓存/网络/数据库等多个角度来优化提高性能

对了,在这里说一下,我目前是在职JAVA开发,如果你现在正在学习Java,了解Java,渴望成为一名合格的Java开发工程师,在入门学习Java的过程当中缺乏基础入门的视频教程,可以关注并私信我:01。获取。我这里有最新的Java基础全套视频教程。



Tags:Linux服务端   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
\文章来源: https://mp.weixin.qq.com/s/ZynmF0GaplHsabIovopMSw原文作者:程序员大白啊1. 开场白在开始今天的文章之前,先抛一个面试题出来:你接触过的单机最大并发数是多少? 你...【详细内容】
2020-06-24  Tags: Linux服务端  点击:(74)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(14)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(22)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(25)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(40)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(28)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(19)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(29)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条