偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

為什么要推薦使用現(xiàn)代化PHP框架?

開(kāi)發(fā) 前端
純C擴(kuò)展的PHP MVC框架由于研發(fā)難度大,不易修改,學(xué)習(xí)成本相對(duì)較高,故直到近幾年才出現(xiàn),比如Yaf、Phalcon等。

概述

PHP語(yǔ)言從1995年發(fā)布,至今已經(jīng)有29多年的歷史,在期間涌現(xiàn)了成千上萬(wàn)的MVC框架,大致可以將其分為以下三大類:

公司內(nèi)部自研

有大量的公司會(huì)自研MVC框架,會(huì)根據(jù)自身業(yè)務(wù)的特性打造適合自身的PHP框架。

PHP開(kāi)源框架

現(xiàn)PHP開(kāi)源社區(qū)流行的PHP MVC框架有Yii、Laravel、CodeIgniter、ZendFrameWork、Symfony等;

C擴(kuò)展

純C擴(kuò)展的PHP MVC框架由于研發(fā)難度大,不易修改,學(xué)習(xí)成本相對(duì)較高,故直到近幾年才出現(xiàn),比如Yaf、Phalcon等。

上述三類的PHP MVC運(yùn)行的環(huán)境為L(zhǎng)A(N)MP,而且其中的A(N)是不可或缺的,也就是說(shuō)他們都需要依賴Web Server來(lái)承接用戶的請(qǐng)求,將請(qǐng)求轉(zhuǎn)發(fā)給PHP進(jìn)程,解析并執(zhí)行PHP代碼,而這樣的工作模式是所有PHPer根深蒂固的認(rèn)知,甚至筆者在前幾年聽(tīng)到有人說(shuō)我們可以拋棄php-fpm,nginx,心想簡(jiǎn)直是無(wú)稽之談。

隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,大量公司的后端技術(shù)架構(gòu)都在往微服務(wù)架構(gòu)變遷,微服務(wù)架構(gòu)要求我們盡可能的將我們的業(yè)務(wù)拆分到獨(dú)立的部署單元,當(dāng)然微服務(wù)框架的好處是很“誘人”的,但是它會(huì)帶來(lái)大量的成本開(kāi)銷和性能開(kāi)銷,如何在微服務(wù)架構(gòu)實(shí)踐中節(jié)約成本和提升性能是我們不可邁過(guò)的溝壑。

那在PHP生態(tài)中傳統(tǒng)的LA(N)MP能滿足微服務(wù)框架的需求嗎?

答案顯然是不能的。就目前PHP的fastcgi進(jìn)程管理器php-fpm和nginx的配合已經(jīng)運(yùn)行得足夠好,但是由于php-fpm本身是同步阻塞進(jìn)程模型,在請(qǐng)求結(jié)束后釋放所有的資源(包括框架初始化創(chuàng)建的一系列對(duì)象),導(dǎo)致PHP進(jìn)程空轉(zhuǎn)(創(chuàng)建銷毀創(chuàng)建) 消耗大量的CPU資源,從而導(dǎo)致單機(jī)的吞吐能力有限。

我們是不是應(yīng)該切換開(kāi)發(fā)語(yǔ)言?

先簡(jiǎn)單的來(lái)看換開(kāi)發(fā)語(yǔ)言,一個(gè)公司或者團(tuán)隊(duì)切換開(kāi)發(fā)語(yǔ)言的成本是巨大的,它直接面臨著放棄已有的技術(shù)沉淀,學(xué)習(xí)新的語(yǔ)言生態(tài)和習(xí)慣做法,并將現(xiàn)有業(yè)務(wù)的全面重構(gòu),同時(shí)整個(gè)運(yùn)維技術(shù)棧也要同步更新,需要踩過(guò)無(wú)數(shù)個(gè)“坑”,所以我們這里暫不展開(kāi)去講切換開(kāi)發(fā)語(yǔ)言來(lái)解決我們的核心問(wèn)題。

那我們還有什么解決方案?

我們分析我們的業(yè)務(wù)不難發(fā)現(xiàn),90%以上的業(yè)務(wù)都是IO密集性業(yè)務(wù),我們只需要提高IO復(fù)用的能力就可以提升單機(jī)吞吐能力,另外需要將php-fpm同步阻塞模式替換為異步非阻塞模式,當(dāng)然不一定使用php-fpm,就可以解決我們的核心問(wèn)題——性能。不幸的是目前PHP生態(tài)中還沒(méi)有一個(gè)工程級(jí)別的MVC框架能夠滿足我們的需求。

綜上所述,我們需要使用全新的現(xiàn)代化的PHP框架Webman,為微服務(wù)架構(gòu)打下堅(jiān)實(shí)的基礎(chǔ)。

PHP-FPM工作模式的問(wèn)題

