《Linux C++通信架构实战》第2章

《Linux C++通信架构实战》第2章

  • 安装
    • 前提
    • nginx源码目录
    • 编译安装
    • 启动和使用
  • Nginx整体结构、进程模型
    • Nginx整体结构
    • Nginx进程模型细说

Nginx,轻量级Web服务器,并发处理百万级别的TCP连接,运行稳定,热部署(运行时升级),高度模块化设计,自由许可证,高并发。

用到epoll高并发支持技术,高性能、高扩展性、高可靠性(高稳定性)。

用到许多编程技术,内存池、进程池、事件驱动等。

安装

前提

  • epoll要求Linux内核为2.6及以上。
uname -a
  • PCRE库,用于支持解析正则表达式的函数库。
sudo apt-get install libpcre3-dev
  • zlib库,压缩解压缩功能。
sudo apt-get install libz-dev
  • openssl库,ssl功能相关库,一般用于网站加密通信。
sudo apt-get install libssl-dev
  • nginx库
mkdir /home/kuangxiang/nginxsourcecode
cd /home/kuangxiang/nginxsourcecode
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar -xzvf nginx-1.16.1.tar.gz

nginx源码目录

  • auto目录,一批shell脚本。

cc,检查编译器的脚本;
lib,检查依赖库的脚本;
os,检查操作系统类型的脚本;
types,检查平台类型的脚本;

  • CHANGES文件,修复bug和新增加功能说明。

  • conf目录,默认配置文件。

  • configure脚本文件,编译前执行,用于生成一些中间文件。

  • contrib目录,脚本和工具(vim高亮工具等)。

#色彩单一(蓝白相间)
vim /home/kuangxiang/nginxsourcecode/nginx-1.16.1/conf/nginx.conf

cp -r /home/kuangxiang/nginxsourcecode/nginx-1.16.1/contrib/vim ~/.vim

cd ~
pwd

#色彩丰富
vim /home/kuangxiang/nginxsourcecode/nginx-1.16.1/conf/nginx.conf
  • html目录,欢迎界面(index.html)和错误界面(50x.html)相关的html文件。

  • man目录,帮助文件目录

cd /home/kuangxiang/nginxsourcecode/nginx-1.16.1/man
man ./nginx.8
  • src目录,源代码目录。
  1. core,核心代码
  2. event,event(事件)模块相关代码
  3. http,http(Web服务)模块相关代码
  4. mail,邮件模块相关代码
  5. os,操作系统相关代码
  6. stream,流处理相关代码

编译安装

执行configure脚本目的:识别操作系统,根据操作系统类型进行相应的优化工作以提高性能;生成一些必要的中间文件;生成一些必要的C源码文件、Makefile文件(编译规则文件,make用到)。

cd /home/kuangxiang/nginxsourcecode/nginx-1.16.1/
./configure --help
--prefix,最终安装根目录,默认/usr/local/nginx/
--sbin-path,可执行文件目录和文件名,默认sbin/nginx,基于--prefix根目录
--conf-path,配置文件目录和文件名,默认conf/nginx,基于--prefix根目录
--with模块,默认不编译
--without模块,默认编译
./configure
ls -la

cd objs
ls -la
cat ngx_modules.c

执行后生成objs目录和Makefile文件

  • objs目录:中间文件目录
    ngx_modules.c: 决定编译模块
  • Makefile文件:编译规则文件,make用到

编译

cd /home/kuangxiang/nginxsourcecode/nginx-1.16.1/
make

安装,默认/usr/local/nginx/目录

sudo make install

cd /usr/local/nginx/
ls -la
  • sbin目录,可执行文件
  • conf目录,配置文件
  • logs目录,日志文件
  • html目录,欢迎和错误html文件

启动和使用

ps -ef|grep nginx
ps,查看进程
e,显示所有进程
f,全格式显示

grep,查找命令

启动(执行)

cd /usr/local/nginx/sbin
sudo ./nginx

测试

ps -ef|grep nginx

http://192.168.74.148

Nginx整体结构、进程模型

Nginx整体结构

  1. master进程和worker进程

nginx启动后,产生master进程和worker进程,worker进程的父进程是master进程。

ps -ef|grep nginx
  1. Nginx进程模型

1个master进程+多个worker进程。

master进程,专门管理和监控worker进程。

worker进程做主要工作,接收用户连接请求,实现主要的业务逻辑。

master和worker间通过信号机制、共享内存机制等通信。

这种体系架构(1个master进程+多个worker进程)的稳定性和灵活性体现在,worker进程出现错误意外终止时,master会快速fork新的worker。

  1. 调整worker进程数量

查看processor

grep -c processor /proc/cpuinfo

虚拟机可以设置ubuntu内核数。

/usr/local/nginx/conf/nginx.confworker_process设置worker进程数量。

sudo chmod 777 /usr/local/nginx/conf/nginx.conf
vim /usr/local/nginx/conf/nginx.conf
#worker_process 4

cd /usr/local/nginx/sbin
sudo ./nginx
ps -ef | grep nginx

Nginx进程模型细说

不需要中断与用户连接的情况下,能够重新配置、自动升级。

  1. 重载配置文件
vim /usr/local/nginx/conf/nginx.conf
#不中断用户服务情况下使配置文件生效
cd /usr/local/nginx/sbin
sudo ./nginx -s reload

所有旧的worker退出,产生新的worker。

kill终止旧worker进程,master会自动生成新worker进程。

  1. Nginx热升级

不停止Nginx对外服务的情况下热升级(升级Nginx这个可执行文件)。

  1. nginx的关闭
sudo ./nginx -s stop

简单粗暴的立即关闭(用户访问可能因此而中断,会卡住几秒或者收到错误信息)

sudo ./nginx -s quit

优雅(正常)的关闭,不接受新连接,为当前已经连入的用户服务完毕后再退出。

  1. 总结

Nginx多进程模型,若worker进程执行出错而崩溃(挂掉),不会影响master进程和其他worker进程,且master监控会重新启动新的worker进程。

为提高Nginx运行效率,可将worker进程和具体CPU(Processor)绑定,解决CPU缓存命中率问题。

你可能感兴趣的:(C/C++,整理,tcp/ip,linux,c++,架构)