- 论坛徽章:
- 19
|
本帖最后由 shenlanyouyu 于 2016-05-10 21:36 编辑
1. 如何在实战中熟练使用Nginx?
Nginx是一个安全、快速并且灵活的开源Web服务器,占用系统资源少,并发能力强,稳定较高。现在公司的业务是构建在LNMP架构上的,后台开发人员为了加快环境搭建,使用了LNMP一键安装包。因为Nginx编译安装需要输入大量的命令,如果是配置生产环境需要耗费大量的时间。
在实战中熟练使用Nginx,需要熟悉Nginx的配置文件,熟练掌握配置的通用语法。多练习搭建负载均衡、反向代理,熟能生巧。其次,遇到问题可以通过网络来获取帮助。
同时可以加入邮件讨论组:http://mailman.nginx.org/mailman/listinfo。
学习官方的使用手册: http://mailman.nginx.org/mailman/listinfo
配合一些工具,例如wireshark抓取网络packet来分析;使用gdb attach到Nginx进程来调试分析;使用日志信息来跟踪Nginx的运行等等,掌握Nginx的运行的流程。
2. 如何发挥Nginx的性能?
一、Nginx的进程的模型,是主-从结构,一个master进程,多个worker进程。worker进程通常为CPU的数量。进程职责如下:
(1) master进程是监控进程,充当进程组和用户交互的接口,同时监控worker进程,如果worker进程意外退出,master重新fork一个worker进程。
(2) worker进程完成具体的业务逻辑,等待客户端建立连接,接收客户端的连接请求等等。
前面有网友说worker进程的数量,配置为CPU数量*2。我觉得这样不能提高效率,正确的做法是:
(1) worker进程数=CPU数,进程间切换的代价是最小的。
(2) 其次设置worker进程的CPU亲和性,将worker进程绑定到特定的CPU上面,避免进程在CPU间调度带来的开销
采用上面两个设定可以最大程度地降低进程切换带来的效率损失和提高CPU的利用率。在一个四核CPU上,worker进程的数量如下:
openstack@openstack-VirtualBox:/mnt/share/nginx/nginx-1.6.3$ sudo /etc/init.d/apache2 stop
* Stopping web server apache2 *
openstack@openstack-VirtualBox:/mnt/share/nginx/nginx-1.6.3$ sudo /etc/init.d/nginx start
openstack@openstack-VirtualBox:/mnt/share/nginx/nginx-1.6.3$ ps -aux |grep nginx
root 15816 0.0 0.3 85892 2820 ? Ss 21:10 0:00 nginx: master process /usr/sbin/nginx
www-data 15817 0.0 0.3 86232 3412 ? S 21:10 0:00 nginx: worker process
www-data 15818 0.0 0.3 86232 3412 ? S 21:10 0:00 nginx: worker process
www-data 15819 0.0 0.3 86232 3412 ? S 21:10 0:00 nginx: worker process
www-data 15820 0.0 0.3 86232 3412 ? S 21:10 0:00 nginx: worker process
opensta+ 15822 0.0 0.2 15944 2392 pts/24 S+ 21:10 0:00 grep --color=auto nginx
二、Nginx是事件驱动的Web服务器,支持select/poll/epoll等I/O多路复用函数的实现。使用epoll不会设置文件描述符的增加而导致效率的下降。因为select和poll采用遍历扫描来判断描述符是否有事件发生。监控的文件描述符增加,系统效率就会急剧下降。因此配置使用epoll会提高系统的性能。
3. 如何在理解Nginx源码的基础上,通过编写Nginx插件来提高自己的编程能力?
研究过一部分Nginx的源代码,全部用C语言写的,代码质量非常高。编写Nginx插件,当然需要掌握C语言,C++语言也是可以开发Nginx的,据我所知lua也可以编写Nginx插件。
理解Nginx源码最好的方法就是先用,在使用过程中加深理解。其次选一本好的参考书,辅助学习,好的书籍能够够指导我们学习,达到事半功倍的效果。
(1) 首先下载一份Nginx的源码,搭建编译环境,编译安装。这种方式难度会大一些,需要在源代码目录执行./configure,然后make & make install,其次,要处理很多编译依赖库安装的问题,例如pcre。例如下图:
checking for getaddrinfo() ... found
checking for PCRE library ... not found
checking for PCRE library in /usr/local/ ... not found
checking for PCRE library in /usr/include/pcre/ ... not found
checking for PCRE library in /usr/pkg/ ... not found
checking for PCRE library in /opt/local/ ... not found
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
也可以采用$sudo apt-get install nginx方式来安装。
(2) 使用Nginx,配置Nginx,熟悉并逐渐掌握Nginx的配置和使用,主要理解Nginx的配置语法。
Nginx搭建一个反向代理服务器,将用户的请求分发到不同的后端服务器来处理,由这些服务器完成具体的业务逻辑,通过分布式计算能够大大减少业务处理时间。
(3) 配合一些工具,例如wireshark抓取网络packet来分析;使用gdb attach到Nginx进程来调试分析;使用日志信息来跟踪Nginx的运行等等。
(4) 在使用过程中,理解,通过工具来了解Nginx的运行流程。结合源代码学习,掌握Nginx的模块机制。
(5) 编写负载均衡策略,Nginx中提供了加权轮询、IP哈希等策略,通过参考他们的实现,编写适合自身业务需求的负载均衡策略,添加到Nginx中。
|
|