圖片圖片

  • Nginx基于epoll事件模型,一個(gè)worker同時(shí)可處理多個(gè)請(qǐng)求
  • fpm-worker在同一時(shí)刻可處理一個(gè)請(qǐng)求
  • master進(jìn)程只負(fù)責(zé)處理worker進(jìn)程的監(jiān)控、日志等
  • 用戶端請(qǐng)求由elb解析,再經(jīng)過(guò)nginx解析
  • fpm-worker每次處理請(qǐng)求前需要重新初始化mvc框架,然后再釋放資源
  • 高并發(fā)請(qǐng)求時(shí),fpm-worker不夠用,nginx直接響應(yīng)502
  • fpm-worker進(jìn)程間切換消耗大(如某線上業(yè)務(wù)在4核8G內(nèi)存服務(wù)器實(shí)質(zhì)可利用16個(gè)進(jìn)程)

壓測(cè)數(shù)據(jù)對(duì)比

目標(biāo)

  1. 對(duì)比在相同硬件條件下,PHP Yii2框架在PHP-5.6及PHP7下echo hello world的QPS,并觀察平均響應(yīng)時(shí)間及CPU。
  2. 對(duì)比現(xiàn)有某服務(wù)在PHP-5.6及PHP7下的QPS

工具

ApacheBench即ab。ab -n xx -c xx -k http://www.tinywan.com/

硬件

aws c4.xlarge(4核8G)

Hello World

PHP-5.6/Yii2

開(kāi)啟opcache,64個(gè)php-fpm進(jìn)程,輸出hello world

n

c

qps

平均響應(yīng)時(shí)間(ms)

CPU

10000

1

662.73

1.509

6%

50000

10

1435.35

6.967

76%

500000

20

1577.16

13.375

83%

500000

50

1626.09

145.953

89%

PHP-7/Yii2

開(kāi)啟opcache,64個(gè)php-fpm進(jìn)程,輸出hello world

n

c

qps

平均響應(yīng)時(shí)間(ms)

CPU

10000

1

854.81

1.170

18%

50000

10

2008.32

4.979

62%

500000

20

2186.90

9.145

65%

500000

50

2304.98

21.692

69%

500000

200

2331.93

85.766

69%

某服務(wù)

  • 1次Redis Get
  • 1次 MongoDB Query
  • 2個(gè)廣告接口
  • 2個(gè)業(yè)務(wù)接口

PHP-5.6/Yii2

n

c

qps

平均響應(yīng)時(shí)間(ms)

CPU

100

1

4.16

240.168

9%

5000

5

15.36

325.502

46%

5000

10

18.72

534.141

83%

5000

50

19.03

2627.159

99%

PHP-7/Yii2

n

c

qps

平均響應(yīng)時(shí)間(ms)

CPU

100

1

3.51

284.876

5%

5000

5

17.23

290.129

21%

5000

10

32.36

309.057

40%

5000

20

52.94

377.784

82%

5000

40

55.52

720.433

91%

結(jié)論

  1. PHP-5.6升級(jí)PHP-7.0,Yii2框架的性能提升43%
  2. PHP-5.6升級(jí)PHP-7.0,某服務(wù)性能提升170%
  3. 單純將業(yè)務(wù)升級(jí)PHP-7.0,能夠提升很大的性能
責(zé)任編輯:武曉燕 來(lái)源: 開(kāi)源技術(shù)小棧
相關(guān)推薦

2021-03-04 14:12:47

數(shù)據(jù)中心創(chuàng)新數(shù)字化轉(zhuǎn)型

2024-01-23 15:21:14

2018-04-09 11:10:04

PHP前端控制器自動(dòng)加載

2022-07-26 06:57:07

數(shù)據(jù)管道端點(diǎn)API

2023-09-17 12:21:21

RemixNext.js

2023-08-18 10:03:32

云計(jì)算云遷移

2010-05-07 14:38:47

Unix KDE

2015-10-29 14:35:21

移動(dòng)設(shè)備現(xiàn)代化

2022-07-11 05:34:19

云原生應(yīng)用程序

2023-12-07 11:38:25

2023-08-31 10:04:02

Astro 3.0前端

2021-03-18 09:24:11

DrogonC++框架

2020-06-05 14:16:05

醫(yī)藥

2023-05-03 21:47:22

2012-09-26 10:02:44

框架開(kāi)發(fā)項(xiàng)目

2020-05-08 14:47:53

網(wǎng)絡(luò)現(xiàn)代化網(wǎng)絡(luò)IT

2013-03-19 18:04:06

51CTO

2021-04-13 16:13:38

大數(shù)據(jù)教育科學(xué)

2021-07-09 05:25:48

CIO遺留系統(tǒng)現(xiàn)代化用戶體驗(yàn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)