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