Nginx 第三方模块-漫谈缘起

简介:

本文的部分内容和图片摘录于http://tengine.taobao.org/download/nginx@taobao.pdf

为什么要使用nginx模块?我个人觉得taobao这个ppt来做说明是最好不过了

从web服务器结构开始说起:

 

第一个模式(LAMP)

clip_image001

这个结构中,Apache的PHP模块将所有动态网页都使用php解析,所有逻辑结构都放在php中进行处理。

这个结构也是现在最多web网站的架构LAMP(Linux+Apache+PHP+Mysql)

 

Apache的强劲的市场占有率(12月全球市场份额报告)也说明了这个结构的好处是易于理解,开发上手快。存在就是理由,Apache的各种功能模块已经实现很多了,基本上能想到的功能都已经实现了。

 

但是这个结构有其致命的弱点:

1 高并发下性能表现不佳

2 页面主体内容(比如)图片等静态资源访问浪费带宽(当然这个后来大公司都改用CDN来处理)

3 存在慢连接攻击(syn flood)风险

 

模式演变:

clip_image002

 

关于Apache和Nginx的优缺点的讨论请看这里

Apache2.4刚刚发布,宣称it’s “as fast, and even faster than Nginx”.

这里有一个blog对进行了测试实验。

 

第二种模式(LNMP):

clip_image003

Nginx是个轻量级的HTTP server,必须借助第三方的FastCGI处理器才可以对PHP进行解析。现在使用最多的就是nginx+php-fpm+php这个模式了。

 

这里Apache被nginx取代,随之带来的解决优势是:

1 提高并发服务能力

2 可以抵御慢连接攻击

相对于上一个模型,还有其他的优点:

3 静态内容(css,js,pic)等放到CDN上,避免了带宽浪费

4 php对于这些大数据量的数据的处理骤减,减少了php的计算量

 

但是这个模式最大的问题就在于:Php+php-fpm对于nginx本身性能的限制。

nginx本身的极限测试:单机支持200万连接以上(据说,未验证),而php+php-fpm+nginx大概是3万以上。(参考张宴的博客)。当然这个性能已经远远满足了绝大部分的网站。但对于一些超大规模的项目(比如taobao)就必须考虑高并发的性能问题了。

 

好了,现在考虑,为什么一定要使用php呢,nginx是否能完成逻辑呢?

 

模式演变:

clip_image004

从nginx聊开(nginx中文维基):

nginx是轻量级web服务器,它代码不多(v0.5.32才8w多行代码)。Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者。

nginx中的模块都是使用C语言编写的。nginx中模块分为Handler,filter和upstream三种类型。

 

第三种模型:

clip_image005

这种模型彻底放弃了php,逻辑不再依赖php脚本了,直接使用nginx的扩展来完成,这就意味着不需要开启n个fastcgi,不需要使用php进行逻辑操作了,高并发的php的限制也消失了。

 

初次看到这个模型会产生几个问题:

1 nginx如何高效访问Mysql数据库呢?

使用ngx_drizzle模块(国人编写)

 

2 要实现越来越多的nginx模块,发现c语言开发效率太低了,是否有其他脚本引擎呢?

使用lua脚本,ngx_lua模块(taobao两位大神的杰作)

 

nginx_at_taobao的ppt上说taobao在2010年已经在开发大量的nginx模块了,并且在2011年推出了自己的web服务器Tengine(可以看做是nginx的super版本)(看来taobao在web服务器方面是非常强啊!!)

 

这第三种模型是taobao大力推荐和正在使用的:

使用lua脚本(巴西人发明的一种语言,相当高效简易)写nginx扩展

nginx直接连接数据库

将静态资源放到cdn上

保证高并发下的效率的提升

 

nginx的第三方模块http://wiki.nginx.org/3rdPartyModules

目录
相关文章
|
6月前
|
负载均衡 安全 应用服务中间件
Nginx之sticky第三方模块使用解读
Nginx之sticky第三方模块使用解读
|
JavaScript 前端开发 应用服务中间件
Nginx 第三方模块使用与开发
Nginx 第三方模块使用与开发
778 0
Nginx 第三方模块使用与开发
|
Web App开发 大数据 应用服务中间件
|
应用服务中间件 Apache nginx
|
应用服务中间件 nginx PHP
|
缓存 应用服务中间件 nginx
|
应用服务中间件 nginx 安全