无极4《Q2404-8305 》曾几何时,当恐龙在地球上游荡时,必须建造服务器。一个开发团队要求一个运行他们代码的环境,一个系统管理员或基础设施工程师插入一个服务器,花费数小时或数天准备运行代码。噢,顺便说一下,这只是运行web应用程序所需的许多服务器中的一个,而且这只发生在预算确定并填写完表格之后。这个过程可能需要几个月的时间。DevOps运动改变了这一切。DevOps加入了开发和运营团队,并将他们拉向同一方向。世界上一切都很好,因为现在服务器可以在几分钟内构建,而不是几周或几个月。只需调用一个API,就可以构建服务器。像Puppet和Ansible这样的工具允许重复和快速设置任何服务器,并提供你需要的一切。然而,这并不是故事的结尾。从几个月的服务器到几分钟的服务器是一个很大的改进。但是,您是否考虑过在没有服务器的情况下执行代码?在这里,您将了解无服务器,它为什么重要,以及如何使用AWS Lambda实现无服务器。
Serverless是什么意思?
没有服务器是指没有服务器吗?好吧,其实不是。仍然需要一些运行时来执行你的代码,并且运行时必须在服务器上执行。但是,创建和运行环境的细节对您来说是抽象的。使用无服务器时,编写代码并将其上传到无服务器提供程序平台(例如AWS Lambda)。您的代码在事件触发时运行。提供者在您需要时为您创建环境,然后在您不需要时拆除环境。因此,没有服务器并不意味着没有服务器;这只是意味着你不需要自己担心他们。
为什么Serverless很重要?
无服务器计算为开发团队提供了许多好处。首先,无极4注册登录网址您的代码启动并运行得非常快。编写您的代码,然后将其上传以按需执行。这意味着新功能的快速周转时间和需要时的快速更改。不需要进行部署或构建过程,因此更改基本上是即时的。这非常适合敏捷和精益方法,在这些方法中,速度和快速反馈是成功的关键。无服务器计算的另一个好处是节省了操作成本。例如,AWS Lambda只在您创建的函数执行时向您收费。不需要执行很长时间的函数不会花费太多。将此与购买物理服务器进行比较。这需要花费大量资金来购买一台可能只使用其全部容量一小部分的大型服务器。即使是像EC2这样的云服务器,你也要在它们启动和运行时付费,不管它们是否真的在处理任何东西。像AWS Lambda这样的无服务器技术为计算提供了随用随付的服务。最后,无服务器技术允许易于伸缩。像AWS Lambda这样的服务的承诺是,如果您的代码需要更多的资源,或者同时发生对代码的多个调用,AWS将自动为您扩展。您不必担心高峰时间会杀死应用服务器。这使得AWS Lambda和其他无服务器技术成为微服务体系结构的最佳选择。
无服务器计算的挑战
女人在电脑上打字,象征着没有服务器。没有服务器的计算肯定有很多好处。然而,任何技术都有缺陷,在您过于依赖它之前,您应该意识到这些缺陷。让我们看看在实现无服务器体系结构的过程中可能遇到的一些挑战。一个挑战是经常在第一次调用函数时发生的“冷启动”。实际上,在第一次调用一个函数时,需要动态地创建一个环境,这需要一些时间。如果函数在一段时间内没有被调用,那么环境将被关闭。如果您看到明显的减速,则可以定期向函数发送请求,以保持环境正常运行。另一个挑战是,长时间运行的函数通常不如快速函数有效。记住,在函数执行时需要付费。保持你的职能小,以降低成本。对长时间运行和计算强度高的应用程序使用服务器实例。在serverless中,服务器不属于您,但功能是您自己的。这些函数生成对调试和可见性至关重要的日志和指标。在没有服务器的应用程序中,如果没有使用像retrace这样的高级监控工具,就很难为可视化日志提供易于使用的界面。最后,请注意,在本地测试函数可能比较困难。除了一些第三方工具外,没有太多的支持。否则,您可能需要使用控制台消息和日志文件的古老方法进行测试。您可能只需要执行这个函数并检查它是否工作。
AWSλ
现在,让我们开始无服务器计算的旅程,具体构建一个函数并执行它以查看它的工作。在此之后,我们将看看实际的无服务器架构是什么样子的。我们将在示例中使用AWS Lambda。首先,创建一个AWS帐户并选择免费层。Lambda是一个没有服务器的计算环境,允许您上传或编写代码,然后将其连接到事件。当事件触发时,您的代码将执行。您还可以将Lambda函数放在REST API后面,我们将马上看到如何做到这一点。Lambda支持许多不同的语言和执行环境。对于本例,我们将使用Node.js,因为在该环境中启动并运行Lambda函数非常简单。您还可以使用Python、Go、Ruby、c#和Java。让我们创建第一个Lambda函数!
创建您的第一个Lambda函数
从左上角的“服务”菜单中选择Lambda。你也可以在搜索框中输入“Lambda”并选择它。在lambda屏幕上,单击“创建函数”按钮,开始创建第一个函数的过程。创建AWS lambdarole字段指的是您希望Lambda函数在AWS中拥有的权限。您可以进一步研究AWS身份和访问管理,但我们在这里不讨论这些。出于我们的目的,无极四荣耀注册我们将基于“Simple Microservice”权限为我们的函数创建一个角色。点击“创建函数”按钮导航到Lambda函数创建屏幕。这个屏幕一开始看起来很繁忙,因此我们将逐一介绍它,并在进行过程中设置所需的内容。现在,通过点击部分标题关闭页面的“Designer”部分。当我们将代码与另一个AWS服务集成以使其可用时,我们将回到这一部分。您的屏幕应该是这样的:Lambda代码编辑在“函数代码”部分,您将看到一个集成的代码编辑器供您使用。我们将保持示例简单,以确保您理解AWS Lambda如何工作。所以用下面的代码替换你在编辑器中看到的代码:
exports.handler = (event, context, callback) = {
const result = event.number1 + event.number2;
callback(null, result);
};
现在我们需要测试Lambda函数,以确保它将执行我们希望它执行的操作。Lambda接口为我们提供了这样做的方法。在右上角,在“测试”和“保存”按钮旁边有一个下拉菜单。单击该下拉菜单并选择“配置测试事件”。(注意:“配置测试事件”将是您唯一的选项。)配置测试在“配置测试事件”对话框中,选择“Hello World”作为模板,并将对话框中的JSON更新为以下内容:
{
"number1": 2,
"number2": 3
}
完成之后,您的屏幕应该是这样的:AWS Lambda无服务器配置测试屏幕截图单击“Create”按钮,就可以进行测试了。我们刚才所做的就是为我们的函数创建一个测试输入。现在我们可以执行这个函数并确保结果是我们所期望的。点击“保存”按钮,如果它是活动的。确保您的新测试功能在下拉菜单中被选中,然后单击“测试”按钮。您的函数将执行,您将看到结果显示在页面的底部。在本例中,函数返回的结果应该是5。λoutputCongratulations !我们已经创建了一个Lambda函数,并成功地对其进行了测试,因此我们可以确信它将执行我们认为它将执行的操作。
API网关
我们有一个准备使用的Lambda函数,但我们如何实际调用它?事件(也称为触发器)导致Lambda函数执行。该事件可以是许多不同的事情,比如更新数据库记录或将文件上载到S3 bucket。在我们的例子中,我们将使用API Gateway为Lambda函数创建一个REST端点。在Lambda函数就是微服务的微服务体系结构中,这种方法非常有效。
创建REST服务
首先,打开之前关闭的“Designer”部分。它列出了可以调用Lambda函数的所有可用触发器。单击API网关触发器将其添加到设计器中。选择API gateway如下所示填写表单。这是启动、运行和通过API调用Lambda函数的最基本设置。配置API网关点击下面的“添加”按钮在API网关中创建API,然后点击保存保存你的Lambda函数配置。您现在有了一个REST端点,如果有人向它发送HTTP调用,它将调用Lambda函数。你的Lambda配置屏幕应该是这样的:API网关成功屏幕
配置REST服务
然而,这并不是结束。默认情况下,您的REST端点不会接受任何URL或body参数。在我们使用它之前,我们必须把它设置好。点击“ServerlessQuickStartAPI”链接到API网关控制台。您将在那里看到您的新API。默认情况下,“ANY”链接将显示执行路径。“ANY”表示API接受任何HTTP动词(GET、PUT、POST等)。您可以限制这些动词,但我们现在不这样做,因为我们要集中精力执行Lambda函数。现在点击“方法请求”链接。AWS Lambda方法请求screenshotThis将您带到一个屏幕,无极四注册在这里您可以为您的请求设置参数和其他设置。创建两个查询字符串参数:number1和number2。让他们所需。事件对象保存查询参数的值。接下来,单击以“Request Validator”开始的行尾的铅笔图标。“将值设置为”验证字符串参数和标题。请看下面的截图,看看你最终的结果应该是什么样子。我们需要更新Lambda函数来使用API网关将提供的查询参数。更改Lambda函数代码如下:
exports.handler = async (event) => {
const firstNumber = Number(event.queryStringParameters.number1);
const secondNumber = Number(event.queryStringParameters.number2);
const total = firstNumber + secondNumber;
const result = {
result: total
};
const response = {
statusCode: 200,
body: JSON.stringify(result),
isBase64Encoded: false
};
return response;
};
您还会注意到一个特定的响应对象。这对于API网关读取您的响应是必要的。现在我们应该能够拉起Postman并向API网关发送请求,并从Lambda函数获得响应。要检索URL,请单击API Gateway屏幕左侧的“Stages”链接。单击“demo”阶段,然后单击“GET”方法查看调用URL。API网关StageNow我们在Postman中使用我们设置的参数调用那个URL,然后我们看到函数的结果。
邮递员的结果
无服务器架构是什么样子的?
到目前为止,我们已经创建了一个Lambda函数并在测试中执行了它。然后,我们创建了一个REST API端点,并将其与Lambda函数集成,这样我们就可以远程执行它了。您已经了解了如何快速启动和运行Lambda函数,并将其与其他AWS服务连接起来。然而,这仅仅是无服务器之旅的开始。让我们快速浏览一下完全没有服务器的应用程序是什么样子的。无服务器架构使用服务的混合,允许开发人员快速部署而不需要首先建立服务器。这些服务包括AWS Lambda、Amazon S3、Amazon Cognito、API Gateway和Amazon DynamoDB。这些服务允许开发人员在没有EC2实例或伪脚本的情况下建立整个web应用程序。以这个架构为例:AWS Lambda架构图s3存储HTML、CSS和JavaScript,以便web浏览器可以访问它们。Amazon Cognito为您网站的访问者提供身份识别服务。JavaScript进行的任何API调用都要通过API网关进行。Lambda处理请求。Amazon DynamoDB存储数据。这是一个功能齐全的网站,没有服务器。
从哪里开始Serverless
我们已经在技术上玩过了,但从这里你还能做什么呢?我建议您不要将最关键的应用程序重写为无服务器的。但是,有一些方法可以以低风险但高价值的方式将无服务器架构引入您的环境中。例如,您是否有处理文件或操作数据而不需要用户交互的应用程序?例如,一个应用程序可以接收媒体文件并将其转换为不同的格式以供使用。或者以放在S3 bucket中用于数据分析的处理数据为例。它们是无服务器架构的很好的候选者。随着时间的推移,您可以扩展到创建新的用户交互的无服务器应用程序。DevOps是关于速度的。AWS Lambda和无服务器架构允许您比以前更快地开发和交付。如果使用有效,它们可以降低您的成本,并允许您轻松地使用DevOps。