Nginx、Apache、PHP、MySQL各自的底层工作原理

您所在的位置:网站首页 nginx和php的工作原理 Nginx、Apache、PHP、MySQL各自的底层工作原理

Nginx、Apache、PHP、MySQL各自的底层工作原理

2023-06-13 10:48| 来源: 网络整理| 查看: 265

Nginx的底层工作原理 一、Nginx工作原理 nginx以高性能的负载均衡器,缓存,和web服务器闻名。Nginx由内核和模块组成,当它接到一个HTTP请求时,仅仅通过查找配置文件将客户端请求映射到一个location block,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。因此模块可以看做Nginx真正的劳动工作者。通常一个location中的指令会涉及一个handler模块和多个filter模块。 handler模块负责处理请求,完成响应内容的生成,而filter模块对响应内容进行处理。 Nginx的模块直接被编译进Nginx,因此属于静态编译方式。 二、什么是 FastCGI

FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。

多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等。同时,FastCGI也被许多脚本语言支持,其中就有PHP。

FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,安全性也很差,现在已经很少使用了。

三、Nginx+FastCGI运行原理

Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。

四、Nginx+PHP-FPM PHP-FPM是管理FastCGI的一个管理器,它作为PHP的插件存在,Nginx通过location指令,将所有以php为后缀的文件都交给127.0.0.1:9000来处理,而这里的IP地址和端口就是FastCGI进程监听的IP地址和端口。 五.请解释 Nginx 如何处理 HTTP 请求? 首先,Nginx 在启动时,会解析配置文件,得到需要监听的端口与 IP 地址,然后在 Nginx 的 Master 进程里面先初始化好这个监控的Socket然后,再 fork出多个子进程出来。子进程会竞争 accept 新的连接。此时,客户端就可以向 nginx 发起连接了。当客户端与nginx进行三次握手,与 nginx 建立好一个连接后。此时,某一个子进程会 accept 成功,得到这个建立好的连接的 Socket ,然后创建 nginx 对连接的封装,即 ngx_connection_t 结构体。接着,设置读写事件处理函数,并添加读写事件来与客户端进行数据的交换。最后,Nginx 或客户端来主动关掉连接,到此,一个连接就OK了。 六.Nginx 有哪些负载均衡策略?

负载均衡,即是代理服务器将接收的请求均衡的分发到各服务器中。 Nginx 默认提供了 3 种负载均衡策略:

1、轮询(默认)round_robin2、IP 哈希 ip_hash3、最少连接 least_conn 七.请列举 Nginx 和 Apache 之间的不同点?

Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存

(线程要比进程小的多,所以 worker 支持比 perfork 高的并发),并发过大会榨干服务器资源。

Nginx: 采用单线程来异步非阻塞处理请求

管理员可以配置 Nginx 主进程的工作进程的数量)(epoll),不会为每个请求分配 cpu 和内存资源,节省了大量资源,同时也减少了大量的 CPU 的上下文切换。所以才使得 Nginx 支持更高的并发。 PHP的底层工作原理

PHP 是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。

其执行过程如下:PHP 代码 => Token => 抽象语法树 => Opcodes => 执行

PHP7 内核架构

在这里插入图片描述

Apache运行原理 在这里插入图片描述

MySQL运行原理

在这里插入图片描述

1.连接器管理、Mysql缓存、分析器、优化器、执行器

1、连接器管理

2、Mysql缓存 mysql请求首先看缓存数据,key为sql语句value为查询的结果,如果存在则直接返回。如果没有则直接往下走。 注意:mysql缓存对于一些静态数据比较适合,对于实时性高的数据最好不要使用。

3、分析器 对你执行的sql语句进行解析,首先是词法分析包括一些关键字识别,然后语法分析,查看这条语句是否符合mysql语句

4、优化器 通过你的语句分析,发现那些查询命中索引,还有表之间的连接顺序等

5、执行器 通过上面一系列的验证,使用引擎提供的接口。经过不断的执行将查询的结果存放在结果集中,通过explain可以看到执行器具体扫描了多少行。

2.redo log和binlog两个日志模块 redo log(InnoDB特有的日志模块) 重做日志文件,用于记录事务操作的变化,记录修改后的值,不管事务是否提交。保证数据的完整性binlog 归档日志文件,用于记录对mysql数据库执行更改的所有操作。binlog是追加写,不会覆盖之前的。 3.sql语句的执行流程

update tb_area SET area_name = “beijing” WHERE area_id = 1

首先执行器通过id查到这条记录(搜索树或者查找数据页) ,并加载到内存中。

然后对这条记录的area_name调用引擎写入接口,进行修改。

修改内存中的值,同时更新redolog告知执行器完成写入(状态置为prepare),可以提交事务,执行器将这条操作记录记录在binlog,写入磁盘

完成上述一系列的操作,执行器调用事务提交接口(redolog状态置为commit),完成更新操作。

注意:Mysql的redolog模块写入拆成2步走,prepare和commit,称为两阶段提交。

整个过程为1、redolog的prepare状态 2、binlog的写入 3、redolog的commit状态,保证Mysql的可靠性。如果binlog没有写入并没有提交事务回滚如果binlog写入事务没提交,数据库回复后自动完成commit


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3