重大发现!看Apache与nginx工作模型,享web服务幸福人生

news2025/3/11 3:11:30

文章相关连接如下:

  • 如果想更多了解nginx,请点击:企业高性能web服务器之nginx篇,明早发布
  • 想看看I/O模型的小伙伴请走这:I/O模型

Web 服务基础介绍

Apache

Apache prefork 模型

  • 预派生模式,有一个主控制进程,然后生成多个子进程,使用select模型,最大并发1024
  • 每个子进程有一个独立的线程响应用户请求
  • 相对比较占用内存,但是比较稳定,进程之间不会有影响,可以设置最大和最小进程数
  • 是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景
    在这里插入图片描述

优点:稳定

缺点:每个用户请求需要对应开启一个进程,占用资源较多,并发性差,不适用于高并发场景

Apache worker 模型

  1. 一种多进程多线程混合的模型
  2. 一个控制进程,启动多个子进程
  3. 每个子进程里面包含固定的线程
  4. 使用线程处理请求
  5. 当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,
  6. 由于其使用了线程处理请求,因此可以承受更高的并发
    在这里插入图片描述

优点:相比prefork 占用的内存较少,可以同时处理更多的请求

缺点:使用keepalive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用(该问题在prefork模式下,同样会发生)

Apache event模型

  • Apache中最新的模式,2012年发布的apache 2.4.X系列正式支持event 模型,属于事件驱动模型(epoll)
  • 每个进程响应多个请求,在现在版本里的已经是稳定可用的模式
  • 它和worker模式很像,最大的区别在于,它解决了keepalive场景下长期被占用的线程的资源浪费问题(某些线程因为被keepalive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)
  • event MPM中,会有一个专门的线程来管理这些keepalive类型的线程
  • 当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场
    景下的请求处理能力
    在这里插入图片描述

优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keepalive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放

缺点:没有线程安全控制

Nginx-高性能的 Web 服务端

Nginx的工作场景:
在这里插入图片描述

nginx源码安装

#官方源码包下载地址
https://nginx.org/en/download.html

准备编译环境:


