本文小編為大家詳細介紹“PHP和Serverless有什么關(guān)系”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“PHP和Serverless有什么關(guān)系”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站制作、做網(wǎng)站與策劃設(shè)計,恩平網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:恩平等地區(qū)。恩平做網(wǎng)站價格咨詢:18980820575
PHP 的應用范圍相當廣泛,尤其是在網(wǎng)頁程序的開發(fā)上, 根據(jù)最新 維基百科 顯示,2013年4月的統(tǒng)計資料,PHP已經(jīng)被安裝在超過2億4400萬個網(wǎng)站和210萬臺服務(wù)器上, 而根據(jù) W3Techs 的報告,截至2021年9月, 有78.9%的網(wǎng)站使用PHP。 所以 PHP 是世界第一語言至少在 web 開發(fā)領(lǐng)域并不是戲稱。
而在技術(shù)選型上, PHP 主要采用的是 LAMP(全稱是Linux + apache + MySQL + php) 或者 LNMP(全稱是Linux + nginx + mysql + php), 這種成熟穩(wěn)定的技術(shù)框架推動 PHP web 開發(fā)生態(tài)的繁榮和商業(yè)上的成功。
在傳統(tǒng)的開發(fā)模式中, 開發(fā)者自己需要安裝維護各種軟件的安裝、維護升級:
如果您是一個企業(yè)用戶, 如果業(yè)務(wù)體量變大或者為了生產(chǎn)環(huán)境的穩(wěn)定和可用性, 使用負載均衡是一個必然的選項:
即此時, PHP 開發(fā)者或者線上運維的同學關(guān)心的事情多了起來:
每個增加的生產(chǎn)機器都需要重新安裝一遍相關(guān)軟件, 做相同的 nginx 配置以及 php-fpm 的配置, 以及維護每個生產(chǎn)機器的安全更新
假如開發(fā)的應用需要一個新的擴展, 可能需要人肉每臺機器去增加擴展
負載均衡器隨著業(yè)務(wù)的變更升配, 后面一臺 Worker 機器掛掉了, 如何做運維處理
業(yè)務(wù)的波峰波谷怎么應對才能讓資源的利用率提高
...
如果您是項目組開發(fā)成員比較多的企業(yè)用戶,能不能不需要給每個開發(fā)配置一個安裝的 NLP 的 Linux 機器作為開發(fā)測試機器(或者多人共享一個機器)?
如果您是一個提供網(wǎng)站開發(fā)和托管的 ISV 、外包公司或者創(chuàng)業(yè)公司, 我的客戶都是一些中小企業(yè)的門戶網(wǎng)站, 我怎么提高我后端機器資源利用率以及更好提供定制化服務(wù)?
如果您是一個學生或者準備學習 PHP 開發(fā),本地只有 Windows 電腦, 能不能直接近乎免費的方式獲取 LNP(Linux+Nginx+PHP) 的環(huán)境用來學習呢?
...
帶著這些問題, 我們?nèi)ヌ剿饕幌?Serverless 是如何解決這些痛點的。
什么是 Serverless?
Serverless = Faas (Function as a service) + Baas (Backend as a service), 我們簡單通過兩個圖快速了解相關(guān)概念:
傳統(tǒng)模式
Serverless 模式
圖中的 cdn 和 OSS 就是 BaaS 服務(wù),F(xiàn)C 就是自定義函數(shù)邏輯的 FaaS 平臺, 通過這個對比, 我們能快速得到 FaaS 的特性和好處:
只需要專注業(yè)務(wù)代碼開發(fā), 編寫對應的邏輯即可
極致彈性伸縮, 無需管理服務(wù)器
按量付費,每次調(diào)用按毫秒計費
...
本文后續(xù)討論的 Serverless 主要指的是 FaaS, 如下示意圖, 幾行代碼編寫完畢, 保存到云廠商的 FaaS 平臺, 就完成了一個彈性高可用的 Web API。
PHP 作為一個開發(fā)群體的很大的語言, 各大云廠商的 FaaS,比如阿里云的函數(shù)計算、AWS 的 Lambda (通過 Custom Runtime 間接支持)、 騰訊的 SCF 等都推出了對 PHP 語言的支持, phper 面對前端領(lǐng)域的 Serverless 技術(shù)革新實踐(感興趣的見本文最后的附錄), 應該不遑多讓。以阿里云函數(shù)計算為例, 有很多 PHP 的開發(fā)者有了很多有趣的實踐:
直接使用 gd 或者 ImageMagick 擴展, 實現(xiàn)彈性高可用的圖片、水印等各種 CPU 密集型 API
直接使用 ffmpeg + 性能型實例 + 異步有狀態(tài)調(diào)用完成視頻剪輯合成等音視頻處理業(yè)務(wù)
使用 HTTP 觸發(fā)器實現(xiàn)的函數(shù), 埋點到廣告平臺, 快速實現(xiàn)高可用的買量業(yè)務(wù)
直接將之前基于框架(如 ThinkPHP)實現(xiàn)的 WEB API 直接遷移到 FaaS 平臺,不用再擔心宕機和運維問題了
...
雖然 FaaS 很好地解決了 phper 如下問題:
新業(yè)務(wù)或者開發(fā)新的 web API
存量業(yè)務(wù)中, 有些 CPU 密集型或者彈性要求很高的 API 單獨抽離出來 FaaS 化
但是傳統(tǒng)的開發(fā)模式或者存量業(yè)務(wù),對開發(fā)者有一定的上手和改造成本,比如某 Faas 廠商 PHP Runtime 編程接口示例:
function handler($event, $context) { $eventObj = json_decode($event, $assoc = true); // do your thhings // .... return $eventObj['key']; }
但是能不能更進一步, 開發(fā)者不需要按照 FaaS 廠商的約定的函數(shù)入口能實現(xiàn)一個個的 API, 而是能直接將傳統(tǒng)運行在 LAMP 或者 LNMP 的項目直接 FaaS 化?
答案是肯定的
阿里云函數(shù)計算的 Custom Runtime 以及直接基于 HTTP 協(xié)議的極簡編程模型走在了所有云廠商的前列。
函數(shù)計算啟動Custom Runtime執(zhí)行環(huán)境時,會默認調(diào)用 bootstrap文件(或者您創(chuàng)建函數(shù)的時設(shè)置的 Args參數(shù))啟動您自定義的 HTTP Server, 然后這個HTTP Server接管了函數(shù)計算系統(tǒng)的所有請求,即您所有的函數(shù)調(diào)用請求。
函數(shù)計算 Custom runtime 執(zhí)行環(huán)境底層系統(tǒng)是 Linux, 并且已經(jīng)內(nèi)置的 nginx/1.10.3 和 php-fpm7.4, 對于 PHP 應用,您直接使用即可
以部署一個 wordpress 項目 為例, 只需要將如下目錄直接打包成一個 zip 包在函數(shù)計算平臺創(chuàng)建一個函數(shù)即可:
- bootstrap - nginx.conf - php-fpm.conf - php.ini-production - wordpress
其中 wordpress 目錄是對應的 web 工程, bootstrap 是啟動 nginx 和 php-fpm 的腳本即可:
... echo "start php-fpm" php-fpm7.4 -c /code/php.ini-production -y /code/php-fpm.conf echo "start nginx" nginx -c /code/nginx.conf ...
bootstrap 詳情可參考 WordPress in FC
所以, 使用函數(shù)計算這個 Serverless 產(chǎn)品和傳統(tǒng)的 PHP 開發(fā)相結(jié)合后, 您再也不用考慮負載均衡的事情, 不用考慮擴縮容的事情, 不用管理機器、不用擔心宕機的事情等等, 只需要安安心心把業(yè)務(wù)代碼開發(fā)好即可。
從上圖可以看出:開發(fā)者只需要開發(fā)好自己的業(yè)務(wù)代碼即可,唯一需要考慮的事情, 就是函數(shù)計算這邊擴容不要太多太猛(比如直接在函數(shù)計算平臺設(shè)置下該函數(shù)能彈出的最大實例數(shù)目即可), 給下游自己的 Mysql 數(shù)據(jù)庫過大的壓力即可。
當然, 從原始的傳統(tǒng)的 php web 應用完全遷移到 Serverless 形態(tài)的函數(shù)計算平臺, 某些場景可能需要考慮數(shù)據(jù)持久化問題, 因為函數(shù)計算是無狀態(tài)的, 數(shù)據(jù)持久化保存可以借助 NAS、redis 等服務(wù)完成,以 NAS 為例,流程圖如下:
以 WordPress 為例, 后臺系統(tǒng)上傳的圖片或者 Session 功能都是需要持久化到磁盤的。
設(shè)置 web 工程的文件上傳目錄或者 session 目錄為 NAS 盤的某個目錄, NAS 盤實現(xiàn)持久化
甚至可以將 web 工程直接放到 NAS 盤上, 此時函數(shù)計算純粹就是 LNP 執(zhí)行環(huán)境
比如將 wordpress 工程不作為函數(shù)的代碼包的一部分, 而已提前上傳到 NAS 盤, 只需要設(shè)置好 nginx.conf 中的 root 能知道 web 工程即可, 如上面的 nginx.conf, /mnt/auto 表示掛載的 NAS 目錄,mnt/auto/wordpress 則表示在 NAS 上的 web 工程。
此時對您來說, 函數(shù)再也不用變了, 您可能只是需要開發(fā)新的業(yè)務(wù)代碼, 然后上傳到 NAS 上即可(或者直接使用 git 直接在 NAS 操作,實現(xiàn) web 工程的版本和 git 上的 commit 綁定, 使用 git 實現(xiàn)代碼的快速升級和混滾)
但是從安全生產(chǎn)的角度來說, 還是建議您 web 工程變更最好和函數(shù)的變更相關(guān)聯(lián)
小結(jié)
從上面的討論和陳述中, 我們不難發(fā)現(xiàn), PHP 遇見 Serverless 是一件令人興奮的事情, 讓 phper 有了更大的想象空間。 Serverless 的理念和 PHP 這個語言出現(xiàn)的理念也是一致的: 即讓開發(fā)者最大精力集中在自己的業(yè)務(wù)價值。 PHP 語言一直是 web 領(lǐng)域最好的生產(chǎn)力代表, 而 Serverless 將會讓 PHP 如虎添翼。
我們最后來一一解答下前言中提出的問題:
如果您是一個企業(yè)用戶, 業(yè)務(wù)體量變大或者為了生產(chǎn)環(huán)境的穩(wěn)定和可用性, 如何做?
如上面陳述, 使用函數(shù)計算和傳統(tǒng)的 PHP 開發(fā)相結(jié)合后, 您再也不用考慮負載均衡的事情, 不用考慮擴縮容的事情, 不用管理機器、擔心宕機的事情等等, 只需要安安心心把業(yè)務(wù)代碼開發(fā)好即可。
如果您是項目組開發(fā)成員比較多的企業(yè)用戶,能不能不需要給每個開發(fā)配置一個安裝的 NLP 的 Linux 機器作為開發(fā)測試機器(或者多人共享一個機器)?
是的, 每個開發(fā)者在函數(shù)計算上創(chuàng)建一個自己的 Service/函數(shù)即可, Service/函數(shù)配置開發(fā)測試環(huán)境的 VPC,實現(xiàn)內(nèi)網(wǎng)安全訪問數(shù)據(jù)庫等其他下游服務(wù)。 函數(shù)調(diào)用的時候, 函數(shù)計算會拉一個 NLP 的執(zhí)行環(huán)境來運行您分支上正在開發(fā)的 PHP 代碼。
每個執(zhí)行環(huán)境是相互隔離的
按調(diào)用次數(shù)計費, 不需要預留機器, 免除了機器成本上的浪費
也可以很方便進行壓測等各種事宜
如果您是一個提供網(wǎng)站開發(fā)和托管的 ISV 、外包公司或者創(chuàng)業(yè)公司, 我的客戶都是一些中小企業(yè)的門戶網(wǎng)站, 我怎么提高我后端機器資源利用率以及更好提供定制化服務(wù)?
通常來說, 很多企業(yè)門戶網(wǎng)站訪問量不大, 但是網(wǎng)站掛掉了會引起客戶投訴。每個客戶的網(wǎng)站通過service 或者函數(shù)區(qū)分, 通過函數(shù)名或者service去區(qū)分您自己的客戶: i. 管理方便 ii. 做定制化方便 iii. 做不同vip等級服務(wù)方便。 舉個例子, 您可以快速通過某個函數(shù)的調(diào)用指標情況, 可以看出哪個客戶的網(wǎng)站訪問量大,可以做出客戶畫像以及制定不同的收費和 vip 服務(wù)級別。
如果您是一個學生或者準備學習 PHP 開發(fā),本地只有 Windows 電腦, 能不能直接近乎免費的方式獲取 LNP(Linux+Nginx+PHP) 的環(huán)境用來學習呢?
是的, 只要將如下的文件和文件夾打包成 zip 包去函數(shù)計算控制臺創(chuàng)建函數(shù)即可
- bootstrap - nginx.conf - php-fpm.conf - php.ini-production - myweb | - hello.php
讀到這里,這篇“PHP和Serverless有什么關(guān)系”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。