全面解析Serverless PHP功能、用例和优劣势

无服务器计算是一种基于云的执行模型,可以将应用程序作为服务托管,而无需维护服务器。

服务提供商维护服务器上的资源分配,并根据实际使用情况向用户收费。焦点转移到一个人正在创建的核心应用程序上,基础设施完全由服务提供商处理。无服务器计算也称为功能即服务 (FaaS)。

换句话说,Serverless PHP是带有PHP后端的无服务器计算的实现, 给你一个例子。

在本指南中,我们将仔细研究Serverless PHP的含义、其主要特性和优缺点,以便您更好地理解这种云计算方法。

具体来说,我们将了解无服务器计算的概念、它的用例和范围、优点和缺点、使用Bref的无服务器PHP的简单实现以及无服务器PHP在三大巨头(亚马逊、微软和谷歌)上的状态。

传统上,您需要服务器硬件才能在Internet上设置应用程序。服务器机器(或机器)将物理连接到Internet,以便某人访问您的应用程序。服务器维护是一件昂贵的事情。

接下来,托管服务的发展允许网站管理员购买托管空间——每台服务器可以容纳多个应用程序。这降低了成本。

随着云计算的兴起,规模经济进一步降低了成本,因为您可以在大型远程服务器场上租用少量空间。事实上,无服务器计算允许您只为使用的服务付费。不使用时,您实际上没有使用云上的任何空间或资源。

无服务器计算简化了软件开发过程:它允许组织只专注于开发,而不用担心部署、服务器维护和扩展。

Serverless PHP:基础知识

全面解析Serverless PHP功能、用例和优劣势_第1张图片

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  --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变得非常流行,但它还需要深入了解该技术的工作原理以利用它。

你可能感兴趣的:(serverless,php,云原生)