深入理解Nginx:模块开发与架构解析 读书笔记

Nginx的作用

当我们在设计高性能web服务器的时候,我们第一选择是使用Nginx,因为nginx对服务器性能上的挖掘已经到了非常高的水平,Nginx采用了无阻塞分阶段的事件驱动框架。当nginx不能那个完全实现我们的业务需求的时候,我们可以在Nginx后端搭建一个非nginx服务器,利用前段的Nginx服务器来做负载均衡,但是这时候我们又会遇到,在设计后端服务器的非阻塞时间架构的问题。(解决nginx已经解决过的无阻塞问题)。所以唯有开发一个实现了所需功能的自定义Nginx模块嵌入到nginx代码中,才能充分挖掘服务器的硬件资源。


Nginx的适用场景

Nginx是一个优秀的事件驱动框架,虽然他在HTTP上的处理非常出色,但是nginx适用开发在传输层以TCP对外提供服务的服务器程序。主要优势如下:

1.将网络(相关socket),磁盘(输入输出)以及定时器(优先队列)等异步事件做了非常好的封装,基于他的开发可以忽略事件处理的细节。其实这里就是利用IO复用和non-block编程封装了底层细节。

2.Nginx封装了许多平台无关的接口,容器,适用于跨平台开发(由于Nginx是C语言开发的,其中已经实现了相当多的动态数组,hash表,链表等),估计接口上也做了封装,根据实际的场景选用不同的系统调用接口。

3.优秀的模块化设计,轻易地复用现有模块,其中包括了基本的读取配置,日志模块,也包括处理HTTP以及mail的高级模块。

4.Nginx本身就是作为服务器来设计器框架的,因此在服务进程的管理上相当出色,轻松实现程序的动态升级,子进程的监控,管理,配置项的动态加载。

5.Nginx对各项系统系统调用接口,以及一些实现做了大量优化尤其是针对linux操作系统。(针对linux使用了epoll来处理大并发,利用sendfile系统调用来将裁判的数据发送到网络上,不需要把硬盘数据先复制到用户态内存再发送)


如果我们想以低负载来处理高并发的请求并且处理基于TCP的服务器程序时推荐使用Nginx,通过开发一种新的模块类型,实现一种新的功能框架,提供非常好的扩展性。

Nginx的优势

1.单个请求响应更快,峰值响应更快。

2.高扩展性,Nginx由不同功能不同层次不同类型切耦合度低的模块构成。

3.高可靠性,来自于其核心框架代码的优秀设计,模块设计的简单性。每个worker进程相对独立,master进程在woker进程出错时可以快速拉起新的worker子进程。

4.低内存消耗,10000个非活跃的HTTP Keep-Alive连接在Nginx只消耗2.5M的内存。

5.单机支持10万以上的并发请求,理论上Nginx支持的并发连接数上限取决于内存。

6.热部署,master进程与woker工作进程的分离设计,是的具有热部署的功能。

你可能感兴趣的:(网络编程)