無伺服器計算是一種基於雲的執行模型,可以將應用程式作為服務託管,而無需維護伺服器。
服務提供商維護伺服器上的資源分配,並根據實際使用情況向使用者收費。焦點轉移到一個人正在建立的核心應用程式上,基礎設施完全由服務提供商處理。無伺服器計算也稱為功能即服務 (FaaS)。
換句話說,Serverless PHP是帶有PHP後端的無伺服器計算的實現, 給你一個例子。
在本指南中,我們將仔細研究Serverless PHP的含義、其主要特性和優缺點,以便您更好地理解這種雲端計算方法。
具體來說,我們將瞭解無伺服器計算的概念、它的用例和範圍、優點和缺點、使用Bref的無伺服器PHP的簡單實現以及無伺服器PHP在三大巨頭(亞馬遜、微軟和谷歌)上的狀態。
- Serverless PHP:基礎知識
- BaaS與無伺服器架構
- Serverless PHP:用例
- Serverless PHP:優勢
- Serverless PHP:缺點
- Serverless PHP:在Lambda上使用Bref入門
傳統上,您需要伺服器硬體才能在Internet上設定應用程式。伺服器機器(或機器)將物理連線到Internet,以便某人訪問您的應用程式。伺服器維護是一件昂貴的事情。
接下來,託管服務的發展允許網站管理員購買託管空間——每臺伺服器可以容納多個應用程式。這降低了成本。
隨著雲端計算的興起,規模經濟進一步降低了成本,因為您可以在大型遠端伺服器場上租用少量空間。事實上,無伺服器計算允許您只為使用的服務付費。不使用時,您實際上沒有使用雲上的任何空間或資源。
無伺服器計算簡化了軟體開發過程:它允許組織只專注於開發,而不用擔心部署、伺服器維護和擴充套件。
Serverless PHP:基礎知識
Google上“Serverless”一詞的趨勢
要部署Serverless PHP應用程式,您應該首先探索無伺服器計算的概念。雖然Serverless一詞自2012年在ReadWrite上首次出現在這篇關於軟體開發未來的文章中,但隨著2014年AWS Lambda的推出,它開始流行起來。
在本節中,讓我們關注與無伺服器計算相關的幾個關鍵概念,並嘗試回答圍繞這項技術的一個常見問題:它真的是server-“less”嗎?
Serverless PHP的特點
部署是一項簡單的任務,無需管理伺服器。您只需將程式碼上傳到伺服器,其餘的由供應商處理。無伺服器技術允許您擁有與語言無關的功能,並相互互動。
例如,如果您有一個訊息傳遞應用程式,則登入模組可能用一種語言編碼,而更新您的狀態的功能可能用另一種語言編碼。
雖然在沒有無伺服器託管的情況下這仍然是可能的,但互動起來肯定更加困難。每當一個動作觸發你的函式時,就會產生一個例項來處理它。
生成例項的過程可能是“暖”的,即使用現有例項,也可能是“冷”的,即啟動新例項。與傳統託管相比,此過程有一點延遲,尤其是冷啟動,在傳統託管中,您的伺服器始終處於待機模式以處理請求。
但是,當您需要處理大量請求時,無伺服器和傳統託管之間的情況會完全相反。可擴充套件性天生就來自於無伺服器技術。如果您突然需要一千個併發請求,供應商將在您無需任何額外工作或配置的情況下處理它們。
Serverless PHP真的是無伺服器的嗎?
不要讓“Serverless”一詞讓您感到困惑。這並不意味著“伺服器”不存在。當您使用無伺服器應用程式時,後臺有一個伺服器來處理您的輸入並計算必要的輸出。
從開發人員的角度來看,術語中存在“-less” ,他們從不接觸伺服器的各種元素。因此,如果您部署一個Serverless PHP應用程式,則會在雲上執行一個實際的伺服器來滿足請求。
BaaS與Serverless架構
雖然“無伺服器計算”沒有嚴格定義,但它也可能指BaaS(後端即服務)應用程式。BaaS也指雲端計算模型,其中伺服器操作外包給第三方,開發人員只需要專注於建立和維護軟體。
BaaS和無伺服器之間的主要相似之處在於開發人員不專注於伺服器管理。許多組織在同一個保護傘下提供BaaS和FaaS包。
以下是BaaS和無伺服器計算之間的主要區別:
- 元件:BaaS應用程式與傳統應用程式類似,開發人員可能不會對其結構進行更改以適應BaaS。在無伺服器中,應用程式被劃分為稱為函式的邏輯部分,每個函式都響應一個事件並執行特定的任務。
- 可擴充套件性:可擴充套件性是無伺服器應用程式的關鍵組成部分——隨著流量的增加,分配的資源更多。它不是BaaS應用程式的必需模組,儘管一些服務提供商將其作為附加元件提供。
- 觸發器:無伺服器應用程式是事件驅動的,這意味著特定活動每次發生時都會觸發應用程式。另一方面,BaaS應用程式可能會像傳統應用程式一樣在後臺持續使用資源。
- 模組化架構:在無伺服器架構中,應用程式的各種功能可以在不同的伺服器上駐留和執行,但由於它們的整合而無縫執行。BaaS應用程式可能會也可能不會遵循此結構。
Serverless PHP:用例
我們已經討論了無伺服器計算的各個方面,以及它與BaaS的不同之處。雖然我們已經介紹了無伺服器計算的基礎知識,但讓我們探討一下您可能希望採用這種架構的情況。
您可能已經意識到,在無伺服器技術上託管複雜的應用程式可能不是一個好主意。但是,即使您決定不通過Serverless PHP部署完整的應用程式,您也可以部署模組。
我們將在本節討論無伺服器堆疊的兩個實現示例:資料庫和檔案儲存。
無伺服器資料庫是一種按需資料庫,可讓您在需要時執行查詢。由於無伺服器堆疊,擴充套件很容易,並且供應商僅按您使用資源的時間量向您收費。
Amazon Aurora和Google Cloud Datastore是當今市場上可用的無伺服器資料庫的示例。Serverless檔案儲存系統被實現為物件儲存。檔案在檔案系統中不被視為層次結構,而是被視為物件,其中包含檔案本身的資料及其後設資料。儲存和檢索是通過類似REST-like API進行的。
IBM Cloud為您提供物件儲存服務。無伺服器應用程式的其他常見用例是API和移動後端,其設計基於小型、邏輯、相互依賴的功能。
Serverless PHP:優勢
在本節中,我們將探討無伺服器計算的主要優勢以及它近年來受到關注的原因。
降低伺服器成本
從理論上講,與傳統託管相比,無伺服器計算可以降低成本。內在原因很簡單:您在特定時間內使用該服務,並且在空閒時間沒有維護成本。但是,如果您隨著時間的推移面臨持續的流量,採用無伺服器架構可能不會導致成本有太大差異。
更容易部署
部署無伺服器服務不需要您設定和配置伺服器。無伺服器應用程式的部署也是通過簡單的功能。建立應用程式的版本並使其在雲上可用更容易。因此,整個部署過程更容易、更高效。
可擴充套件性
在傳統的設定中,需要付出很多努力來擴大規模以迎合更高的流量。另一方面,當流量增加時,服務提供商會負責資源分配。因此,當您部署到無伺服器架構時,更容易擴充套件。
Serverless PHP:缺點
雖然無伺服器計算有其相當多的優勢,但在投入使用之前必須意識到它的潛在缺點。
效能
使用者強調無伺服器計算的主要問題是效能下降。雖然它是事件驅動的,但生成一個微例項來服務請求需要幾百毫秒。
對於時間要求嚴格的應用程式,這種滯後可能會變得很重要。隨著應用程式複雜性的增加,位於不同位置的元件會增加這種延遲。這種附加的時間延遲可能被證明對使用者體驗有害。
(推薦閱讀:使用Gatsby和WordPress構建網站簡介)
Vendor Lock-In
雖然無伺服器架構允許您只專注於您的程式碼,但供應商可以完全控制基礎架構。因此,如果您使用無伺服器,則無法更改供應商,因為遷移可能是一項艱鉅的任務。
除錯
供應商負責無伺服器應用程式的端到端部署。因此,開發人員必須依賴供應商提供適當的除錯日誌。除錯無伺服器應用程式以確定根本原因的過程也很困難。
Serverless PHP:在Lambda上使用Bref入門
雖然我們已經探索了無伺服器架構,但現在我們將瞭解通過無伺服器服務部署PHP應用程式所需的條件。
正如您可能已經猜到的那樣,無伺服器應用程式的部署高度特定於供應商。因此,這篇文章試圖解決在Amazon AWS上實現Serverless PHP應用程式的問題。Bref或法語中的brief是一個Composer包,它允許您通過Lambda在AWS上部署PHP應用程式。
Bref不斷髮展,因此您可能應該檢查Bref的成熟度矩陣,以評估將您的應用程式移植到無伺服器架構是否是一個好主意。
使用Bref的Serverless PHP的先決條件
首先,前往Amazon AWS並建立一個帳戶。您將需要它來部署您的應用程式。接下來,您需要安裝無伺服器框架來管理您的部署。
npm install -g serverless
接下來,在AWS上生成您的公私鑰對,並在本地配置無伺服器框架。
serverless config credentials --provider aws --key <key> --secret <secret>
接下來,通過Composer安裝Bref:
composer require bref/bref
在部署之前,您需要安裝Composer的依賴項。
composer install --prefer-dist --optimize-autoloader --no-dev
使用Bref在Serverless PHP上建立Hello World應用程式
為了使用Bref建立一個簡單的hello world應用程式,我們將編寫一個由事件觸發並返回字串“Hello World”的函式。
首先,您必須包含Bref的autoload.php指令碼,然後使用它的lambda函式。如果您想從上下文中訪問資料,您可以選擇宣告一個上下文變數。
require __DIR__.'/vendor/autoload.php'; lambda(function ($event) { return 'Hello world'); });
功能準備就緒後,您需要建立一個serverless.yml配置檔案。這是Bref指南中的基本配置檔案。
service: app provider: name: aws runtime: provided plugins: - ./vendor/bref/bref functions: hello: handler: index.php layers: - ${bref:layer.php-73}
當您執行以下命令時,Bref會自動建立此配置檔案。
vendor/bin/bref init
現在您已經準備好您的函式和配置,您可以使用無伺服器包的命令invoke
呼叫該函式以檢查它是否按預期執行:
serverless invoke -f hello
這是使用AWS的sam命令列工具在本地部署無伺服器應用程式的指南。一旦你的專案準備好了,你可以使用serverless的deploy命令來部署它。使用--verbose
選項獲取部署過程的詳細資訊:
serverless deploy
Serverless PHP的其他部署選項
AWS Lambda上的Bref PHP是一種流行的選擇。但是,您的Serverless PHP應用程式還有一些其他選項。
Vapor由Laravel於2019年7月推出,是Laravel在AWS Lambda上的無伺服器部署平臺。Vapor將您的Laravel應用程式轉換為單個lambda函式。雖然Azure無伺服器不正式支援PHP,但您仍然可以使用此部署示例進行嘗試。
小結
以下是您應該從本Serverless PHP指南中學到的關鍵方面:
- 在考慮將Serverless PHP用於您的應用程式之前,請確保您完全瞭解無伺服器計算是什麼、它的優點和缺點。
- 將應用程式移植到無伺服器PHP框架時,您應該考慮三個主要因素。考慮應用程式的複雜性、其元件的時間緊迫性以及未來的可擴充套件性。
- Serverless PHP對市場來說仍然相當新。在完全投入之前,請確保在其中一個供應商上使用Bref進行試點。
雖然Serverless變得非常流行,但它還需要深入瞭解該技術的工作原理以利用它。
評論留言