作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
环Aruljothi的头像

环Aruljothi

Vignes专注于web技术,在使用JavaScript和节点构建可扩展应用程序方面拥有多年的经验.js.

专业知识

以前在

英特尔
分享

创建软件并不仅仅是编写好的代码. 当软件被部署并能够正确处理请求,当我们可以在不影响性能和运行成本的情况下进行扩展时,它就完成了.

您可能正在考虑如何使用云计算来处理所有这些事情. “这有什么新鲜的呢 serverless 的事情,环?”

Serverless节点.使用Google Cloud的功能

无服务器计算是一种架构风格,其中代码在云平台上执行,我们不需要担心硬件和软件设置, 安全, 表演。, 和CPU空闲时间成本. 这是云计算的一个进步,它超越了抽象软件环境的基础设施. 这意味着运行代码不需要任何配置.

使用无服务器,以下将是您的工作方式:

  1. 开发代码.

  2. 将代码上传到服务提供者.

  3. 配置触发器(在本例中是一个HTTP请求).

我们的工作完成了! 现在,平台提供商将负责接收请求和扩展.

无服务器微服务简介

无服务器架构通常与微服务风格的设计相结合. 微服务是大型软件的一个独立部分,用于处理某个特定模块的请求. 通过创建可以在无服务器环境中运行的微服务, 维护代码和加快部署变得很容易.

AWSλ简介 & GCF,一个比较

无服务器特性通常被称为“后端即服务”或“功能即服务”.“无服务器计算提供商的数量开始增加. 然而, 一些传统的大公司也提供无服务器选项, 比如亚马逊网络服务 AWSλ函数 和谷歌云的 谷歌云功能 (GCF),后者,而目前在测试中,是我正在使用. 虽然它们的工作原理相似,但它们之间有一些重要的区别.

 AWSλ谷歌云功能
语言支持节点.js, Python, c#, Java节点.js
触发器DynamoDB、Kinesis、S3、SNS、API网关(HTTP)、CloudFront等等HTTP,云发布,云存储桶
最大执行时间300秒540秒

在本文中,我们将介绍使用GCF实现无服务器代码部署的过程. 谷歌云功能是轻量级的, 基于事件的, 异步计算解决方案,允许您创建小型, 用于响应云事件而不需要管理服务器或运行时环境的单一功能.

GCF有三种基于触发器的可能实现.

  1. HTTP触发 将HTTP请求路由到云功能

  2. 内部谷歌发布/订阅触发器 将发布和订阅请求路由到云功能

  3. 云存储桶触发器 将对存储桶所做的任何更改路由到云功能

让我们使用谷歌云功能创建一个基于HTTP触发器的设置

谷歌云功能不需要任何额外的特殊设置或安装. GCF确保默认节点环境已设置并准备好执行. 当使用HTTP作为触发器创建云函数时,它会提供一个URL来触发该函数. 与AWSλ的比较, 它使用API网关作为与之通信的媒介, 谷歌云功能立即提供URL projectID 和地区.

谷歌云平台图-云功能 & AWSλ

创建无服务器节点.js应用程序

为了使我们的代码在GCF中可执行,我们应该将代码包装在一个函数中. 每当触发发生时,GCF将调用该特定函数. 可能的方法是上传,

  1. 单个文件:导出一个默认函数,该函数将根据请求调用其他函数.

  2. 多个文件:有一个 指数.js 文件需要所有其他文件,并导出默认函数作为起点.

  3. 多个文件:配置一个主文件 包.json 使用 “主要”:“主要.js" 作为起点.

以上任何一种方法都有效.

GCF支持特定的节点运行时版本. 确保所编写的代码支持该特定版本. 在写这篇文章的时候,GCF支持节点 v6版本.11.1.

要创建一个函数,有几个选项需要考虑.

  1. 内存 这表示在一个运行时处理请求需要多少内存. 以MB定义. 对于小型应用程序,128MB应该足够了,但可以增加到2GB.

  2. 超时 顾名思义,超时定义了预期的代码执行超时. 在此之后,代码将被杀死并停止. 在此点之后的任何执行都将突然停止. 最大超时时间为540秒.

  3. 要执行的函数 虽然可以从主处理程序文件导出多个函数, 我们需要配置一个应该被触发来处理请求的函数. 这允许开发人员基于HTTP方法/URL拥有多个入口点.

要上传代码,只需对代码进行复制粘贴,以创建函数门户. 对于多个文件,请压缩内容并上传文件. 确保在ZIP文件的情况下,应该有一个 指数.js 文件或 包.json 文件与所提到的主文件.

任何NPM模块依赖都应该在 包.json. GCF尝试安装中提到的模块 包.json 文件.

