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

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

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

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刪除
最新教學 更多>
  • 如何簡化PHP中的JSON解析以獲取多維陣列?
    如何簡化PHP中的JSON解析以獲取多維陣列?
    php 試圖在PHP中解析JSON數據的JSON可能具有挑戰性,尤其是在處理多維數組時。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    程式設計 發佈於2025-05-31
  • 在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    mysql-python安裝錯誤:“ mysql_config找不到”“ 由於缺少MySQL開發庫而出現此錯誤。解決此問題,建議在Ubuntu上使用該分發的存儲庫。使用以下命令安裝Python-MysqldB: sudo apt-get安裝python-mysqldb sudo pip in...
    程式設計 發佈於2025-05-31
  • CSS可以根據任何屬性值來定位HTML元素嗎?
    CSS可以根據任何屬性值來定位HTML元素嗎?
    靶向html元素,在CSS 中使用任何屬性值,在CSS中,可以基於特定屬性(如下所示)基於特定屬性的基於特定屬性的emants目標元素: 字體家庭:康斯拉斯(Consolas); } 但是,出現一個常見的問題:元素可以根據任何屬性值而定位嗎?本文探討了此主題。 的目標元素有任何任何屬性值,...
    程式設計 發佈於2025-05-31
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-05-31
  • 如何將多種用戶類型(學生,老師和管理員)重定向到Firebase應用中的各自活動?
    如何將多種用戶類型(學生,老師和管理員)重定向到Firebase應用中的各自活動?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    程式設計 發佈於2025-05-31
  • PHP與C++函數重載處理的區別
    PHP與C++函數重載處理的區別
    作為經驗豐富的C開發人員脫離謎題,您可能會遇到功能超載的概念。這個概念雖然在C中普遍,但在PHP中構成了獨特的挑戰。讓我們深入研究PHP功能過載的複雜性,並探索其提供的可能性。 在PHP中理解php的方法在PHP中,函數超載的概念(如C等語言)不存在。函數簽名僅由其名稱定義,而與他們的參數列表無關...
    程式設計 發佈於2025-05-31
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否有必要在heap-procal extrable exit exit上進行手動調用“ delete”操作員,但開發人員通常會想知道是否需要手動調用“ delete”操作員。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(...
    程式設計 發佈於2025-05-31
  • 如何有效地選擇熊貓數據框中的列?
    如何有效地選擇熊貓數據框中的列?
    在處理數據操作任務時,在Pandas DataFrames 中選擇列時,選擇特定列的必要條件是必要的。在Pandas中,選擇列的各種選項。 選項1:使用列名 如果已知列索引,請使用ILOC函數選擇它們。請注意,python索引基於零。 df1 = df.iloc [:,0:2]#使用索引0和1 ...
    程式設計 發佈於2025-05-31
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-05-31
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 考慮文檔中給出的示例:這是內部發生的事情: 現在在3月3日添加另一個月,因為2月在2001年只有2...
    程式設計 發佈於2025-05-31
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    程式設計 發佈於2025-05-31
  • 在Pandas中如何將年份和季度列合併為一個週期列?
    在Pandas中如何將年份和季度列合併為一個週期列?
    pandas data frame thing commans date lay neal and pree pree'和pree pree pree”,季度 2000 q2 這個目標是通過組合“年度”和“季度”列來創建一個新列,以獲取以下結果: [python中的concate...
    程式設計 發佈於2025-05-31
  • 在GO中構造SQL查詢時,如何安全地加入文本和值?
    在GO中構造SQL查詢時,如何安全地加入文本和值?
    在go中構造文本sql查詢時,在go sql queries 中,在使用conting and contement和contement consem per時,尤其是在使用integer per當per當per時,per per per當per. [&​​​​&&&&&&&&&&&&&&&默元組方...
    程式設計 發佈於2025-05-31
  • Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    Java的Map.Entry和SimpleEntry如何簡化鍵值對管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    程式設計 發佈於2025-05-31
  • 反射動態實現Go接口用於RPC方法探索
    反射動態實現Go接口用於RPC方法探索
    在GO 使用反射來實現定義RPC式方法的界面。例如,考慮一個接口,例如:鍵入myService接口{ 登錄(用戶名,密碼字符串)(sessionId int,錯誤錯誤) helloworld(sessionid int)(hi String,錯誤錯誤) } 替代方案而不是依靠反射...
    程式設計 發佈於2025-05-31

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

Copyright© 2022 湘ICP备2022001581号-3