」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在AWS Serverless架構上運行PHP?部分 什麼是無伺服器?

如何在AWS Serverless架構上運行PHP?部分 什麼是無伺服器?

發佈於2024-11-04
瀏覽:667

Lambda 是 AWS 旗艦無伺服器服務,允許在各種運行時上運行程式碼。然而 PHP 並沒有明確地出現在官方產品描述中。這是否意味著您無法在 Lambda 上運行 PHP 程式碼?不,沒有!

在本系列中(源自我對 AWS 使用者群組 Poitiers 的一次演講),我們將討論什麼是無伺服器以及如何讓 PHP(如果這是您最喜歡的語言)在 Lambda 上運行。

什麼是無伺服器?

無伺服器是一種託管範例,雲端供應商動態擴展分配給客戶工作負載的資源,同時不僅管理實體基礎架構(伺服器、電源冷卻),還管理執行執行時(修補等)。

How to run PHP on AWS ServerLess architecture ? Part  What

從嚴格意義上講,計算量是為每個請求分配的,從而形成“從規模到零”的定價模型(沒有資源按小時付費,而是僅按實際需求比例付費),同時提供內置的高-可用性。

這增加了雲端的其他優勢,主要是一切都帶有 API,使自動化成為可能。

這些好處的總和使得擁有幾乎免費的功能分支臨時環境成為可能,從而提高開發人員的生產力和交付時間。

How to run PHP on AWS ServerLess architecture ? Part  What

無伺服器不僅僅涉及計算!

無伺服器生態系統中有很多解決方案。當無伺服器運算 (Lambda) 在 2014 年出現時,託管佇列 (SQS) 已經存在了十年,S3 也已經存在了 8 年。

How to run PHP on AWS ServerLess architecture ? Part  What

