为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ibeautiful 2019-05-25 14:00:32
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的原理吧~~~
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

首先现在的大型网站肯定是分布式的,背后是有N个集群的。不可能只靠一台机器来扛很大的流量。而且题主说的多进程的并发模型是最最原始的,以现在比较常用的nginx来说,nginx的进程数是固定的,通过I/O多路复用来实现高并发。
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 640 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信