[root@server9 ~]# dnf install gcc pcre-devel zlib-devel openssl-devel -y
[root@server9 ~]# cd nginx-1.24.0/
[root@server9 nginx-1.24.0]#useradd -s /sbin/nologin -M nginx
[root@server9 nginx-1.24.0]# ls
[root@server9 nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

在这里插入图片描述
检测没问题后,开始安装
在这里插入图片描述

[root@server9 nginx-1.24.0]# make && make install

nginx完成安装以后,有四个主要的目录
在这里插入图片描述
验证版本及编译参数

[root@server9 nginx-1.24.0]# vim ~/.bash_profile
[root@server9 nginx-1.24.0]# source ~/.bash_profile
[root@server9 nginx-1.24.0]# nginx -v

本地环境变量
在这里插入图片描述
在这里插入图片描述

启动nginx验证:

[root@server9 nginx-1.24.0]# nginx
[root@server9 nginx-1.24.0]# curl 172.25.254.100

在这里插入图片描述
在这里插入图片描述

[root@server9 local]# ps aux | grep nginx

在这里插入图片描述

平滑升级和回滚

平滑升级:

有时候我们需要对Nginx版本进行升级以满足对其功能的需求,例如添加新模块,需要新功能,而此时Nginx又在跑着业务无法停掉,这时我们就可能选择平滑升级

平滑升级流程:
在这里插入图片描述

平滑升级步骤:

[root@server9 ~]# tar zxf nginx-1.26.1.tar.gz
[root@server9 ~]# cd nginx-1.26.1/
# 编译新版本
[root@server9 nginx-1.26.1]# ./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_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

在这里插入图片描述
在这里插入图片描述

只要make无需要make install
在这里插入图片描述

[root@server9 nginx-1.26.1]# make

查看两个nginx版本

[root@server9 nginx-1.26.1]# ll objs/nginx /usr/local/nginx/sbin/nginx

在这里插入图片描述

把之前的旧版的nginx命令备份

[root@server9 ~]# cd /usr/local/nginx/sbin/
[root@Nginx sbin]# cp nginx nginx.24

把新版本的nginx命令复制过去

[root@Nginx sbin]# \cp -f /root/nginx/nginx-1.26.1/objs/nginx  /usr/local/nginx/sbin

检测

[root@Nginx sbin]# nginx -t

在这里插入图片描述
查看版本依然是旧版本生效
在这里插入图片描述

回收旧版本

[root@server9 sbin]# kill -WINCH 36838
[root@server9 sbin]# ps aux |grep nginx
[root@Nginx sbin]# curl -I localhost

在这里插入图片描述
在这里插入图片描述

回滚步骤

如果升级的版本发现问题需要回滚,可以重新拉起旧版本的worker

#先备份
[root@Nginx sbin]# cp nginx nginx.26
[root@Nginx sbin]# ls
[root@Nginx sbin]# mv nginx.24 nginx
[root@Nginx sbin]# kill -HUP 20896
[root@Nginx sbin]# kill -WINCH 24242
[root@Nginx sbin]# curl -I localhost

在这里插入图片描述

在这里插入图片描述

nginx启动文件

[root@Nginx logs]# vim /lib/systemd/system/nginx.service
[root@Nginx logs]# systemctl daemon-reload 
[root@Nginx logs]# systemctl start nginx.service

在这里插入图片描述

[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf
[root@Nginx ~]# mkdir -p /usr/local/nginx/conf.d
[root@Nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf
[root@Nginx ~]# systemctl restart nginx.service

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GH】【EXCEL】P4: Chart

文章目录 data and chartdonut chart (radial chart)Radial Chart bar chartBar Chart line chartLine Chart Scatter ChartScatter Chart Surface ChartSurface Chart Chart DecoratorsChart Decorators Chart GraphicsChart Graphics data and chart donut chart (radial cha…

《面板变系数模型及 Stata 具体操作步骤》

目录 一、文献综述 二、理论原理 三、实证模型 四、稳健性检验 五、程序代码及解释 六、代码运行结果 一、文献综述 在经济和社会科学研究领域,面板数据模型因其能够同时考虑个体和时间维度的信息而被广泛应用。传统的面板数据模型通常假设系数是固定的&#…

1.初识redis

文章目录 1.认识redis1.1 mysql和redis 对比1.2分布式系统1.2.1单机架构与分布式架构1.2.2数据库分离(应用服务器和存储服务器分离)与负载均衡1.2.3负载均衡器1.2.4 数据库读写分离1.2.5 数据库服务器引入缓存1.2.6数据库分库分表1.2.7 引入微服务 2.常见概念解释2.1 应用(Appl…

GoModule

GOPATH 最早的就是GOPATH构建模式, go get下载的包都在path中的src目录下 src目录是源代码存放目录。 package mainimport ("net/http""github.com/gorilla/mux" )func main() {r : mux.NewRouter()r.HandleFunc("/hello", func(w h…

iptables流量走向图

关联教学 https://www.bilibili.com/video/BV1dw411J7Qk/?spm_id_from333.337.search-card.all.click

7.2 算法设计与分析

分治法(考的概率较低) 回溯法(考的概率较低) 动态规划法(考的概率较高) 1

第四届机电一体化、自动化与智能控制国际学术会议(MAIC 2024)

目录 大会官网 会议简介 组织机构 大会主席 程序委员会主席 主讲嘉宾 征稿主题 参会说明 大会官网 http://www.icmaic.org 会议简介 第四届机电一体化、自动化与智能控制国际学术会议(MAIC 2024)将于2024年9月27-29日在中国成都召开。MAIC 20…

高性能MySQL04_操作系统和硬件优化

1. 从软件本身和它运行的典型工作负载来看,MySQL通常也更适合运行在廉价硬件上 2. 基本资源 2.1. CPU 2.2. 内存 2.3. 磁盘 2.4. 瓶颈 2.5. 网络资源 3. CPU 3.1. 最常见的瓶颈是CPU耗尽 3.2. 检查CPU使用率来确定工作负载是否受CPU限制 3.3. 低延迟&…

机器人学——正向运动学(机械臂)

Manipulator Forward Kinematics 机械臂基础概念 Joint and Link 连杆长度、连杆夹角 连杆偏距与关节角 移动关节看距离、旋转关节看角度 如何在杆上建立坐标系 地杆(link0)坐标系的建立 末端杆件坐标系的建立 DH表达法 如何计算出两杆之间的变换矩阵…

Qt鼠标键盘事件监听

普通的程序中. 鼠标事件监听 要监听鼠标事件,你可以使用QMouseEvent类,它提供了多种类型的鼠标事件,如QMouseEvent::MouseButtonPress、QMouseEvent::MouseButtonRelease、QMouseEvent::MouseMove等。 但是离开程序后就很难监听到&#xff0c…

机器学习第十一章--特征选择与稀疏学习

一、子集搜索与评价 我们将属性称为 “特征”(feature),对当前学习任务有用的属性称为 “相关特征”(relevant feature)、没什么用的属性称为 “无关特征”(irrelevant feature).从给定的特征集合中选择出相关特征子集的过程&…

单位订餐小程序开发:便捷高效,重塑职场餐饮新体验

随着移动互联网技术的飞速发展,各行各业都在积极探索数字化转型之路,以提升工作效率与用户体验。在单位日常运营中,餐饮管理作为保障员工基本生活需求的重要环节,其便捷性、高效性直接关系到员工的工作满意度与整体氛围。因此&…

鸿蒙内核源码分析(Fork篇) | 一次调用,两次返回

笔者第一次看到fork时,说是一次调用,两次返回,当时就懵圈了,多新鲜,真的很难理解.因为这足以颠覆了以往对函数的认知, 函数调用还能这么玩,父进程调用一次,父子进程各返回一次.而且只…

linux memory cgroup的memory.move_charge_at_immigrate含义

1.内核文档 上面的例子说明: 最开始某个进程是在cgroup A中,后面要迁移到cgroup B中,那么进程的内存计数是否要完全迁入B中,就是通过memory.move_charge_at_immigrate控制,如果目标cgroup也就是B设置了1到该字段中&am…

猫头虎 分享:什么是Thrift?Thrift的简介、安装、用法详解入门教程

猫头虎 分享:什么是Thrift?Thrift的简介、安装、用法详解入门教程 今天猫头虎带大家一起探讨 一个在人工智能和分布式系统开发中十分重要的工具——Thrift。无论你是AI开发者还是大数据工程师,了解和掌握Thrift都将极大地提高你的跨语言服务…

高性能web服务器

目录 一、简介 (一)nginx-高性能的web服务端 (二)用户访问体验 二、I/O模型 (一)概念 (二)网络I/O模型 (三)阻塞型 I/O 模型 (四&#xf…

AI系列-黑神话:悟空

今天的朋友圈被黑神话悟空刷圈了,喝的咖啡都是黑神话联名版本。四年磨一剑的本地游戏,身边也不少小伙伴用金钱支持了,属于现象级的游戏产品。游戏引擎后续是否可以结合AI文生图,小说编写、文生视频。加快大作的快速生成 &#xff…

Effective-Java-Chapter8-方法

https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual/blob/dev/Chapter-8/Chapter-8-Introduction.md 准则一 检查参数的有效性 首先对于方法要写详细的文档,例如参数要求,抛出什么异常以源码为例: 又比如…

分享一个基于微信小程序的反诈科普平台springboot(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

Web开发:ORM框架之Freesql的入门和技巧使用小结

目录 零、官网链接 一、字段映射表 二、查询 1.freesql独特封装:between关键字 2.分页(每页 20 条数据,查询第 1 页) 3.Withsql(子查询,不建议) 3.简单查询、映射查询 4.参数查询、自定义…