PHP 遇見 Serverless,幫你解決這些痛點!

前言


每個增加的生產機器都需要重新安裝一遍相關軟件,做相同的 nginx 配置以及 php-fpm 的配置, 以及維護每個生產機器的安全更新;
假如開發(fā)的應用需要一個新的擴展,可能需要人肉每臺機器去增加擴展;
負載均衡器隨著業(yè)務的變更升配,后面一臺 Worker 機器掛掉了, 如何做運維處理?
業(yè)務的波峰波谷怎么應對才能讓資源的利用率提高?
PHP 遇見 Serverless
什么是 Serverless
傳統(tǒng)模式

Serverless 模式

只需要專注業(yè)務代碼開發(fā), 編寫對應的邏輯即可 極致彈性伸縮, 無需管理服務器 按量付費,每次調用按毫秒計費 ...

PHP 遇見 Serverless
直接使用 gd 或者 ImageMagick 擴展, 實現彈性高可用的圖片、水印等各種 CPU 密集型 API
直接使用 ffmpeg + 性能型實例 + 異步有狀態(tài)調用完成視頻剪輯合成等音視頻處理業(yè)務
使用 HTTP 觸發(fā)器實現的函數, 埋點到廣告平臺, 快速實現高可用的買量業(yè)務
直接將之前基于框架(如 ThinkPHP)實現的 WEB API 直接遷移到 FaaS 平臺,不用再擔心宕機和運維問題了
新業(yè)務或者開發(fā)新的 web API 存量業(yè)務中, 有些 CPU 密集型或者彈性要求很高的 API 單獨抽離出來 FaaS 化
function handler($event, $context) {$eventObj = json_decode($event, $assoc = true);// do your thhings// ....return $eventObj['key'];}

函數計算 Custom runtime 執(zhí)行環(huán)境底層系統(tǒng)是 Linux,并且已經內置的 nginx/1.10.3 和 php-fpm7.4,?對于 PHP 應用,您直接使用即可
- bootstrap- nginx.conf- php-fpm.conf- php.ini-production- wordpress
...echo "start php-fpm"php-fpm7.4 -c /code/php.ini-production -y /code/php-fpm.confecho "start nginx"nginx -c /code/nginx.conf...
bootstrap 詳情可參考 WordPress in FC(文末附鏈接)


設置 Web 工程的文件上傳目錄或者 session 目錄為 NAS 盤的某個目錄, NAS 盤實現持久化 甚至可以將 Web 工程直接放到 NAS 盤上, 此時函數計算純粹就是 LNP 執(zhí)行環(huán)境 
比如將 wordpress 工程不作為函數的代碼包的一部分,而已提前上傳到 NAS 盤,只需要設置好 nginx.conf 中的 root 能知道 Web 工程即可,如上面的 nginx.conf, /mnt/auto 表示掛載的 NAS 目錄,mnt/auto/wordpress 則表示在 NAS 上的 Web 工程。
此時對您來說,函數再也不用變了,您可能只是需要開發(fā)新的業(yè)務代碼,然后上傳到 NAS 上即可 (或者直接使用 git 直接在 NAS 操作,實現 web 工程的版本和 git 上的 commit 綁定,使用 git 實現代碼的快速升級和混滾)。
但是從安全生產的角度來說,還是建議您 Web 工程變更最好和函數的變更相關聯。
小結
文中涉及鏈接匯總(可滑動)
維基百科:https://zh.wikipedia.org/wiki/PHP?W3Techs:https://w3techs.com/?Custom Runtime簡介:https://help.aliyun.com/document_detail/132044.html?wordpress 項目:https://github.com/devsapp/start-web-framework/tree/master/web-framework/php/wordpress/src?WordPress in FC:https://github.com/devsapp/start-web-framework/blob/master/web-framework/php/wordpress/src/code/bootstrap?
我們最后來回答下前言中提出的問題:
Q1:如果您是一個企業(yè)用戶,業(yè)務體量變大或者為了生產環(huán)境的穩(wěn)定和可用性,如何做?
Q2:如果您是項目組開發(fā)成員比較多的企業(yè)用戶,能不能不需要給每個開發(fā)配置一個安裝的 NLP 的 Linux 機器作為開發(fā)測試機器(或者多人共享一個機器)?
每個執(zhí)行環(huán)境是相互隔離的 按調用次數計費, 不需要預留機器, 免除了機器成本上的浪費 也可以很方便進行壓測等各種事宜
Q3:如果您是一個提供網站開發(fā)和托管的 ISV、外包公司或者創(chuàng)業(yè)公司,我的客戶都是一些中小企業(yè)的門戶網站,我怎么提高我后端機器資源利用率以及更好提供定制化服務?
Q4:如果您是一個學生或者準備學習 PHP 開發(fā),本地只有 Windows 電腦, 能不能直接近乎免費的方式獲取 LNP (Linux+Nginx+PHP) ?的環(huán)境用來學習呢?
- bootstrap- nginx.conf- php-fpm.conf- php.ini-production- myweb| - hello.php
END
PHP 框架 Serverless 最佳實踐:
ThinkPHP:https://github.com/devsapp/start-web-framework/tree/master/web-framework/php/thinkphp/src?Laravel:https://github.com/devsapp/start-web-framework/tree/master/web-framework/php/laravel/src?Wordpress:https://github.com/devsapp/start-web-framework/tree/master/web-framework/php/wordpress/src?Z-BlogPHP:https://github.com/devsapp/start-web-framework/tree/master/web-framework/php/zblog/src?Swoole:https://github.com/devsapp/start-fc/tree/master/custom-function/php74?其他更多: https://github.com/devsapp/start-web-framework
參考引用:
Serverless Architectures:https://martinfowler.com/articles/serverless.html?Backend For Frontend(BFF)in Serverless:https://www.infoq.cn/article/0btajez51ysb_qehr526?關于Serverless 未來對前端開發(fā)影響的具體看法:https://developer.aliyun.com/article/793492?當 SSR 遇上 Serverless,輕松實現頁面瞬開:https://cnodejs.org/topic/5e394e311225c9423dcd9754?
附錄:
前端開發(fā)者全棧化
提高開發(fā)效率,減少前端和后端接口同學的溝通聯調時間, 后端同學只需要做好原子的接口的穩(wěn)定性和可靠性即可, 數據的聚合直接由前端同學通過 BFF 實現

借助于函數即服務(FaaS)的能力,不需要再去搭建傳統(tǒng)的 Node 應用,一個函數就可以變成一個服務,開發(fā)者可以更純粹的關注于業(yè)務邏輯。
FaaS 以函數為單位的形式以及彈性機制,為 SSR 應用帶來了天然的隔離性和動態(tài)修復能力,可以更好的避免頁面間的交叉污染,或一些邊界的異常場景對應用帶來致命性的傷害。
無需運維、按需執(zhí)行、彈性伸縮這些特性,大大降低了 SSR 應用對開發(fā)者的門檻。?
附錄1:https://www.infoq.cn/article/0btajez51ysb_qehr526?附錄2:https://cnodejs.org/topic/5e394e311225c9423dcd9754?

獎勵看到最后的你
:
# 點個在看,并在下方留言互動
# 然后,將截圖發(fā)送至后臺,試試手氣?
# 本周互動獎品是“阿里云定制數據線”
# 本期禮品開獎時間1月25日?

