Nignx学习之前期调研

来源:互联网 发布:单晶片编程 编辑:程序博客网 时间:2024/06/05 07:50

一、用意

计算机是怎么来的?早期的人类使用石器来作为武器和劳动工具。随着蒸汽机、电力的出现,人类开始制造复杂的机械和电力驱动设备来提升工作效率,这些机器或者工具统称为功能固化类机器(fixed-function machine)。随着16世纪文艺复兴的到来,科学技术得到了全方面的复苏,数学得到了快速的发展,从而出现了对数计算、分数计算、开放计算等机器,这些机器需要编写逻辑运算序列来实现某个功能。这些工具叫做(程序固化类机器)fixed-program computer。随着战争的到来,各类武器需要及时快速的计算能力,人类迎来了(存储式机器)stored-program computer,从而一个存储式机器可以完成多个fixed-program computer的功能。
     计算机模型基本还是冯诺依曼结构:存储、控制器、计算器和输入输出。
     
     计算机模型中最丰富的部分就是计算机IO了,一个分支是嵌入式开发;一个分支是网络。对于每一台机器来说,网络都是一个外设IO而已。从另一个角度上来说,一个网络也是一台巨大的计算机,存储中心(内存、外部存储)、外界流入与留出流量(总线均衡)、计算中心(CPU)、代理服务(缓存)等等。整个计算机世界用分形的机制快速向外扩张。而这个世界的核心依旧是冯诺依曼结构,整个系统需达到计算、存储、控制和输出的和谐一致。
     操作系统的架构设计、计算机网络和服务器架构设计是整个计算机领域的核心所在,三者本质上又是息息相关的。
     此外,不管你计算机体系结构如何,计算机的核心目的是要提升人类的生产效率,便捷、快速以及全面地提供个性化信息。我们搭建计算机这个庞大机器的目的必须要明确。个人理解,第一是信息的共享和沟通,让每个人的智慧都能够体现出来,发挥集体的智慧,例如搜索引擎、商品推荐等;第二是提升人类感知世界以及机器感知人类的能力,例如自动驾驶技术、自然语言处理、计算机视觉都在做这方面的工作;第三是提升传统行业的用户体验,例如购买产品、物流、个人生活节奏、身体健康、娱乐等等方面,这个领域也是最丰富的。这些功能完成的基础就是上文提到的计算、存储、控制以及输出的一致,它们为上层提供了丰富的卡槽。
     对此,我一直很疑惑,做产品、做算法还是做基础设施。我现在的解答是不停地实践和思考,实践和思考是获得知识的重要途径,也是唯一的途径。我理解的实践不是模仿者做出一个产品或者服务,而是能够加入自己的模块,创造出一个产品。永远围绕着实践、改造、实验去学习东西,如果你没有环境去做试验的话,这个领域你很难有兴趣学下去并且有所收获。
     我希望通过学习Nignx学习如何高效地利用资源实现高并发,同时如何实现模块化来方便第三方模块的开发。同时了解HTTP等模块的具体实现方式,将以后的推荐系统模块融合进去。高并发、高效利用资源、模块化开发以及重要模块开发是我的学习重点。

二、前期调研

1. 维基百科资料

     全球Server份额图,越大型的公司nginx使用越多,其中top1000的公司nginx使用量超过Apache。
同时Apache作为市场份额最大的Server,Nginx和Apache的对照学习也是不可或缺的。

     此外,使用亚马逊云计算服务的1200万网站中,40%的网站都使用Nginx的服务。而且Nginx的业务增长大多是蚕食了Apache的市场。

2. Quora

     相关讨论比较丰富,相关文档、书籍和博客比较全,适合进行学习。
     资源列表:
          1. 双语博客:Yichun Zhang  http://blog.sina.com.cn/openresty
               语言较通俗而且提倡辩证性思维,只连载了变量和Ngnix配置两张,有github代码。
          2. 淘宝博客:Nginx开发从入门到精通 http://tengine.taobao.org/book/index.html
               没有历史和背景介绍,技术类介绍较干货,不适合入门。
          3. 官方资料:http://wiki.nginx.org/Resources
               有英语和中文资料
          4. 入门书籍:深入理解Nginx : 模块开发与架构解析http://book.douban.com/subject/22793675/
               最近在看这本书,发现最好结合着<鸟哥私房菜基础篇>看, 要不前两章就看蒙了,不知道作者为什么把config配置一股脑儿全放开头几篇,不怕吓跑读者吗?. 先了解Nginx背景知识和相关架构,适合入门 
          5. CSDN博客:江南烟雨 http://blog.csdn.net/xiajun07061225/article/details/9130237
               博客文章写的很细腻,人也很热心。

3. Nginx、Apache与Node.js

     Apache模块多,方便管理,适合对功能要求多的服务。
     Nginx利用较少的资源来实现C10K。
     Node.js实现了服务器和动态语言的双重功能。
     
     Apache和Nginx两者实现高并发的机制不同,Apache使用复制进程(process fork)的方式实现,Nginx使用时间驱动(Event Driven)来实现,从而节约了资源。使用nginx+phpfpm来实现动态页面的生成。
     Apache和Nginx都是HTTP服务器,它们提供静态和动态页面。Apache和Nginx通过识别URLs返回静态页面或者将PHP启动PHP解释器来读取文件,与Mysql交互,最终生成页面。
     Node是一种类似于PHP的动态语言,同时它包含了一个HTTP服务器,它是一个APP服务器。
     通常的应用场景下,往往在Node前加一个Nginx来分流,而是用Node来执行页面的生成。

三、学习重点

如何高效地利用资源实现高并发?
如何实现模块化来方便第三方模块的开发?
HTTP等模块的具体实现方式?
Nginx和Apache的对照学习?

四、参考资料

[1] 互联网领先网站的服务器市场份额 http://w3techs.com/technologies/cross/web_server/ranking
[2] apache以及nginx的区别 http://www.quora.com/Why-do-developers-use-nginx-along-with-Apache
原创粉丝点击