企业高性能web服务总结

描述:

单次Web访问流程是一个从用户输入URL开始,经过DNS解析、TCP连接建立、HTTP请求与响应、浏览器解析与渲染,最后断开TCP连接的完整过程。这个过程中涉及多个协议和技术的协同工作,确保了Web服务的可靠性和高效性。

一、定义与特点

高性能Web服务器是指能够处理大量并发请求、提供快速响应速度,并在高负载下保持稳定的Web服务器。它们通常具备以下特点:

  • 高并发处理能力:能够同时处理成千上万的并发连接,确保在高流量情况下依然能够稳定运行。
  • 低延迟响应:通过优化处理流程和缓存机制,减少用户请求的响应时间。
  • 高可靠性:具备强大的容错和恢复能力,能够在硬件或软件故障时自动切换或恢复服务。
  • 可扩展性:支持模块化设计,易于通过添加新模块或升级硬件来扩展服务器性能。
  • 资源利用率高:在提供高性能服务的同时,能够合理利用系统资源,降低运营成本。

二、常见的高性能Web服务器

  1. Nginx
    • 概述:Nginx是一款开源的高性能HTTP和反向代理服务器,以其高并发、低内存消耗和可扩展性著称。
    • 特点:支持异步非阻塞处理机制,能够处理数十万甚至上百万的并发连接;模块化设计,易于扩展;支持反向代理、负载均衡和HTTP缓存等功能。
    • 应用场景:广泛应用于Web服务、反向代理、负载均衡、静态文件处理以及SSL/TLS加密等方面。
  2. Apache
    • 概述:Apache是世界上最流行的Web服务器之一,以其稳定性和丰富的功能集而闻名。
    • 特点:支持多种操作系统和平台;模块化设计,支持多种扩展模块;具备强大的安全机制和日志记录功能。
    • 应用场景:适用于需要高稳定性和丰富功能的Web应用场景。
  3. Lighttpd
    • 概述:Lighttpd是一款轻量级的Web服务器,以其高性能和低资源消耗为特点。
    • 特点:采用事件驱动和异步非阻塞I/O模型,能够处理大量并发连接;支持FastCGI、SCGI等多种后端接口;配置简单灵活。
    • 应用场景:适用于对性能要求较高且资源有限的环境。

三、关键技术与应用场景

  1. 异步非阻塞处理机制:通过异步非阻塞的方式处理用户请求,可以显著提高服务器的并发处理能力。Nginx和Lighttpd等服务器均采用了这种机制。

  2. 负载均衡:通过负载均衡技术,将用户请求分发到多个后端服务器上进行处理,以提高系统的整体性能和可靠性。Nginx等服务器支持多种负载均衡算法和策略。

  3. HTTP缓存:通过缓存经常访问的静态资源,可以减少对后端服务器的请求次数,提高访问速度。Nginx等服务器内置了强大的缓存机制。

  4. SSL/TLS加密:提供安全的HTTPS访问服务,保护用户数据在传输过程中的安全。Nginx等服务器支持SSL/TLS加密协议。

四、未来发展趋势

随着云计算、大数据和人工智能等技术的不断发展,高性能Web服务器将面临更多的挑战和机遇。未来,高性能Web服务器将更加注重以下几个方面的发展:

  • 云原生支持:与云计算平台深度融合,提供更加灵活和高效的部署和管理方式。
  • 智能化运维:通过AI和机器学习技术实现自动化运维和故障预测,降低运维成本和提高系统稳定性。
  • 安全性增强:加强安全机制建设,应对日益复杂的网络攻击和威胁。
  • 绿色节能:采用更加环保的硬件和节能技术,降低服务器的能耗和碳排放。

实验--nginx源码编译:

实验工具:rhel9(nginx):172.25.254.100

nginx:

使用脚本修改IP:

vmset.sh ens160 172.25.54.100 nginx.node1.timinglee.org

下载nginx:

nginx: download【选择pgp的】

eget https://nginx.org/download/nginx-1.24.0.tar.gz

解压缩:

tar zxf nginx-1.24.0.tar.gz 

进入nginx目录:

cd nginx-1.24.0/

【configure:用于检测环境是否缺损】

使用configure检测系统目前是否适合这些操作:

 ./configure --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_ssl_module \
> --with-http_v2_module \
> --with-http_realip_module \
>  --with-http_gzip_static_module \
> --with-http_stub_status_module \
> --with-pcre  \
> --with-stream   \
> --with-stream_ssl_module 

结果不适合:

意思是没有C语言编译器

下载C语言编译器:

dnf install gcc -y

再次检测:

下载:

dnf install pcre-devel.x86_64 -y

检测:

查找:

dnf search openssl

下载:

dnf install openssl-devel.x86_64 -y

检测:

下载:

dnf install zlib-devel -y

检测全过产生make规则:

重新检测步骤:

 make clean

目录文件还原:

重新检测:

【产生makefile和objs,检测成功】

项目构建:

make -j2

        进入文件查看:

cd objs/

【nginx绿色的是启动程序,src是插件】

