php 技术沉淀

2021-03-01  本文已影响0人  猿来是八阿哥

一、cgi/fast-cgi/php-fpm

1. cgi

cgi,通用网关协议,它在职责、通信方式、实现要求和安全性上,对 server 和 cgi 程序进行了规范,使得很多语言能在满足 cgi 协议的前提下,和 server 分工合作,实现 web 开发。但 cgi 协议缺少对「server 如何执行 cgi 程序」的规范,使得 cgi 模式下,还停留在 fork-execute-destroy 的模式下,性能抵消。

2. fast-cgi

fast-cgi 主要在「cgi执行方式」和「cgi功能角色」两方面进行了优化。它让 server 和 cgi 以 socket 通信的方式,使得 server 和 cgi 能够单独部署。同时,fast-cgi 协议下,cgi 程序不再是单出的 responser 的角色,还有 authenticate 和 filter 的功能。

3. php-cgi

php-cgi 是 fast-cgi 的一个 php 实现。

4. php-fpm

php-fpm 是 php-cgi 的一个进程管理模型,它以父子进程的方式,让父进程负责:与server通信、加载配置、管理子进程,子进程抢占式获取cgi请求后,负责执行cgi程序获得结果,并返回给父进程。同时,php-fpm提供了平滑终止、平滑启动等进程管理方式。

5. php-fpm 如何平滑终止、平滑重启?

kill -USR2 平滑重启。
kill -INI 平滑终止。

6. nginx 内部执行流程

从 cig 协议上看,server 工作流程:接受客户端 http 请求 -> 选择 cgi 程序处理此请求 -> 将 http 请求转化成 cgi 请求 -> 执行 cgi 程序 -> 得到 cgi 结果响应客户端。

7. nginx 和 php-fpm 通信方式

因为 fast-cgi 中规范了 server 和 cgi 以 socket 方式通信,单独部署。因此,根据 socket 域不同,分为 xxx.sock 本地域和 ip:port 的网络域。在 nginx 中,网络域下直接 upstream 的方式,负载均衡。

8. php-fpm 进程管理方式及适用场景。

MySQL

1. 事务问题
2. 事务级别
3. MySQL锁
4. MySQL的RR如何解决幻读?

InnoDB 组合使用行锁Record Lock和间隙锁Gap Lock将:索引中,本记录和本记录两侧值锁定了,无法更新和插入,所以没有幻读问题。

5. 悲观锁 & 乐观锁
上一篇下一篇

猜你喜欢

热点阅读