php 技术沉淀

一、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 进程管理方式及适用场景。
  • static 静态。启动固定数量个子进程。没有频繁的进程新建和销毁,适合内存、CPU配置高的机器。进程数量=内存/30MB。
  • dynamic 动态。进程数量在 min/max/idle 间动态调整。适合配置低的机器,能够有效利用硬件性能。
  • 按需。需要多少启动多少。不适合并发突增的业务场景,很少使用。

MySQL

1. 事务问题
  • 脏读:B事务读到了A事务未提交的数据。
  • 不可重复度:事务A在事务B提交前后,两次读取到的数据不一致。
  • 幻读:事务A更新成功后,事务B修改或新增提交后,事务A发现「没有全部更新成功」
2. 事务级别
  • 读未提交:存在脏读、不可重复读、幻读;基本不用;
  • 读已提交:存在不可重复度、幻读;
  • 可重复读:存在幻读;
  • 串行化:顺序执行,效率低;
3. MySQL锁
  • 锁性质:共享锁 & 排它锁
  • 锁粒度:行锁 & 表锁
  • 加锁方式:悲观锁 & 乐观锁
  • 锁类型:意向锁 & 行锁 & 表锁 & 间隙锁
4. MySQL的RR如何解决幻读?

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

5. 悲观锁 & 乐观锁
  • 悲观锁,认为别人修改他需要的数据的几率很高,所以一开始就锁住他需要的数据,避免别人更新。如:select * from xxx where account='123456' for update。直到它处理完提交事务后才释放。
  • 悲观锁,并发性能不好,降低吞吐量。
  • 乐观锁,认为别人修改他需要的数据的几率很低,直到准备提交所做的修改到数据库的时候才会将数据锁住,判断在取数据和更新数据期间是否有人修改过这个数据,因此会存在不可重复读、幻读等问题。
  • 乐观锁,加锁时间短,性能好。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容