设为首页 收藏本站
查看: 1651|回复: 6

[经验分享] Nginx学习之五-nginx基础架构设计

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-7-11 09:50:55 | 显示全部楼层 |阅读模式
一、优秀的模块化设计
(1)高度抽象的模块接口
所有的模块都遵循着同样的ngx_module_t接口设计规范。

(2)模块接口简单,灵活性高
模块的基本接口ngx_module_t足够简单,只涉及模块的初始化、退出以及对配置项的处理,这同时带来了足够的灵活性,是的nginx比较简单的实现了动态可修改性,也就是保持服务正常运行下使得系统功能发生改变。
102 struct ngx_module_s {103     ngx_uint_t            ctx_index;//当前模块在某一类模块中的索引104     ngx_uint_t            index;//当前模块在ngx_modules数组中的序号105 106     ngx_uint_t            spare0;107     ngx_uint_t            spare1;108     ngx_uint_t            spare2;109     ngx_uint_t            spare3;110 111     ngx_uint_t            version;112 113     void                 *ctx;//指向一类模块的上下文结构体,特定类型模块的公共接口114     ngx_command_t        *commands;//处理配置项115     ngx_uint_t            type;//模块类型116 117     ngx_int_t           (*init_master)(ngx_log_t *log);//框架从来不会用到118 119     ngx_int_t           (*init_module)(ngx_cycle_t *cycle);//初始化所有模块时调用。在master/worker模式下,在启动子进程前完成120 121     ngx_int_t           (*init_process)(ngx_cycle_t *cycle);//正常服务器调用122     ngx_int_t           (*init_thread)(ngx_cycle_t *cycle);123     void                (*exit_thread)(ngx_cycle_t *cycle);124     void                (*exit_process)(ngx_cycle_t *cycle);//服务停止前调用125 126     void                (*exit_master)(ngx_cycle_t *cycle);//master进程退出前调用127 128     uintptr_t             spare_hook0;129     uintptr_t             spare_hook1;130     uintptr_t             spare_hook2;131     uintptr_t             spare_hook3;132     uintptr_t             spare_hook4;133     uintptr_t             spare_hook5;134     uintptr_t             spare_hook6;135     uintptr_t             spare_hook7;136 };
上述代码中void*类型的成员ctx一般用于表示在不同类型的模块中一种类型模块所具备的通用性几接口。

(3)多层次、多类别的模块设计
Nginx常用模块机器之间的关系:
SouthEast.jpg



可以注意到,ngx_module_t接口中有一个type成员,指明了nginx允许在设计模块时定义模块类型这个概念。
配置模块的类型是NGX_CONF_MODULE,仅有一个模块。配置模块是所有模块的基础,它实现了最基本的配置项的解析功能(就是解析nginx.conf文件)。
nginx定义了一种基础类型的模块:核心模块,模块类型是NGX_CORE_MODULE。定义核心模块的目的是使得非模块化的框架代码只关注与如何调用6个核心模块。
事件模块、HTTP模块、mail模块这三种模块的共性是:实际上它们在核心模块中各有1个模块作为自己的代言人,并在同类模块中有1个作为核心业务与管理功能的模块。
事件模块是HTTP模块和mail模块的基础。



二、事件驱动架构
nginx采用完全的事件驱动架构来处理业务,这与传统的web服务器(如Apache)是不同的。
对于传统web服务器而言,采用的所谓事件驱动往往局限在tcp连接建立、关闭事件上。一个连接建立后,在其关闭之前的所有操作都不再是事件驱动,这时会退化成按序执行每个操作的批处理模式,这样每个请求在连接建立后都将始终占用着系统资源,直到连接关闭后才会释放资源。
这种传统的web服务器往往把一个进程或线程作为事件消费者,当一个请求产生的事件被该进程处理时,直到这个请求处理结束时进程资源都将被这一个请求所占用。

Nginx则不然,不会使用进程或线程来作为事件消费者,所谓的事件消费者只能是某个模块(在这里没有进程的概念)。只有事件收集、分发器才有资格占用进程资源,它们会在分发某个事件时调用事件消费模块使用当前占用的资源。

Nginx处理事件的简单模型如下图:
SouthEast.jpg



从上面的内容可一看出传统web服务器与nginx之间的重要差别:前者是每个事件消费者独占一个进程资源,后者的事件消费者只是被事件分发者短期调用而已。这种设计使得网络性能、用户感知的请求时延都得到提升,每个用户的请求都所产生的事件都得到及时响应,整个服务器的网络吞吐量都会由于事件的及时响应而增大。但这也会带来一个问题:事件消费者都不能有阻塞行为,否则由于长时间占用事件分发者进程而导致其它事件得不到及时响应。


三、请求的多阶段异步处理

请求的多阶段异步处理是基于事件(也只能基于事件)驱动架构实现。就是把一个请求的处理过程按照事件的触发方式分为多个节点,每个阶段都由事件收集、分发器来触发。

其优势:
这种设计配合事件驱动架构,将极大地提高网络的性能,同时使得每个进程全力运转,不会或者尽量少的出现进程休眠状况。因为一旦出现进程休眠,必然减少并发处理事件的数目,一定会降低网络性能,同时会增加请求处理时间的平均时延。这时,网络性能无法满足业务需求将只能增加进程数目,进程数目过多就会增加操作系统内核的额外操作:进程间切换。频繁的进程切换仍会消耗CPU等资源,从而降低网络性能。同时,休眠的进程会使进程占用的内存得不到有效释放,这最终必然导致系统可用内存的下降,从而影响系统能够处理的最大并发连接数。

参考资料:
《深入理解Nginx》


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-7389-1-1.html 上篇帖子: Nginx学习之四-Nginx进程同步方式-自旋锁(spinlock) 下篇帖子: Nginx学习之六-nginx核心进程模型

尚未签到

发表于 2013-7-15 02:05:05 | 显示全部楼层
谢谢楼主,共同发展

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-7-19 09:32:03 | 显示全部楼层
沙发!沙发!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

累计签到:1 天
连续签到:1 天
发表于 2013-7-23 00:42:03 | 显示全部楼层
男人在结婚前觉得适合自己的女人很少,结婚后觉得适合自己的女人很多。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-7-27 18:45:19 | 显示全部楼层
在一辆拥挤的公车上,一位女郎忽然叫了起来:别挤啦!别挤啦!把人家的奶都挤出来啦!(她拿着酸奶呢)。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-8-2 03:52:03 | 显示全部楼层
如果没有毛片,中国的性教育简直就是一片空白!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-8-7 08:03:14 | 显示全部楼层
爱她,就请为她做无痛人流手术!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表