1.1Nginx是一个开源且高性能,HTTP中间件,代理服务。
支持海量的并发
1.2常见的HTTP服务
Apache(阿帕奇基金会)-----HTTPD
微软------lls
谷歌-----GWS
nginx加Lua-------openresty
1.3Nginx应用场景
静态处理
反向代理
负载均衡
资源缓存
安全防护
认证限制
认证访问
2.1Nginx是基于Io多路复用的
Io多路复用是为了解决并发性问题,Socket作为复用
IO复用是串行的a有问题处理a的,但是a的问题要处理10个小时b就得等待10个小时
什么是I/O复用
I/O复用 解决的是并发性请求的问题。 处理多个并发请求,要产生多个I/O流来进行系统内核数据的读取。 常用的两种处理方式是串行,前一个阻塞,后面无法继续进行处理、并行处理请求-实现最大并发和吞吐。 I/O复用定义为:一个socket作为复用来完成整个I/O流的请求链接建立,处理请求则采用多线程。
IO复用(多线程, 消耗大)
老师分身,创建多个线程老师,分别处理每个学生做完的试题,这种方式采用的是多线程的处理方式。但是资源分配上、上下文切换会出现额外资源消耗。
IO多路复用(主动上报)
真正的I/O多路复用 学生(网络请求-请求数据分组到达,)主动上报自己做题的情况,复用的是老师处理学生做题情况的线程
什么是IO多路复用呢?
多个文件描述符的I/O操作都能在一个线程内并发交替地顺序完成,这里的复用,指的是复用同一个线程。
仍然还是一个线程来处理多个IO流请求,但与单线程的方式不同,其由IO流来主动上报,上报了,那么这个线程就去处理,其他线程等待
I/O多路复用就通过一种机制,可以监视多个文件描述符,一旦某个文件描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。
IO多路复用实现的方式有 select poll Epoll
什么是select
I/O多路复用采用的是select 模型,即系统发出select系统调用,等待内核主动将可 用的文件描述符信息发送给应用一端,fd未准备好,应用会block住socket请 求,当fd就许后,select 会遍历维护的文件描述符发现可用的文件描述符。
select缺点
1.采用线性遍历的方式获取可用的fd文件描述符
2.可维护文件描述符大小有限制为1024
2.epoll模型
1.每当FD就绪,采用系统的回调函数之间将fd放入,效率更高。
2.最大连接无限制
fd 是(file descriptor),这种一般是BSD Socket的用法,用在Unix/Linux系统上。在Unix/Linux系统下,一个socket句柄,可以看做是一个文件,在socket上收发数据,相当于对一个文件进行读写,所以一个socket句柄,通常也用表示文件句柄的fd来表示。
ulimit -n [fd数量]
永久生效、开机启动方式
1.vi /etc/security/limits.conf
2.- nofile 4096
3.重启操作系统
轻量级
1.功能模块少
源代码只保留与http 及核心功能代码,出于性能考虑,不像httpd 有那么丰富的插件。
2.代码模块化
易读,可进行二次改进。
CPU亲和(affinity)
将CPU核心和Nginx工作进程绑定方式,把每个worker进程固定在一个cpu上执行,减少切换cpu的cache miss
,获得更好的性能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。