Nginx 第三方模块-漫谈缘起-阿里云开发者社区

开发者社区> 轩脉刃> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9964 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13723 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
11872 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4443 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7315 0
+关注
290
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载