[Nginx]Nginx凭啥子并发数可以达到3w!( 二 )
④upstream:upstream 模块实现反向代理的功能 , 将真正的请求转发到后端服务器上 , 并从后端服务器上读取响应 , 发回客户端 。
upstream 模块是一种特殊的 handler , 只不过响应内容不是真正由自己产生的 , 而是从后端服务器上读取的 。
⑤load-balancer:负载均衡模块 , 实现特定的算法 , 在众多的后端服务器中 , 选择一个服务器出来作为某个请求的转发服务器 。
常见问题剖析Nginx vs Apache
Nginx:
- IO 多路复用 , Epoll(freebsd 上是 kqueue)
- 高性能
- 高并发
- 占用系统资源少
- 阻塞+多进程/多线程
- 更稳定 , Bug 少
- 模块更丰富
http://www.oschina.net/translate/nginx-vs-apachehttps://www.zhihu.com/question/19571087
Nginx 最大连接数
基础背景:
- Nginx 是多进程模型 , Worker 进程用于处理请求 。
- 单个进程的连接数(文件描述符 fd) , 有上限(nofile):ulimit -n 。
- Nginx 上配置单个 Worker 进程的最大连接数:worker_connections 上限为 nofile 。
- Nginx 上配置 Worker 进程的数量:worker_processes 。
- Nginx 的最大连接数:Worker 进程数量 x 单个 Worker 进程的最大连接数 。
- 上面是 Nginx 作为通用服务器时 , 最大的连接数 。
- Nginx 作为反向代理服务器时 , 能够服务的最大连接数:(Worker 进程数量 x 单个 Worker 进程的最大连接数)/ 2 。
- Nginx 反向代理时 , 会建立 Client 的连接和后端 Web Server 的连接 , 占用 2 个连接 。
- 每打开一个 Socket 占用一个 fd?
- 为什么 , 一个进程能够打开的 fd 数量有限制?
HTTP 请求:
- 请求行:method、uri、http version
- 请求头
- 请求体
- 响应行:http version、status code
- 响应头
- 响应体
处理多个请求时 , 可以采用:IO 多路复用或者阻塞 IO+多线程:
- IO 多路复用:一个线程 , 跟踪多个 Socket 状态 , 哪个就绪 , 就读写哪个 。
- 阻塞 IO+多线程:每一个请求 , 新建一个服务线程 。
- IO 多路复用:单个连接的请求处理速度没有优势 。
- 大并发量:只使用一个线程 , 处理大量的并发请求 , 降低上下文环境切换损耗 , 也不需要考虑并发问题 , 相对可以处理更多的请求 。
- 消耗更少的系统资源(不需要线程调度开销) 。
- 适用于长连接的情况(多线程模式长连接容易造成线程过多 , 造成频繁调度) 。
- 阻塞 IO +多线程:实现简单 , 可以不依赖系统调用 。
- 每个线程 , 都需要时间和空间 。
- 线程数量增长时 , 线程调度开销指数增长 。
详细内容 , 参考:
https://www.cnblogs.com/wiessharling/p/4106295.html
select/poll 系统调用:
// select 系统调用int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout); // poll 系统调用int poll(struct pollfd fds[], nfds_t nfds, int timeout); select: - 查询 fd_set 中 , 是否有就绪的 fd , 可以设定一个超时时间 , 当有 fd (File descripter) 就绪或超时返回 。
推荐阅读
- [科旅号]并发现气辉现象,火星内部很危险,NASA洞察号证实火星地震活跃
- [前瞻网]新冠最年轻死亡病例!美国一名6周大婴儿死于新冠肺炎并发症
- 『港台来信』澳门通报一例军团病个案:84岁男性双肺肺炎并发感染性休克
- Java架构师技术栈分享:request body读取流程详解,nginx
- Java架构师技术栈分享■request body读取流程详解,nginx
- 『翰决汽车说』行驶万公里记得要清理这地方,耗油低马力强,不管你开啥子车
- Java@Java并发编程之支持并发的list集合你知道吗
- 『阿里巴巴』Java并发编程之CAS第三篇-CAS的缺点
- 『盖饭娱乐』麦当娜发文哀悼,首例美国男星患肺炎去世!69岁老戏骨并发症不治
- 编程■Java最全面试手册(性能优化+微服务架构+并发编程+开源框架)