請注意,在上面的幻燈片中,Aurora 不符合我們對Serverless 的嚴格定義,因為它不會縮放到零(v1 縮放到零,但可能需要幾分鐘才能啟動,而v2 則需要在您的寫入器和讀取器實例上至少有0.5 個ACU,以便資料庫準備好提供查詢服務。

您將在下面找到一個用於託管僅涉及無伺服器服務的 Web 應用程式的典型架構。對於有限數量的用戶來說,託管此類應用程式的成本可能低於 1 美元/年。

How to run PHP on AWS ServerLess architecture ? Part  What

Serverless 只適用於微服務嗎?

是的..也不是。它在設計時考慮了微服務,但您仍然可以部署整體架構(只要每次啟動新環境時沒有長時間運行的啟動序列)。

How to run PHP on AWS ServerLess architecture ? Part  What

用於解決微服務常見挑戰的無伺服器選項:編排和編排

微服務架構可以減少應用程式元件之間的耦合(使用不同的語言,透過非同步模式,透過消除基礎設施級耦合來提高可擴展性)。

然而,當我們有多個單一用途的功能時,實現業務邏輯可能需要功能之間的協調。這種協調可以使用兩種基本模式來實現。

    編排:在這個模式中,我們以命令式方式控制函數的呼叫。當功能由單一服務團隊交付時,這通常在業務領域內使用。 AWS StepFunction 是一種無伺服器方法,它是一種工作流程/狀態機。這裡有一個關於如何使用 StepFunction 協調 Lambda 函數的很好的教學。
  • 編排:這種模式在跨業務領域的場景中更相關,具有獨立的服務團隊,以保持非常有限的耦合。事件總線使應用程式能夠推送事件並訂閱事件。多個消費者可以訂閱同一個事件,每個消費者可以過濾他們需要的任何事件。用於此目的的核心 AWS 服務是 EventBridge。你會看到我在這裡寫的一篇部落格文章。
  • 了解拉姆達
Lambda 是 AWS 的函數即服務解決方案。借助 Lambda,您可以部署程式碼並獲得即時的高可用性和可擴展性,而無需擔心執行個體部署和作業系統或執行時間修補。

Lambda 可以與同步呼叫(透過 API 閘道、應用程式負載平衡器或 Lambda 函數 URL)或非同步呼叫(回應 AWS 產生的或使用者產生的事件)一起使用。

當您部署 Lambda 時,您可以選擇它來運行所需的記憶體量。分配的CPU是成比例的。然後,您根據使用的毫秒數付費。例如,128Mb Lambda 的成本為 1.7*10^-9$/ms。在您花費第一美元之前,這需要 164 小時的計算時間。

還有 Lambda 尺度。快速地。比其他任何事情都快得多。不會再出現因流量變化較大而導致的 429 錯誤(如果您的工作負載沒有得到很好的保護,則為 500 錯誤)。 How to run PHP on AWS ServerLess architecture ? Part  What

使用 LambdaLiths 解決主要挑戰:冷啟動 How to run PHP on AWS ServerLess architecture ? Part  What

Lambda 執行環境在給定時間僅處理一個請求,並可重複用於後續請求。這意味著,為了擴展 Lambda 函數,或者當 Lambda 函數有一段時間沒有被呼叫時,Lambda 將必須啟動一個新的執行環境:這是一個冷啟動。

如果冷啟動對您的應用程式有害(同樣,這可能比所有流量都變慢或達到 429 更好),那麼有一些選擇。 AWS 有一篇關於使用 Lambda 預熱器或設定預置並發來解決這個問題的好文章。除此之外,對於 Java 使用者來說,Lambda SnapStart 功能可以透過在 JVM 初始化後對 microVM 進行快照來提供良好的冷啟動效能。

PHP 支援怎麼樣?

官方產品常見問題解答指出它「原生支援Java、Go、PowerShell、Node.js、C#、Python 和Ruby 程式碼,並提供執行時間API,允許您使用任何其他程式語言來編寫函數。」

在本系列的下一篇部落格文章中,我們將解釋如何利用兩個不同的框架(Bref 和 Lambda Web Adaptor)在 Lambda 上運行 PHP,並比較它們各自提供的可能性。

版本聲明 本文轉載於:https://dev.to/aws-builders/how-to-run-php-on-aws-serverless-architecture-part-1-whats-serverless-3j3m?1如有侵犯,請聯絡study_golang @163.com刪除
最新教學 更多>
  • PDOStatement::bindParam() 中的前導冒號真的是可選的嗎?
    PDOStatement::bindParam() 中的前導冒號真的是可選的嗎?
    PDOStatement::bindParam() 中參數名稱的前導冒號是否真的可選? PDOStatement::bindParam() 允許您使用佔位符(例如:name)在查詢中指定命名參數。文件指出命名佔位符的參數標識符應使用格式:name。然而,據觀察,:name 和 name 似乎都可以使...
    程式設計 發佈於2024-11-17
  • 如何在 JavaScript 中實現穩定排序以在排序過程中保持元素順序?
    如何在 JavaScript 中實現穩定排序以在排序過程中保持元素順序?
    JavaScript中的穩定排序目標:基於鍵對物件陣列進行高效排序,保持一致性和穩定性。 演算法建議: 雖然有許多排序演算法,但為了滿足您對穩定性的特定需求,請考慮實作不穩定排序演算法的修改版本,例如 QuickSort 或 MergeSort。 穩定排序技術:為了確保穩定性,在排序比較功能中增加一...
    程式設計 發佈於2024-11-17
  • 掌握複合元件:建構靈活且可重複使用的 React 元件
    掌握複合元件:建構靈活且可重複使用的 React 元件
    介紹 React 世界中非常有用且全面的東西是它的設計模式,因為它們有助於保持程式碼的可擴展性並為我們創建的元件添加意義。 有多種模式,在本文中我們將討論複合組件,這是一種高級模式,對於創建靈活的複合介面特別有用。 什麼是複合組件? 複合元件是 React 中的...
    程式設計 發佈於2024-11-17
  • ## 雙波形符運算子 (~~) 在 JavaScript 中有何作用?
    ## 雙波形符運算子 (~~) 在 JavaScript 中有何作用?
    JavaScript 中的雙波號運算子(~~)在JavaScript 中,~~ 運算子是一個型別強制運算子,它會刪除後面的所有內容數字的小數點。這與 ~ 運算子不同,~ 運算子是位元 NOT 運算符,可反轉值的位元。 操作 運算子的工作原理是先將其值轉換為運算元為有符號 32 位元整數。這意味著即使...
    程式設計 發佈於2024-11-17
  • 如何在 Python 中執行模糊字串比較?
    如何在 Python 中執行模糊字串比較?
    Python 中的模糊字符串比較:有效模組在處理字符串中的潛在變化和錯誤時,需要進行模糊字符串比較。為這項任務找到合適的 Python 模組至關重要。這個問題尋求一個可以提供相似性百分比的模組,允許各種比較選項。 difflib: A Versatile Tool for Fuzzy Compar...
    程式設計 發佈於2024-11-17
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1和$array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建構一...
    程式設計 發佈於2024-11-17
  • 如何設定 Go 測試的工作目錄?
    如何設定 Go 測試的工作目錄?
    Go 測試中的工作目錄在 Go 中,通常將設定檔放置在工作目錄中並在程式碼中引用它們。但是,如果測試環境與生產環境不匹配,單元測試可能無法找到這些文件。 要為 Go 測試指定工作目錄,請探索以下解決方案:考慮使用執行時間套件中的 Caller 函數。呼叫者取得目前的測試來源檔案並返回其路徑。此路徑可...
    程式設計 發佈於2024-11-17
  • 如何轉義 PHP 正規表示式中的反斜線?
    如何轉義 PHP 正規表示式中的反斜線?
    在PHP 正規表示式中轉義反斜線要在PHP 正規表示式模式中轉義反斜線要在PHP 正規表示式模式中轉義反斜線,可以使用三個反斜線(\\ ) 或四個反斜線(\\\\)。雖然這兩個選項都會產生成功的匹配,但它們的解釋和用法有細微差別。 測試案例:// TEST 01: (3 backslashes) $...
    程式設計 發佈於2024-11-17
  • 如何在 Python 中用逗號連接字串:哪種方法最好?
    如何在 Python 中用逗號連接字串:哪種方法最好?
    用逗號連接字串:簡潔的解決方案要連接列表中的字串,在每對之間加上逗號,可以使用多種方法。一種流行的技術涉及將 ''.join() 函數與 lambda 函數 map() 結合使用。 以下方法示範了此技術:result = ','.join(map(lambda x: x ',',...
    程式設計 發佈於2024-11-17
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-17
  • 如何使用 Java 安全加密設定檔中的密碼?
    如何使用 Java 安全加密設定檔中的密碼?
    如何安全地加密設定檔中的密碼加密設定檔中儲存的密碼對於保護敏感資料和防止未經授權的存取至關重要。 使用Java中基於密碼的加密(PBE)加密和解密密碼的一種簡單有效的方法是利用Java 的基於密碼的加密 (PBE)。 PBE 允許您使用安全演算法從密碼中衍生金鑰,例如 PBKDF2WithHmacS...
    程式設計 發佈於2024-11-17
  • 如何在 PHP 中正確讀取文字檔案中的行並將其儲存在數組中?
    如何在 PHP 中正確讀取文字檔案中的行並將其儲存在數組中?
    存取陣列中的文字行在程式設計中處理文字檔案時,通常需要將每行文字儲存在一個有組織的文件中用於進一步處理的資料結構。 在提供的 PHP 程式碼片段中:$file = fopen("members.txt", "r"); while (!feof($file)) ...
    程式設計 發佈於2024-11-17
  • DockerMake 如何將多個 Docker 映像合併為一個統一映像?
    DockerMake 如何將多個 Docker 映像合併為一個統一映像?
    Docker 映像組合:將多個映像合併到一個圖層將多個 Docker 映像組合成一個統一的映像是 Docker 本身不支援的功能。然而,由開源貢獻者開發的 DockerMake 工具提供了一個解決方案來滿足這一需求。 DockerMake 使用 YAML 設定檔定義目標映像的組成。該檔案指定構成最終...
    程式設計 發佈於2024-11-17
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-17
  • 為什麼 Python 會拋出「ValueError:嘗試相對導入超出頂級套件」錯誤,以及如何避免?
    為什麼 Python 會拋出「ValueError:嘗試相對導入超出頂級套件」錯誤,以及如何避免?
    頂級包之外的相對導入在多層Python 包中嘗試相對導入時,從包目錄運行模組可能會導致“ValueError:嘗試相對導入超出頂級包”錯誤。了解此錯誤背後的原因對於有效的套件管理至關重要。 發生該錯誤的原因是 Python 不維護套件載入位置的記錄。以「python -m test_A.test」執...
    程式設計 發佈於2024-11-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3