欢迎来到天天文库
浏览记录
ID:16282821
大小:1.07 MB
页数:51页
时间:2018-08-08
《源码分析与导读课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、NGINX源代码分析与导读核心系统研发-叔度2010-03-26目录源码结构重要概念与基础设施事件驱动架构HTTP处理流程邮件代理流程NGINX源码结构代码量大约11万行C代码源代码目录结构core(主干和基础设置)event(事件驱动模型和不同的IO复用模块)http(HTTP服务器和模块)mail(邮件代理服务器和模块)os(操作系统相关的实现)misc(杂项)NGINX架构特点非阻塞事件驱动单线程IO复用一个主进程和少量工作进程高度模块化目录源码结构重要概念与基础设施事件驱动架构HTTP处理流程邮件代理流程内存池作用
2、简化内存管理避免内存碎片避免内存泄露分类生命周期全局连接请求大小内存池布局图示一内存池布局图示二缓冲区管理缓冲区对象指针内存文件重要的标志位last_buflast_in_chainflushin_filememory缓冲区管理(2)缓冲链缓冲区的一个单链表高级输出链in/free/busyoutputfiltercontext字符串操作基本类型ngx_str_tNginx自己的字符串API内存操作相关字符串格式化字符串查找格式转换Base64/URL/UTF-8字符串和数字之间的转换数据结构基本的ADT数组链表队列has
3、h表红黑树Radix树特点先添加,再设置按块分配内存日志操作错误日志等级调试访问日志日志格式多日志location相关轮转配置文件指令名称类型设置函数offset解析过程值的初始化与合并配置文件(2)块{}events/http/server/upstream/location变量$内置的自定义的目录源码结构重要概念与基础设施事件驱动架构HTTP处理流程邮件代理流程主进程和工作进程主进程(master)监视工作进程的状态当工作进程死掉后重启一个新的处理信号和通知工作进程工作进程(worker)处理客户端请求从主进程处获得指
4、令做相应的事情主进程和工作进程(2)处理流程示意图主进程的处理流程工作进程的处理流程进程间通信方式信号频道socketpair命令共享内存统计原子操作与自旋锁互斥量事件类型基本数据结构ngx_event_t读、写超时回调函数处理方式立即邮递时间缓存避免多余的gettimeofday(2)缓存内容时间值格式化后的时间字符串时间精度与更新频率轮询后刷新定期更新事件和计时器处理流程计时器的实现动作添加删除获得最小值用红黑树实现复杂度O(logn)工作进程之间的协调多核利用CPU亲缘性惊群问题缘由解决方案锁延迟工作进程之间的协调(
5、2)Accept互斥量IO复用模型系统相关的IO接口水平触发(NGX_USE_LEVEL_EVENT)selectpolleventport边缘触发(NGX_USE_CLEAR_EVENT)kqueueepoll高级IO的使用系统特性sendfilewritevO_DIRECTmmapAIOTCP/IP选项TCP_CORKTCP_NODELAYTCP_DEFER_ACCEPT重新加载配置的流程热代码更新目录源码结构重要概念与基础设施事件驱动架构HTTP处理流程邮件代理流程重要的数据结构连接(ngx_connection_t
6、)HTTP连接(ngx_http_connection_t)HTTP请求(ngx_http_request_t)uriheaders…VIRTUALSERVER重要信息ngx_http_core_srv_conf_t定位流程位置(LOCATION)location树纯文本正则表达式location专属配置命名的locationHTTP上下文作用域分类mainserverlocation获取方式ngx_http_get_module_main_confngx_http_get_module_srv_confngx_http_
7、get_module_loc_conf设置方式ngx_http_get_module_ctxngx_http_set_ctxHTTP处理过程接收数据分析请求找到对应的virtualserver找到对应的location执行phase处理器产生response内容过滤header过滤body将输出发送给客户端请求分析过程阶段请求行头部技巧状态机ngx_strX_cmp函数PHASE和处理器Phase种类POST_READSERVER_REWRITEFIND_CONFIGREWRITEPOST_REWRITEPREACCESS
8、ACCESSPOST_ACCESSTRY_FILESCONTENTLOG处理器(动作表)checkerhandlernextPHASE和处理器phase默认模块列表POST_READrealipSERVER_REWRITErewriteREWRITErewritePREACCESSlimit_req,l
此文档下载收益归作者所有