1 / 24
文档名称:

Nginx 原理代码分析.doc

格式:doc   页数:24页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Nginx 原理代码分析.doc

上传人:xxj16588 2016/6/19 文件大小:0 KB

下载得到文件列表

Nginx 原理代码分析.doc

相关文档

文档介绍

文档介绍:Nginx 原理代码分析 Nginx 原理代码分析时间:2010-12-06 10:07 来源: 互联网作者:网络点击:次 1、剖析 Nginx 等单线程服务器设计原理与性能优势 Nginx 现在正在以光的速度蔓延开来, 他以其稳定性和高性能等众多优点迅速扩大市场, 大家都知道, Nginx 是以单线程为基础的, 那么他怎么能在并发性上取得优势的呢?会不会因为网络阻塞而导致主线程阻塞呢?下面就 1 、剖析 Nginx 等单线程服务器设计原理与性能优势 Nginx 现在正在以光的速度蔓延开来,他以其稳定性和高性能等众多优点迅速扩大市场, 大家都知道, Nginx 是以单线程为基础的, 那么他怎么能在并发性上取得优势的呢?会不会因为网络阻塞而导致主线程阻塞呢?下面就相关问题作一些概念性的阐述。问题的根本在于人们对于计算机处理性能还没有足够的认识, 以及普通的服务器架构简化的处理, 做过大型的成熟服务器的人可能都知道,解决一个系统瓶颈比优化 1000 个算法还重要,这也就是木桶效应, 一个桶能盛水的多少决定于最短的那一块板, 我们之所以在一般的服务器端应用软件中采用一个连接一个线程甚至阻塞在一个线程上的做法, 并不是这个方法是最优秀的, 设计者没有更好的方法, 而是因为这种套路是最简单的, 在概念上以及操作上都比较容易让人理解, 并且容错性也强, 但是对于性能要求极高的服务器比如 dns 或者负载均衡等等, 要求处理速度极快, 并且能有较高的并发性, 这种简单的线程池加连接池的做法就不能解决问题了,比如一个 index 页面请求,他会包含几十个附属资源文件,如果 cilent 网络比较慢, 那么就会较长时间的阻塞这几十个连接, 用户稍微一多服务器就受不了,因为线程的开销是很大的,如果不能得到迅速释放,将会给服务器带来灾难性的后果, 对于公网服务, 这种之后会尤为明显, 很显然,让服务器为客户端的网速买单是愚蠢的做法。那么既然多线程都会存在这样的问题单线程怎么会逃脱的调呢?解决问题的关键在于异步 IO, windows 上有 IOCP (完成端口, 对于一部 IO 包装的比较多,内部实现时用 cpu 个数的线程进行事件处理,他会通知你你给定的异步读写已经完成了), linux 上有 epool( 一个纯事件通知接口,他会通知你可以读或者可以写了) ,如果将所有的请求简化为阻塞操作和非阻塞操作问题就简单了, 所有需要阻塞请求的部分全部由 epool 触发相应事件, 非阻塞( 处理耗时很短) 部分用主线程一直执行, 直到遇到阻塞部分就停止, 交由阻塞部分监听异步完成事件,这样就构成了事件驱动模型。这里比较容易迷惑人的地方是很多人认为函数的处理会阻塞主线程,其实还是上面说的木桶效应,他是不是那块最短的木板,这是需要由测试和经验来决定的,事实是他的处理时间占用很短, 做 100 万次 for 循环说不定比局域网经过一次网络访问的时间还要短, 理解了这点就不难理解了, 如果说你的服务器每秒钟能处理 1 万个请求, 那么在处理功能函数上( 比如解析协议, 操作、输出等等) 顶多也就占用 - 秒, 剩下的时间都是耗时在了网络阻塞上, 耗时在了事件发生上了, 既然如此, 把操作部分独立分出来用多线程执行又有什么意义呢?对于公网就更不用说了,网络等 IO 阻塞才是影响服务器的主要因素,是那块短了的板。对于网络的 IO, IOCP 、 epool 等事件通知机制就解决了这个问题,性能上由于是阻塞的,所以还不如直接 accept 等快,但是对于网络延时很严重的情况下性能反而显得更好, 因为他们可以处理大量的连接而不使性能下降很厉害,如果值直接阻塞能连接处理 100 0 个的话, epool 等就可以同时处理 3-5 万个, 所以实际的应用价值要大得多。剩下的部分就是处理事件发生后的事情上面, 我前面的文章已经作了说明,在此不再重复, Nginx 、 lighttpd 等都是基于这类模型开发的,有兴趣的可以研究一下他的代码。 2、 Nginx 等 web 服务器设计中关于相关注意事项与心得 1) sokcet 和文件 fd 的关闭问题: 看起来这是个简单的问题, 但是正如内存分配和释放一样,这里也是很容易发生问题的一个地方,在做到反向代理的时候遇到了一个新的问题,一个 fd 会伴随这另外的 socket fd, 或者会产生一个文件 fd, 这些描述服在一次服务结尾的时候进行释放是理所当然的,但是是程序就会有异常,这些 fd 很容一在异常处理中被忽略,举例来说,我在处理 keep - aliv e 的长链接的时候就发生了问题,事情是这样的: 一方面不知道用户什么时候关闭连接,第二方面对于一个连接的重用会进行有异于关闭的相关操作, 第三方面, 如果在

最近更新

区块链技术在供应链金融科技中的应用研究-洞察.. 44页

古诗吟唱前21~40首 21页

数字出版产业链中的数据安全研究-洞察阐释 43页

口语交际的教学策 25页

数字化农业与精准农业的融合发展-洞察阐释 42页

香料作物抗病虫害的绿色防控技术研究-洞察阐释.. 43页

绿色技术驱动的循环城市-洞察阐释 41页

水能发电行业的SWOT分析与技术革新-洞察阐释 44页

绿色金融可持续投资细分市场-洞察阐释 44页

智能边缘计算驱动的双臂协作机器人系统优化-洞.. 45页

第十七章原子核与放射性详解演示文稿 23页

最新人教八级物理下册第八章第二节二力平衡讲.. 22页

口腔医学英语讲义 72页

实验四类风湿因子检测讲课文档 25页

第四章老年人营养与排泄的护理讲课文档 156页

基于LSTM-Attention与自适应卡尔曼滤波结合的.. 10页

功能性Fe3O4基磁性纳米粒子的构建及其在乳化油.. 8页

企业发行绿色债券对绿色技术创新绩效的影响研.. 11页

一种PLC自动装车控制系统设计 9页

miR-483-3p靶向FGFR2调控细胞焦亡在心肌纤维化.. 8页

受压构件承载力计算 62页

血液和造血系统疾病总论3讲课文档 40页

人教地理七上第三章气温的变化与分布优质讲课.. 26页

滚动轴承的寿命计算 17页

各类合金元素在不锈钢中的作用讲课文档 25页

感觉与疼痛功能的评定演示文稿 68页

生殖内分泌疾病闭经2讲课文档 41页

原生动物和海绵动物 68页

原子结构的发展史 28页

血液透析相关基础知识系统性总汇详解演示文稿.. 112页