Lambda 是 AWS 旗舰无服务器服务,允许在各种运行时上运行代码。然而 PHP 并没有明确地出现在官方产品描述中。这是否意味着您无法在 Lambda 上运行 PHP 代码?不,没有!
在本系列中(源自我对 AWS 用户组 Poitiers 的一次演讲),我们将讨论什么是无服务器以及如何让 PHP(如果这是您最喜欢的语言)在 Lambda 上运行。
无服务器是一种托管范例,云提供商动态扩展分配给客户工作负载的资源,同时不仅管理物理基础设施(服务器、电源冷却),还管理执行运行时(修补等)。
从严格意义上来说,计算量是为每个请求分配的,从而形成“从规模到零”的定价模型(没有资源按小时付费,而是按照实际需求按比例付费),同时提供内置的高- 可用性。
这增加了云的其他优势,主要是一切都带有 API,使自动化成为可能。
这些好处的总和使得拥有几乎免费的功能分支临时环境成为可能,从而提高开发人员的生产力和交付时间。
无服务器生态系统中有很多解决方案。当无服务器计算 (Lambda) 于 2014 年出现时,托管队列 (SQS) 已经存在了十年,S3 也已经存在了 8 年。
请注意,在上面的幻灯片中,Aurora 不符合我们对无服务器的严格定义,因为它不会扩展到零(v1 扩展到零,但可能需要几分钟才能启动,而 v2 则需要在您的写入器和读取器实例上至少有 0.5 个 ACU,以便数据库准备好服务查询。
您将在下面找到一个用于托管仅涉及无服务器服务的 Web 应用程序的典型架构。对于有限数量的用户来说,托管此类应用程序的成本可能低于 1 美元/年。
是..又不是。它在设计时考虑了微服务,但您仍然可以部署整体架构(只要每次启动新环境时没有长时间运行的启动序列)。
微服务架构可以减少应用程序组件之间的耦合(使用不同的语言,通过异步模式,通过消除基础设施级耦合来提高可扩展性)。
但是,当我们有多个单一用途的功能时,实现业务逻辑可能需要功能之间的协调。这种协调可以使用两种基本模式来实现。
Lambda 是 AWS 的函数即服务解决方案。借助 Lambda,您可以部署代码并获得即时的高可用性和可扩展性,而无需担心实例部署和操作系统或运行时修补。
Lambda 可以与同步调用(通过 API 网关、应用程序负载均衡器或 Lambda 函数 URL)或异步调用(响应 AWS 生成的或用户生成的事件)一起使用。
部署 Lambda 時,您可以選擇執行所需的記憶體量。分配的CPU是成比例的。然後,您根據使用的毫秒數付費。例如,128Mb Lambda 的成本為 1.7*10^-9$/ms。在您花費第一美元之前,這需要 164 小時的計算。
還有 Lambda 尺度。快速地。比其他任何事情都快得多。不會再出現因流量變化較大而導致的 429 錯誤(如果您的工作負載沒有得到很好的保護,則為 500 錯誤)。
Lambda 執行環境在給定時間僅處理一個請求,並可重複用於後續請求。這意味著,為了擴展 Lambda 函數,或者當 Lambda 函數有一段時間沒有被呼叫時,Lambda 將必須啟動一個新的執行環境:這是冷啟動。
如果冷啟動對您的應用程式有害(同樣,這可能比所有流量都變慢或達到 429 更好),那麼有一些選擇。 AWS 有一篇關於使用 Lambda 預熱器或設定預置並發來解決這個問題的好文章。除此之外,對於 Java 使用者來說,Lambda SnapStart 功能可以透過在 JVM 初始化後對 microVM 進行快照來提供良好的冷啟動效能。
官方產品常見問題解答指出它「原生支援Java、Go、PowerShell、Node.js、C#、Python 和Ruby 程式碼,並提供執行時間API,允許您使用任何其他程式語言來編寫函數。」
在本系列的下一篇部落格文章中,我們將解釋如何利用兩個不同的框架(Bref 和 Lambda Web Adaptor)在 Lambda 上運行 PHP,並比較它們各自提供的可能性。
以上是如何在AWS Serverless架構上運行PHP?部分 什麼是無伺服器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!