拷贝objs程序到系统目录:

make install

查看拷贝是否成功:

启用脚本:

 /usr/local/nginx/sbin/nginx 

【缺少nginx 用户】

创建nginnx用户:

 useradd -s /sbin/nologin -M nginx

启动nginx,并查看nginx的进程:

./nginx
ps aux | grep nginx

【一个管理进程,一个工作进程】

查看端口:

netstat -antlupe | grep nginx

检测:

查看nginx文件大小:

关闭nginx的debug模式:

/usr/local/nginx/sbin/nginx  -s stop

查看端口:

删除原来编译的东西:

关闭debug:

vim auto/cc/gcc 

重新执行一下,查看关闭结果:

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module  --with-http_gzip_static_module --with-http_stub_status_module --with-pcre  --with-stream   --with-stream_ssl_module 


make && make install

编译环境变量基本文件(将nginx软件的命令执行路径添加到环境变量里):

vim ~/.bash_profile 

开始直接使用:

source ~/.bash_profile 

启动nginx:

nginx

进入浏览器:

nginx平滑升级及版本回滚:

平滑升级:

下载最新版本nginx:

        地址:nginx: download

wget https://nginx.org/download/nginx-1.26.2.tar.gz

【新版本没有echo模块,需要自己下载】

解压:

tar zxf echo-nginx-module-0.63.tar.gz

tar zxf nginx-1.26.2.tar.gz 

检测新版本:

cd nginx-1.26.2/

 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=/root/echo-nginx-module-0.63 --with-http_ssl_module --with-http_v2_module --with-http_realip_module  --with-http_gzip_static_module --with-http_stub_status_module --with-pcre  --with-stream   --with-stream_ssl_module 

make

 备份nginx:

cd /usr/local/nginx/sbin/
 
ls

\cp -f  /root/nginx-1.26.2/objs/nginx  /usr/local/nginx/sbin/nginx

查看新旧进程:

启动旧的:

启动新的:

 cd sbin/
    ls
 
   cp nginx nginx.24

   \cp -f /root/nginx-1.26.2/objs/nginx  /usr/local/nginx/sbin/
  
   date 

   ll

   ps axu | grep nginx

   pidof nginx

   kill -USR2 55131

 ps axu | grep nginx

回收旧的worker:

       再开一个窗口, 写一个死循环,验证没有断过:

where true
do
curl 172.25.254.100;sleep 1
done
kill -WINCH 55131
ps axu | grep nginx

【主进程的worker消失】

旧的1.24的:

平滑升级到最新版1.26:

版本的回滚:

打开旧的:

kill -HUP  55131

回收新的:

kill -WINCH 55195

查看当前版本:

除去新的:

cd sbin

ls

                 cp nginx nginx.new
[root@nginx sbin]# \cp -f nginx.24 nginx
[root@nginx sbin]# ls

kill -9 55195

           [注意隐藏版本信息的方法:

]

nginx的IO调用及优化原理:

服务端IO:

I/O 在计算机中指 Input/Output IOPS (Input/Output Per Second) 即每秒的输入输出量 ( 或读写次数 )
是衡量磁盘性能的主要指标之一。 IOPS 是指单位时间内系统能处理的 I/O 请求数量,一般以每秒处理的
I/O 请求数量为单位, I/O 请求通常为读或写数据操作请求
服务器的 I/O
磁盘 I/O
网络 I/O : 一切皆文件 , 本质为对 socket 文件的读写

磁盘IO:

磁盘 I/O 是进程向内核发起系统调用,请求磁盘上的某个资源比如是 html 文件或者图片,然后内核通过相
应的驱动程序将目标文件加载到内核的内存空间,加载完成之后把数据从内核内存再复制给进程内存,
如果是比较大的数据也需要等待时间
网络IO:
网络通信就是网络协议栈到用户空间进程的 IO 就是网络 IO

网络IO模型:

网络I/O模型主要包括阻塞型(Blocking I/O)、非阻塞型(Non-blocking I/O)、复用型(I/O Multiplexing)、信号驱动型(Signal-driven I/O)和异步型(Asynchronous I/O)五种。下面分别对这五种模型进行详细解释:

1. 阻塞型I/O(Blocking I/O)

特点

  • 在I/O操作的两个阶段(等待数据准备好和将数据从内核拷贝到用户空间),用户线程都会被阻塞。
  • 线程在等待数据到达时不能执行其他任务,导致CPU资源利用率低。

优点

  • 程序简单,容易实现。
  • 在阻塞等待数据期间,进程/线程挂起,基本不占用CPU资源。

缺点

  • 每个连接需要独立的进程/线程单独处理,当并发请求量大时,内存和线程切换开销大。
  • 扩展性差,不适合处理大量并发连接。

2. 非阻塞型I/O(Non-blocking I/O)

特点

  • 用户线程发起I/O请求时立即返回,但并未读取到数据。
  • 用户线程需要不断发起I/O请求,直到数据到达后,才真正读取到数据,即“轮询”机制。

优点

  • 可以在等待数据期间执行其他任务,提高CPU利用率。

