nginx 高性能module开发
nginx是一个非常高效的web server,在其源码中编译进入自己的module可以让自己的module同样的达到高效处理海量并发请求的能力。这里我们看看如何开发nginx moduel。
陶辉
www.taohui.pub
展开
-
在这里,NGINX 创始人 Igor Sysoev 将亲述 NGINX 的诞生史
2020 年 5 月 20 日,一场 NGINX 在国内的盛会、一个所有 NGINX 用户 & 爱好者朝圣的最佳场所,F5 线上技术峰会 – NGINX 专场将以线上直播的形式面向所有开发者召开。届时各位 NGINX 开发者心目中的偶像 NGINX 创始人 Igor Sysoev 以及国内 NGINX 技术专家陶辉老师将空降大会现场,从 NGXIN 创始人的成长经历出发,帮助每一位开发者...原创 2020-04-30 08:46:31 · 2933 阅读 · 0 评论 -
设计模式在C语言中的应用--读nginx源码
市面上的“设计模式“书籍文章,皆针对Java/C++/C#等面向对象语言,似乎离开了面向对象的种种特性,设计模式就无法实现,没有用武之地了。是这样吗?设计模式的概念是从建筑领域引入的,本身从没歧视过面向过程编程语言,它只是对一类问题的普遍解决方案而已。面向对象语言因为有类、多态等特点,使得开发者们容易达到:隐藏细节、封装变化,而这与设计模式的目的比较一致,所以大师们爱把设计模式与面向对原创 2012-02-01 17:20:54 · 33308 阅读 · 19 评论 -
“惊群”,看看nginx是怎么解决它的
在说nginx前,先来看看什么是“惊群”?简单说来,多线程/多进程(linux下线程进程也没多大区别)等待同一个socket事件,当这个事件发生时,这些线程/进程被同时唤醒,就是惊群。可以想见,效率很低下,许多进程被内核重新调度唤醒,同时去响应这一个事件,当然只有一个进程能处理事件成功,其他的进程在处理该事件失败后重新休眠(也有其他选择)。这种性能浪费现象就是惊群。惊群通常发生在ser原创 2012-01-16 15:35:20 · 60202 阅读 · 35 评论 -
nginx module 开发谈(1)
nginx是什么?可能很多人不是很了解,除非是做WEB服务器开发的朋友才可能涉猎,而且如果不懂C语言,又或者对WEB SERVER性能要求不高,也是没必要去研究它的。说到这里,大家想必已经知道,nginx就是一个高性能的WEB SERVER,它的工作就像apache, tomcat一样。那么已经有apache这样的成熟产品了,nginx又有何存在必要呢?下面说下它的特点,各位就明白为何ng原创 2010-05-31 14:21:00 · 13012 阅读 · 0 评论 -
nginx module 开发谈(2)
nginx的module开发很弱,首先它不是采用动态库的形式被主进程加载,而是要求module的源码必须和nginx的源码一起编译。我是第一次见到这么BT的家伙,呵呵。所以呢,对module开发者来说,nginx就是一个开发平台,可以把它理解为在nginx这个“OS”上用C语言开发application,而且要遵循nginx的框架。既然是平台,那么像其他OS一样,我们需要搞明白几点:1、程序入原创 2010-05-31 17:19:00 · 8210 阅读 · 6 评论 -
nginx module 开发谈(3)
2、HTTP框架继续上面这个例子,比如当nginx收到一个http请求时,我的module需要处理这个请求,那么我应该怎么做?实际这个问题还要再细分。如果是希望nginx收到完整的HTTP请求,再交给我的module处理?又或者只需要接收到完整的http header就给我呢?我把接收完header就交给module处理的code列下,再说下它的处理流程。首先我要在ngx_XXX_in原创 2010-05-31 18:05:00 · 8099 阅读 · 1 评论 -
nginx module 开发谈(4)
3、对HTTP body的处理上面我们已经开始处理http request header了,接下来,如果请求中有body内容,那么需要处理body了。这里你肯定不会想要去阻塞式的读取body吧?body的长度可大可小,网络环境也巨复杂,只要有阻塞操作肯定玩完。Nginx这时已经准备了一个现成的读取body的非阻塞模式给用户,就是ngx_http_read_client_request_body原创 2010-05-31 18:46:00 · 10939 阅读 · 4 评论 -
nginx module开发5 (完结)
upstream机制Nginx提供的upstream机制,是nginx设计理念的忠实体现。异步、无阻塞,这是nginx的追求,任何对这种设计思想的违反,都会导致nginx达不到它预期的性能,包括nginx提供的fastCGI也是如此。 Upstream到底用来干什么呢?就是nginx在正常的请求处理过程中,需要访问其他SERVER,这时,nginx提供了这样的机制,把底层的http原创 2010-08-19 14:13:00 · 10293 阅读 · 7 评论 -
nginx启动期做了哪些事
nginx是个多进程web容器,不同的配置下它的启动方式也是不同的,这里我只说说最典型的启动方式。它有1个master进程,和多个worker进程(最优配置的数量与CPU核数相关)。那么,首先我们要找到main函数,它在src/core/nginx.c文件中。谈到源码了,这时我们先简单看下源码的目录结构吧。nginx主要有下列目录:src/core,这个目录存放了基础的数据结构原创 2011-12-30 17:28:34 · 5611 阅读 · 3 评论 -
nginx module开发利器:subrequest
nginx是个高性能web server,很多时候我们会把它当成reverse proxy或者web server container使用,但有时我们也会开发它的第三方module,因为module才能完全使用nginx的全事件驱动、无阻塞调用机制,充分使用系统资源,达到SERVER最大处理吞吐量。在开发nginx module时,我们最有可能遇到的一件事就是,在处理一个请求时,我们需原创 2012-01-05 16:27:53 · 9307 阅读 · 0 评论