Linux 的最大进程数大多是 32768,那么以 Linux 构建的服务器是使用哪些技术同时处理百万级的传入连接的呢?

RT。比如说一个工作在最前端的web服务器,总是需要有一个进程去监听一个固定端口的(比如80端口)。为了提高整个服务器的健壮度,服务器accept了一个连接之后,可以立刻fork出子进程来处理这个连接。
但是大型服务总有高并发的需求的,仅仅是简单的fork轻而易举就可以超过32768个进程了,求解?各个服务器在底层原理上,实际上是如何如理传入连接的呢?
BTW:我知道可以使用单个或者少量进程然后简单进行I/O复用来处理服务,但是……嗯,我了解到的一切大型网站并不是这么简单处理的……但是我也找不出个具体的所以然来……
170724-22:31问题补充:
我的希望了解的是作为最底层的socket连接上第一个IP之后(通常是DNS第一层解析得到的IP),发生了什么事情呢?因为不论上层理论是怎么样的,在所有的实现中,总会有第一个TCPsocket连接到一个IP,而这个IP应该是一个现实存在的操作系统上的一个进程。总会存在一个可能,就是同时有大量连接访问这个进程的(假设这个进程称为A),那么这个进程要怎么处理高并发呢?
我只了解一种方案,就是使用I/O复用。而基础的I/O复用是基于单一进程的,这样的服务器架构,对软件设计要求很高,因为单进程,一旦有一处地方崩溃,就会导致该进程上所有服务挂掉。
比较安全的做法,是I/O服用加上进程分流,也就是进程A调用accept()接受了一个TCPsocket之后,立刻通过fork()创建新的进程,将这个连接分流出去。
想到了这个思路之后呢,我就遇到题目中提到的这个问题了:Linux进程数是有限制的啊!于是就有了我的这个问题——这要怎么解决呢?
170726-0913感谢:
感谢各位大大的回答!协程、线程池、异步I/O都是本人熟悉的领域。不过负载均衡就不是了。看起来我要从这个方面去学习,特别是了解一下nginx的原理吧~~~
ibeautiful
浏览 641回答 2
2回答

慕虎7371278

首先现在的大型网站肯定是分布式的,背后是有N个集群的。不可能只靠一台机器来扛很大的流量。而且题主说的多进程的并发模型是最最原始的,以现在比较常用的nginx来说,nginx的进程数是固定的,通过I/O多路复用来实现高并发。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript