无服务器计算是一种基于云的执行模型,可以将应用程序作为服务托管,而无需维护服务器。
服务提供商维护服务器上的资源分配,并根据实际使用情况向用户收费。焦点转移到一个人正在创建的核心应用程序上,基础设施完全由服务提供商处理。无服务器计算也称为功能即服务 (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变得非常流行,但它还需要深入了解该技术的工作原理以利用它。
评论留言