本文概述
- 无服务器微服务简介
- AWS Lambda和GCF简介, 比较
- 创建无服务器Node.js应用程序
- 运营与调试
- 局限性和后续步骤
你可能正在考虑如何使用云计算来处理所有这些事情。 “ 那么, 这种无服务器的新事物是什么, Vignes?”
文章图片
无服务器计算是一种体系结构样式, 其中的代码在云平台中执行, 因此我们无需担心硬件和软件设置, 安全性, 性能以及CPU空闲时间成本。这是云计算的一项进步, 它超越了抽象软件环境的基础架构。这意味着无需配置即可运行代码。
使用无服务器, 以下将是你的工作风格:
- 开发代码。
- 将代码上传到服务提供商。
- 配置触发器(在本例中为HTTP请求)。
无服务器微服务简介 无服务器架构通常与微服务风格设计结合在一起。微服务是大型软件的独立部分, 可处理对特定模块的请求。通过创建可在无服务器环境中运行的微服务, 维护代码和加快部署变得很容易。
AWS Lambda和GCF简介, 比较 无服务器功能通常称为” 后端即服务” 或” 功能即服务” 。无服务器计算提供商的数量开始增加。但是, 一些传统的大公司也提供无服务器选项, 例如Amazon Web Services的AWS Lambda Functions和Google Cloud的Google Cloud Functions(GCF), 而后者正在我处于测试阶段时使用。尽管它们的工作原理相似, 但它们之间还是有一些重要的区别。
AWS Lambda | Google Cloud功能 | |
---|---|---|
语言支持 | Node.js, Python, C#, Java | Node.js |
扳机 | DynamoDB, Kinesis, S3, SNS, API网关(HTTP), CloudFront等 | HTTP, Cloud PubSub, 云存储桶 |
最长执行时间 | 300秒 | 540秒 |
GCF具有三种基于触发器的可能实现。
- HTTP触发器将HTTP请求路由到云功能
- 内部Google发布/订阅触发器将发布和订阅请求路由到云功能
- 云存储桶触发器将对存储桶所做的任何更改路由到云功能
Google Cloud Functions不需要任何其他特殊设置或安装。 GCF确保设置默认节点环境并准备执行。使用HTTP作为触发器创建云功能时, 它将提供一个URL来触发该功能。与使用API??网关进行通信的AWS Lambda相比, Google Cloud Functions根据projectID和区域立即提供URL。
文章图片
创建无服务器Node.js应用程序 为了使代码在GCF中可执行, 我们应该将代码包装在一个函数中。每当触发发生时, GCF都会调用该特定函数。可能的方法是上传,
- 单个文件:导出默认函数, 该函数将根据请求调用其他函数。
- 多个文件:具有一个index.js文件, 该文件要求所有其他文件并导出默认功能作为起点。
- 多个文件:在package.json中使用”
main”
:”
main.js”
作为起点配置一个主文件。
GCF支持特定的Node运行时版本。确保编写代码以支持该特定版本。在创建此帖子时, GCF支持Node版本v6.11.1。
要创建函数, 需要考虑的选项很少。
- 内存这告诉你在一个运行时间内处理请求需要多少内存。以MB为单位定义。对于小型应用程序, 128MB应该足够, 但是可以增加到2GB。
- 超时顾名思义, 超时定义了预期的代码执行超时。此后, 代码将被杀死并停止。此后的任何执行都会突然停止。最大超时为540秒。
- 要执行的功能尽管可以从主处理程序文件中导出多个功能, 但我们需要配置一个应触发以处理请求的功能。这允许开发人员具有基于HTTP方法/ URL的多个入口点。
任何NPM模块依赖项都应在package.json中提及。 GCF会尝试在首次安装过程中安装package.json文件中提到的模块。
让我们创建一个简单的处理程序以返回200状态和一些消息。创建一个函数, 并将以下代码添加到源代码中。
exports.httpServer = function httpServer(req, res) {
console.log(req);
res.status(200).send('Server is working');
}
文章图片
创建函数后, 打开提供的URL即可触发该函数。它应该像下面这样响应。
文章图片
现在, 让我们检查日志中的req对象。要查看日志, GCF可以从控制台直接提供选项。单击垂直点并打开日志选项。
文章图片
现在, 让我们更新代码以处理/ users的简单路由。
以下代码用于处理/ users路由的简单GET&POST请求:
exports.httpServer = function httpServer(req, res) {
const path = req.path;
switch(path) {
case '/users':
handleUsers(req, res);
break;
default:
res.status(200).send('Server is working');
}
};
const handleUsers = (req, res) =>
{
if (req.method === 'GET') {
res.status(200).send('Listing users...');
} else if (req.method === 'POST') {
res.status(201).send('Creating User...')
} else {
res.status(404);
}
}
更新后, 让我们现在在浏览器中对其进行测试, 但是这次以/ users结尾。
文章图片
这很酷。我们使用路由创建了一个基本的HTTP服务器。
运营与调试 如果代码是故事的结尾, 那么你将不会研究无服务器Node.js应用程序之类的基础架构选项。以下是有关如何完成部署和调试等常见任务的简短摘要。 Node.js开发人员已为其他应用程序做的事情。
部署:
功能代码可以通过四种方式部署。
- 在控制台中复制粘贴代码
- 上载一个ZIP文件
- 从云存储桶作为ZIP文件进行部署
- 从云源存储库部署
调用:
在创建功能时, 控制台会提供HTTP URL来触发功能, 其格式为:https:// < region> -< project-id> .cloudfunctions.net / < function-name>
AWS Lambda的函数存在冷启动问题, 这使得函数执行需要花费更多时间才能启动。一旦启动, 以下执行将正常响应。此初始额外的启动时间称为冷启动。尽管我们没有与该主题相关的GCF官方文档, 但在测试过程中并未出现冷启动问题。
调试:
GCF与Google Cloud中的Stackdriver Logging服务集成。所有控制台日志和错误都将记录在此处, 它有助于调试已经部署的代码。
测试:
控制台提供了通过传递JSON作为输入来测试功能的选项。该函数将以JSON作为输入来调用, 输出将显示在控制台中。请求(输入)和响应类似于Express.js框架, 并且可以在开发过程中进行单元测试。如果你需要关于Node.js测试的复习, ??请查看《 Node.js实际进行集成测试指南》。
局限性和后续步骤 使用无服务器功能有其自身的优势, 也有局限性
- 供应商锁定:它将我们编写的代码限制为一个特定的服务提供商。将代码移至另一个提供程序时, 需要大量代码来进行迁移, 以重新编写代码。由于这可能是一个大问题, 因此在选择服务提供商时应格外小心。
- 请求和硬件资源数量的限制:提供程序通常会限制函数一次处理的并行请求的数量。也有内存限制。通过与提供者对话, 可以将这些类型的限制提高到更高水平, 但是它们仍然存在。
推荐阅读
- Laravel API教程(如何构建和测试RESTful API)
- 创建Ruby DSL(高级元编程指南)
- 如何修复Firefox不加载页面(详细解决办法分步指南)
- Windows 11如何修复Realtek音频控制台不起作用(解决办法)
- 如何修复Chrome配置文件错误(14种方法分步指南)
- Chrome的16个最佳广告拦截扩展下载推荐合集(哪个最好用())
- 如何修复AirPods已连接但没有声音问题(解决办法教程)
- 15个小型企业最佳免费电子邮件提供商推荐合集(哪个适合你())
- 如何修复Windows键已禁用(详细方法分步教程)