缺点

  • 需要不断轮询,耗费大量CPU时间。
  • 轮询时间难以把握,可能导致程序响应延迟或CPU资源浪费。

3. 复用型I/O(I/O Multiplexing)

特点

  • 通过select、poll、epoll等系统调用,一个线程可以同时监控和处理多个文件描述符对应的I/O。
  • 线程在select或poll调用上阻塞,但可以同时处理多个I/O请求。

优点

  • 可以基于一个阻塞对象,同时在多个描述符上等待就绪,节省系统资源。
  • 适用于处理大量并发连接。

缺点

  • 当连接数较少时,效率可能低于多线程+阻塞I/O模型。
  • 每个I/O请求的过程在select或poll调用上仍然是阻塞的。

4. 信号驱动型I/O(Signal-driven I/O)

特点

  • 通过sigaction系统调用注册一个信号处理函数,当I/O操作准备就绪时,内核会发送一个信号(如SIGIO)通知进程。
  • 进程在接收到信号后,调用相应的信号处理函数来处理I/O。

优点

  • 等待数据期间进程不会被阻塞,可以继续执行其他任务。
  • 适用于需要高效处理多个并发连接且对延迟要求不高的场景。

缺点

  • 信号处理函数的执行可能会受到系统对信号处理函数的限制。
  • 在某些情况下,信号处理函数的执行可能不如直接调用I/O操作高效。

5. 异步I/O(Asynchronous I/O)

特点

  • 用户线程发起I/O请求后,立即返回继续执行后续操作。
  • 当I/O操作完成时,系统通过回调或通知机制告知用户线程。

优点

  • 可以在等待I/O操作完成期间执行其他任务,提高CPU利用率。
  • 适用于需要高并发、低延迟的场景。

缺点

  • 实现相对复杂,需要处理回调或通知机制。
  • 在某些情况下,可能需要额外的系统资源来支持异步操作。

总结 :
1 epoll 只是一组 API ,比起 select 这种扫描全部的文件描述符, epoll 只读取就绪的文件描述符,再加入
基于事件的就绪通知机制,所以性能比较好
2 、基于 epoll 的事件多路复用减少了进程间切换的次数,使得操作系统少做了相对于用户任务来说的无用
功。
3 epoll select 等多路复用方式来说,减少了遍历循环及内存拷贝的工作量,因为活跃连接只占总并发
连接的很小一部分。

nginx命令常用参数:

        

1. 启动Nginx

  • 默认启动:直接使用nginx命令启动Nginx,此时Nginx会使用默认的配置文件(通常是/usr/local/nginx/conf/nginx.conf/etc/nginx/nginx.conf,具体取决于Nginx的安装方式和配置)。
  • 指定配置文件启动:使用-c参数指定Nginx的配置文件,例如nginx -c /path/to/nginx.conf
  • 指定运行目录启动:结合-p参数和-c参数,可以指定Nginx的运行目录和配置文件,例如nginx -p /home/nginx -c /home/nginx/conf/nginx.conf

2. 关闭Nginx

  • 快速关闭:使用-s stop参数向Nginx主进程发送SIGTERM信号,快速关闭Nginx。这可能会导致正在处理的请求被中断。
  • 优雅关闭:使用-s quit参数向Nginx主进程发送SIGQUIT信号,Nginx会等待工作进程完成当前请求后再退出。这是一种更安全的关闭方式。
  • 直接杀死进程:不推荐使用kill命令直接杀死Nginx进程,因为这可能会导致数据丢失或其他不可预见的问题。但如果确实需要这样做,可以使用kill -9 nginx_pid(其中nginx_pid是Nginx主进程的PID)。

3. 重新加载配置文件

  • 重新加载:使用-s reload参数向Nginx主进程发送SIGHUP信号,Nginx会重新加载配置文件,并应用新的配置。这是一种无需重启Nginx即可更新配置的方法。

4. 测试配置

  • 测试配置:使用-t参数测试Nginx配置文件的语法是否正确。如果配置文件存在语法错误,Nginx会输出错误信息。如果配置文件语法正确,Nginx会输出一条确认消息。
  • 详细测试配置:使用-T参数不仅可以测试配置文件的语法,还会将配置文件的完整内容输出到标准输出(通常是终端或控制台)。

5. 显示版本信息

  • 显示版本:使用-v参数显示Nginx的版本号。
  • 显示详细版本信息:使用-V参数显示Nginx的详细版本信息,包括编译器版本和配置参数。

6. 其他参数

  • 设置全局指令:使用-g参数可以在命令行中设置全局指令,这些指令将覆盖配置文件中的相应指令。
  • 指定前缀路径:使用-p参数可以指定Nginx的前缀路径,即Nginx的根目录。

示例

  • 启动Nginx:nginx
  • 指定配置文件启动Nginx:nginx -c /path/to/nginx.conf
  • 测试Nginx配置文件:nginx -t
  • 重新加载Nginx配置:nginx -s reload
  • 显示Nginx版本信息:nginx -v 或 nginx -V

nginx启动脚本编写:

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值