服务器设计
interhanchi
这个作者很懒,什么都没留下…
展开
-
nginx的进程模型
nginx采用的也是大部分http服务器的做法,就是master,worker模型,一个master进程管理站个或者多个worker进程,基本的事件处理都是放在woker中,master负责一些全局初始化,以及对worker的管理。在nginx中master和worker的通信是通过socketpair来实现的,每次fork完一个子进程之后,将这个子进程的socketpaire句柄传递给前...2009-09-13 21:11:45 · 175 阅读 · 0 评论 -
nginx中handler的处理(二)
这次我们来看各个phase的checker的处理。首先我们要弄明白一个事情,那就是在nginx中,一般来说,都是在NGX_HTTP_CONTENT_PHASE中调用outputfilter的,也就是说filter是在handler中调用的,这样看来只能有一个handler能够执行outputfiler.所以说在写nginx的handler模块的话,要注意不同的phase的返回值代表的不同意...2010-05-30 18:33:39 · 488 阅读 · 0 评论 -
nginx中handler的处理(一)
nginx中的处理一个http的请求分为了8个phase,分别是下面几个阶段.其中特别要注意就是几个rewrite阶段。[code="java"]typedef enum {//读取请求phase NGX_HTTP_POST_READ_PHASE = 0,//接下来就是开始处理//这个阶段主要是处理全局的(server block)的rewrite。 ...原创 2010-05-20 01:09:57 · 701 阅读 · 0 评论 -
nginx中的output chain的处理(二)
接着上次的分析继续,这次我们来看filter链中最关键的一个模块,那就是ngx_http_copy_filter_module模块,这个filter主要是用来将一些需要复制的buf(文件或者内存)重新复制一份然后发送给剩余的body filter,这里有个很重要的部分,那就是在这里nginx的剩余的body filter有可能会被调用多次,这个接下来我会一一阐述的。先来看它的初始化函数:[...2010-05-09 13:45:42 · 470 阅读 · 0 评论 -
nginx中锁的设计以及惊群的处理
nginx中使用的锁是自己来实现的,这里锁的实现分为两种情况,一种是支持原子操作的情况,也就是由NGX_HAVE_ATOMIC_OPS这个宏来进行控制的,一种是不支持原子操作,这是是使用文件锁来实现。首先我们要知道在用户空间进程间锁实现的原理,起始原理很简单,就是能弄一个让所有进程共享的东西,比如mmap的内存,比如文件,然后通过这个东西来控制进程的互斥。说起来锁很简单,就是共享一...2010-05-03 02:13:15 · 303 阅读 · 0 评论 -
nginx中的output chain的处理(一)
这里我们详细来看ngx_linux_sendfile_chain方法,这个函数也就是nginx的发送函数。一般来说,我们最终都会调用这个函数来发送最终的数据,因此我们来着重分析这个函数,这里主要就是对buf的一些参数的理解。来看函数原型:[code="java"]ngx_chain_t *ngx_linux_sendfile_chain(ngx_connection_t...2010-04-24 00:59:05 · 535 阅读 · 1 评论 -
nginx的filter的处理
随笔拿一个nginx的filter模块来看,gzip模块,来看它的初始化。[code="java"]static ngx_http_output_header_filter_pt ngx_http_next_header_filter;static ngx_http_output_body_filter_pt ngx_http_next_body_filter;st...2010-04-13 00:38:12 · 353 阅读 · 0 评论 -
nginx中request请求的解析
ngx_http_init_request 中初始化event 的handler 为ngx_http_process_request_line,然后首先调用ngx_http_read_request_header来读取头部,然后就是开始调用函数ngx_http_parse_request_line对request line进行解析。随后如果解析的url是complex的话,就进入complex...2010-04-04 01:15:23 · 940 阅读 · 0 评论 -
linux已经不存在惊群现象
惊群也就是指多个进程阻塞在accept,当有连接完成,会唤醒所有进程。经过测试,发现现在的内核已经修复了这个问题,当有多个进程阻塞在accept,只会唤醒一个进程。下面这个是一篇论文,就是讲这个问题的。http://www.usenix.org/event/usenix2000/freenix/full_papers/molloy/molloy.pdf这里会先测...2010-01-02 22:10:08 · 200 阅读 · 0 评论 -
nginx的内存管理
先来看内存池的实现,nginx的内存池实现的非常简单。这里内存池的一些图表可以看老朱同学的slides :http://blog.zhuzhaoyuan.com/2009/09/nginx-internals-slides-video/当内存池初始化的时候(下面会分析到)ngx_poll_s只相当于内存池的一个头,保存了当前内存池的一些必要信息而已。当从内存池存取数...2009-12-10 01:20:19 · 485 阅读 · 0 评论 -
nginx中sub_request的处理
首先来看subrequest的处理。什么是subrequest,顾名思义,那就是子请求,也就是在当前的一个请求中nginx再生成一个请求。比如在nginx的HttpAddition这个filter,就有用到subrequest。这里要注意,一个subrequest是当父reuest执行完毕后才会被执行,并且它会将所有的需要进行的handler phase重新执行一遍(这个我们后面的...2010-06-30 18:17:01 · 545 阅读 · 0 评论