簡介:php 作為乙個開發群體的很大的語言其應用範圍相當廣泛,serverless 的理念和 php 語言的理念都是讓開發者最大精力集中在自己的業務價值。那麼 php 遇見 serverless 會迸發出哪些火花呢?
作者 | 西流
而在技術選型上, php 主要採用的是 lamp(全稱是linux + apache + mysql + php) 或者 lnmp (全稱是 linux + nginx + mysql + php), 這種成熟穩定的技術框架推動 php web 開發生態的繁榮和商業上的成功。
在傳統的開發模式中, 開發者自己需要安裝維護各種軟體的安裝、維護公升級:
1、如果您是乙個企業使用者, 如果業務體量變大或者為了生產環境的穩定和可用性, 使用負載均衡是乙個必然的選項:
即此時, php 開發者或者線上運維的同學關心的事情多了起來:
2、如果您是專案組開發成員比較多的企業使用者,能不能不需要給每個人配置乙個安裝的 nlp 的 linux 機器作為開發測試機器(或者多人共享乙個機器)?
3、如果您是乙個學生或者準備學習 php 開發,本地只有 windows 電腦, 能不能直接近乎免費的方式獲取 lnp(linux+nginx+php) 的環境用來學習呢?
帶著這些問題, 我們去探索一下 serverless 是如何解決這些痛點的。
1)傳統模式
2)serverless 模式
圖中的 1,2 就是第三方 baas 服務, 4,5 就是自定義函式邏輯的 faas, 通過這個對比, 我們能快速得到 faas 的特性和好處:
本文後續討論的 serverless 主要指的是 faas, 如下示意圖, 幾行**編寫完畢, 儲存到雲廠商的 faas 平台, 就完成了乙個彈性高可用的 web api。
在講 php 之前, 我們可以先看看 serverless 在前端領域如火如荼的發展:
雖然 faas 很好地解決了 phper 如下問題:
但是傳統的開發模式或者存量業務,對開發者有一定的上手和改造成本,比如某 faas 廠商 php runtime 程式設計介面示例:
<?php
function handler($event, $context) {
$eventobj = json_decode($event, $assoc = true);
// do your thhings
return $eventobj['key'];
<?php
use ringcentral\psr7\response;
function handler($request, $context): response {
$body = $request->getbody()->getcontents();
$queries = $request->getqueryparams();
$method = $request->getmethod();
$headers = $request->getheaders();
$path = $request->getattribute("path");
return new response(
200,
array(
"custom_header1" => "v1",
"custom_header2" => ["v2", "v3"],
"set-cookie" => urlencode("test php") . '=' . urlencode('test;more')
"hello world"
但是能不能更進一步, 開發者不需要按照 faas 廠商的約定的函式入口能實現乙個乙個的 api, 而是能直接將傳統執行在 lamp 或者 lnmp 的專案直接 faas 化?
答案是肯定的。
函式計算啟動custom runtime執行環境時,會預設呼叫bootstrap檔案啟動您自定義的http server。然後這個http server接管了函式計算系統的所有請求,即您所有的函式呼叫請求。
(函式計算 custom runtime 執行環境底層系統是 linux, 並且已經內建的 nginx 和 php-fpm7.4, 對於 php 應用,您直接使用即可)
- bootstrap其中 wordpress 目錄是對應的 web 工程, bootstrap 是啟動 nginx 和 php-fpm 的指令碼即可:- nginx.conf
- php-fpm.conf
- php.ini-production
- wordpress
echo "start php-fpm"所以, 使用函式計算這個 serverless 產品和傳統的 php 開發相結合後, 您再也不用考慮負載均衡的事情, 不用考慮擴縮容的事情, 不用管理機器、不用擔心宕機的事情等等, 只需要安安心心把業務**開發好即可。php-fpm7.4 -c /code/php.ini-production -y /code/php-fpm.conf
echo "start nginx"
nginx -c /code/nginx.conf
從上圖可以看出:開發者只需要開發好自己的業務**即可,唯一需要考慮的事情, 就是函式計算這邊擴容不要太多太猛(比如直接在函式計算平台設定下該函式能彈出的最大例項數目即可), 給下游自己的 mysql 資料庫過大的壓力即可。
當然, 從原始的傳統的 php web 應用完全遷移到 serverless 形態或者容器形態的雲產品中, 可能還會有這樣的問題, 以 wordpress 為例, 之前後台系統上傳的或者使用 session 功能, 都是直接儲存到磁碟的, 函式計算彈出的例項, 可能會長時間沒有呼叫會被**, 但是我想要有磁碟的持久化功能,這個時候, 流程圖如下:
(函式計算只需要簡單配置下即實現 vpc 的網路安全打通和 nas 掛載)
比如將 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 如虎添翼。
我們最後來一一解答下前言中提出的問題:
1、如果您是乙個企業使用者, 業務體量變大或者為了生產環境的穩定和可用性, 如何做?
如上面陳述, 使用函式計算和傳統的 php 開發相結合後, 您再也不用考慮負載均衡的事情, 不用考慮擴縮容的事情, 不用管理機器、擔心宕機的事情等等, 只需要安安心心把業務**開發好即可。
2、如果您是專案組開發成員比較多的企業使用者,能不能不需要給每個人配置乙個安裝的 nlp 的 linux 機器作為開發測試機器(或者多人共享乙個機器)?
是的, 每個開發者在函式計算上建立乙個自己的 service/函式即可, service/函式配置開發測試環境的 vpc,實現內網安全訪問資料庫等其他下游服務。 函式呼叫的時候, 函式計算會拉乙個 nlp 的執行環境來執行您分支上正在開發的 php **。
3、如果您是乙個學生或者準備學習 php 開發,本地只有 windows 電腦, 能不能直接近乎免費的方式獲取 lnp(linux+nginx+php) 的環境用來學習呢?
是的, 只要將如下的檔案和資料夾打包成 zip 包去函式計算控制台建立函式即可
- bootstrap- nginx.conf
- php-fpm.conf
- php.ini-production
- myweb
| - hello.php
CPSR各位含義
cpsr f或spsr f cpsr s或spsr s cpsr x或spsr x cpsr c或spsr c 3130 2928 2726 2524 2322 2120 1918 1716 1514 1312 111098 7654 3210 nzcv iftm4 m3m2 m1m0負數 或小於零...
請各位注意
水晶報表版本 9.2 vs.net2003自帶的水晶報表 10 11等 開發環境及程式語言 如vb vc vb.net2003 c 2003等 應用型別 應用程式開發 web開發 不然大家交流起來會很累,最好是能將一些相關的 片段及模板檔案,等一併發給我,這樣會更快更好的解決問題,並且會適當地節約我...
向各位前輩求助
最近老師給我們布置了這樣的作業,為了能給老師乙個滿意的程式,我特向各位高手求助 題目如下 1.檔案處理 1,正文統計。統計一段正文,求各字母出現的頻度 忽略大小寫 2,查詢並替換正文中的字串。2.小學生 100以內的整數加法,減法訓練處理 1,選擇訓練的運算 2,每次訓練做n n的值由訓練者輸入 道...