各位 PHPer,Serverless 正當時

2022-09-12 01:36:12 字數 4194 閱讀 1541

簡介: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

- 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

所以, 使用函式計算這個 serverless 產品和傳統的 php 開發相結合後, 您再也不用考慮負載均衡的事情, 不用考慮擴縮容的事情, 不用管理機器、不用擔心宕機的事情等等, 只需要安安心心把業務**開發好即可。

從上圖可以看出:開發者只需要開發好自己的業務**即可,唯一需要考慮的事情, 就是函式計算這邊擴容不要太多太猛(比如直接在函式計算平台設定下該函式能彈出的最大例項數目即可), 給下游自己的 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的值由訓練者輸入 道...