天天看点

Nginx 第三方模块-漫谈缘起

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

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

第一个模式(lamp):

Nginx 第三方模块-漫谈缘起

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

这个结构也是现在最多web网站的架构lamp(linux+apache+php+mysql)

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

1 高并发下性能表现不佳

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

模式演变:

Nginx 第三方模块-漫谈缘起

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

第二种模式(lnmp):

Nginx 第三方模块-漫谈缘起

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本身性能的限制。

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

Nginx 第三方模块-漫谈缘起

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

第三种模型:

Nginx 第三方模块-漫谈缘起

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

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

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

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

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

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

nginx直接连接数据库

将静态资源放到cdn上

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

继续阅读