让我们创建一个简单的处理程序来返回一个200状态和一些消息. 创建一个函数并将以下代码添加到源代码中.

出口.httpServer = function httpServer(要求的事情, res) {
   控制台.日志(要求的);
  res.状态(200).send('服务器正在工作');
}

正在创建的函数的屏幕截图

创建函数后,打开提供的URL以触发该函数. 它的响应应该如下所示.

浏览器输出“Server is working”的截图

现在,让我们检查一下 要求的事情 对象。. 为了查看日志,GCF提供了直接从控制台的选项. 单击垂直点并打开日志选项.

打开日志选项的截图

现在,让我们更新代码来处理简单的路由 /用户.

下面的代码用于处理一个简单的 得到 & 帖子 申请 /用户 路线:

出口.httpServer = function httpServer(要求的事情, res) {
  Const path = 要求的事情.路径;
  开关(路径){
    案例' /用户:
      handleUsers(点播,res);
      打破;
    默认值: 
      res.状态(200).send('服务器正在工作');
  }
};

const handleUsers = (要求的事情, res) => {
  如果要求的事情.方法=== '得到') {
    res.状态(200).发送(“用户清单...');
  } else if(请求.方法=== '帖子') {
    res.状态(201).发送(“创建用户...')
  } else {
    res.状态(404);
  }
}

更新后,现在让我们在浏览器中测试它,但这次使用 /用户 最后.

浏览器输出“列出用户”的屏幕截图..."

那很酷. 我们创建了一个带路由的基本HTTP服务器.

操作 & 调试

如果代码是故事的结尾, 你就不会研究像无服务器节点这样的基础设施选项.js应用程序. 下面是如何处理常见任务(如部署和调试)的简要摘要. 的事情 节点.js开发人员 已经为其他应用程序做了.

部署:

函数代码可以用四种方式部署.

  • 在控制台中复制粘贴代码

  • 上传ZIP文件

  • 以ZIP文件的形式从云存储桶中部署

  • 从云源存储库进行部署

显然,最方便的选择是从源存储库部署.

调用:

在创建函数时, Console提供HTTP URL来触发该函数,格式为: http://-.cloudfunctions.net/

AWSλ的函数有冷启动问题,这使得函数执行需要额外的时间来启动. 一旦启动,以下执行将正常响应. 这个初始的额外启动时间被称为冷启动. 虽然我们没有与这个主题相关的GCF官方文档, 冷启动问题在我们的测试中没有出现.

调试:

GCF集成了Google Cloud中的Stackdriver日志服务. 所有控制台日志和错误都会记录在这里,它有助于调试已经部署的代码.

测试:

控制台提供了通过传递JSON作为输入来测试函数的选项. 将以JSON作为输入调用该函数,输出将显示在控制台中. 请求(输入)和响应类似于Express.Js框架,可以在开发过程中进行单元测试. 如果您需要复习节点.Js测试,签出 一个节点.js实际集成测试指南

限制和下一步

使用无服务器功能有其自身的优势,但也有其局限性

  • 供应商: 它将我们编写的代码限制为一个特定的服务提供者. 将代码转移到另一个提供者需要重写代码,并为迁移做了大量的工作. 由于这可能是一个大问题,我们在选择服务提供商时应该非常小心.

  • 请求数量和硬件资源的限制: 提供者通常会限制一个函数一次处理的并行请求的数量. 还有内存限制. 这些类型的限制可以通过与提供者交谈来提高, 但它们仍将存在.

谷歌云功能正在不断成熟和完善. 它仍然在不断改进和更新,特别是在它可以支持的语言中. 如果您计划使用谷歌云功能, 密切关注更改日志,以避免实现中的任何破坏性更改.

关于总博客的进一步阅读:

了解基本知识

  • 什么是无服务器计算?

    无服务器计算是一种架构风格,其中代码模块在由操作触发时按需执行, 例如HTTP请求. 无服务器架构通常与微服务风格设计相结合,其中每个模块只包含一个操作.

  • AWSλ和谷歌云功能有什么区别?

    AWSλ和谷歌云功能 (GCF)都是无服务器计算提供商. AWSλ支持更多的语言、触发器和更少的最大执行时间. 它们的工作原理相似,但GCF的设置和使用更简单.

聘请Toptal这方面的专家.
现在雇佣
环Aruljothi的头像
环Aruljothi

位于 印度泰米尔纳德邦的金奈

成员自 2017年8月11日

作者简介

Vignes专注于web技术,在使用JavaScript和节点构建可扩展应用程序方面拥有多年的经验.js.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

专业知识

以前在

英特尔

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.