使用nodejs开发serverless应用速成 Part1

Posted Serverless实践

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用nodejs开发serverless应用速成 Part1相关的知识,希望对你有一定的参考价值。

自从之前的一篇文章里提到有华为云有免费公测的serverless可以试用,很多读者发来问题询问使用细节(戏精上身了)。今天就把汇总的问题统一解答。紧接着通过实践体验serverless的魅力。在本系列速成里,Part1部分会介绍几个重要的关键字。之后直接跳入代码行中构建第一个helloworld程序,let’s get our hands dirty!


第一部分 几个概念


什么是FaaS?

这个概念基于无服务器计算。FaaS使我们能部署并运行单独的代码或函数,直接获得返回结果,并结束进程。如果你曾经写过REST API,会对这种开发模式比较熟悉。FaaS可以将一个复杂应用或服务分成一堆小单元,微服务。FaaS的目标是对开发者完全屏蔽服务器配置,使得服务变得很容易扩展。并且根据调用函数的次数来计费。但是围栏的这一边一切都不那么阳光明媚。围绕FaaS还有很多问题需要讨论:如何确认错误被合理的处理了? 没有了物理服务器监控指标,怎么样获取全局应用的执行状况?如何提高函数运行性能?等等这些问,留在我们在后续的实践过程中逐一讨论。


FunctionStage是什么?

FunctionStage是华为云提供的serverless服务,用户无需预配置服务器等基础设施,实现上传代码即可运行。FunctionStage在执行代码时实现计算资源自动伸缩,以弹性和高可靠性运行代码,并提供日志查询,性能监控等功能。

用户借助FunctionStage可以快速构建起多种类型的应用和服务。用户无需管理和运维,由FunctionStage承担执行计算资源的管理工作,如服务器和操作系统维护、容量预置和自动扩展、代码监控和记录等。用户只需为运行代码消耗的资源支付费用,代码未运行时不产生费用



与FunctionStage相关联的服务有哪些?

与FunctionStage相关联的华为云服务有:IAM(统一身份认证服务)、SMN(消息通知服务)、DMS(分布式消息服务)、OBS(对象存储服务)和DIS(数据接入服务)、APIG(API网关)服务。

使用FunctionStage去访问其他的云服务(如DMS和DIS等)时需要在IAM创建“委托”,让用户可以对企业拥有的云资源执行增、删、改、查和调用等操作。不需要访问其他云服务,则不用设置委托。

使用FunctionStage创建SMN触发器之前需要在SMN创建“主题”,用以订阅消息主题。

使用FunctionStage创建DMS触发器之前需要在DMS创建“队列”和“消费组”,用以定期拉取消息。

使用FunctionStage创建OBS触发器之前需要在OBS创建“存储桶”,用设置桶事件。

使用FunctionStage创建DIS触发器之前需要在DIS创建“接入通道”,用以定期拉取数据。

使用FunctionStage创建APIG触发器之前需要在APIG创建“分组”和“发布环境”,创建APIG触发器时需要设置分组和发布环境。


FunctionStage支持哪些编程语言?

FunctionStage目前支持的编程语言有Python 2.7、Python 3.6、Node.js 6.10、Java 8、Go 1.8。


使用FunctionSage开发程序之后如何部署运行?

除了使用页面IDE实现简单函数编辑之外。用户在本地开发程序之后打包,必须是ZIP包(Java、Node.js、Python、Go)或者JAR包(Java),上传至FunctionSage即可运行,无需其它的部署操作。

制作ZIP包的时候,单函数入口文件必须在根目录,保证解压后,直接出现函数执行入口文件,才能正常运行。

对于Go runtime,必须在编译之后打zip包,编译后的动态库文件名称必须与函数执行入口的插件名称保持一致,例如:动态库名称为testplugin.so,则“函数执行入口”命名为testplugin.Handler。


使用FunctionStage开发能否引入类库?

使用FunctionStage编写函数支持引入标准库及非标准三方库,FunctionStage也内置了一些非标准三方库。


FunctionStage函数是否支持环境变量?

创建函数时可以设置环境变量,无需对代码进行任何更改,可以设置动态参数,传递到函数代码和库


能否在函数代码中使用线程和进程?

用户可使用编程语言和操作系统的功能,在函数中创建额外的线程和进程。


第二部分 Helloworld

构建一个最简单的Helloworld,构建完成后直接通过函数控制台触发函数执行,打印helloworld


操作步骤

1. 登录FunctionStage,进入“函数”界面。

2. 在“函数”界面,单击“创建函数”,进入“创建函数”界面。

3. 在“创建函数”界面填写函数信息。

使用nodejs开发serverless应用速成 Part1

函数执行入口:对于Node.js函数,默认填写index.handler,表示函数的文件名为index.js,执行的入口函数名为handler。

使用nodejs开发serverless应用速成 Part1


4. 编辑代码

exports.handler = function (event, context, callback) {

    event.functionname = 'test';

    event.requestId = context.requestId;

    event.timestamp = (new Date()).toString();

    console.log('event:', JSON.stringify(event));

    callback(null, JSON.stringify(event));

}

函数有明确的接口定义如下:

export.handler = function(event, context, callback)

  • 入口函数名(handler):入口函数名称, 需和函数执行入口处用户自定义的入口函数名称一致。

  • 执行事件(event):函数执行界面由用户输入的执行事件参数, 格式为JSON对象。

  • 上下文环境(Context):Runtime提供的函数执行上下文,其接口定义在SDK接口说明。

  • 回调函数(Callback):callback方法完整声明为callback(err, message),用户通过此方法可以返回err和message至前台结果显示页面。具体的err或message内容需要用户自己定义,如字符串。

用console.log打印event,同样在回调函数中将event以字符串返回


5.创建并测试函数

使用nodejs开发serverless应用速成 Part1


6.配置测试事件

使用nodejs开发serverless应用速成 Part1


7.执行并查看返回结果

使用nodejs开发serverless应用速成 Part1


8.查看控制台里其他配置

配置页

内存:这里可以改变函数执行的规格,这也是仅有的一个规格要用户配置的。后续会有文章展开讨论如何决定最适合你函数runtime规格的方法。

超时(秒):函数执行的最大时间,函数运行超过该设置时长将被强行停止。

环境变量:执行时需要注入的变量,例如指定函数去指定的对象存储通拉取数据。

使用nodejs开发serverless应用速成 Part1

触发器

函数是事件触发的。触发器规定了函数启动的条件,一旦该条件满足,函数将会立即执行,产生相应执行实例。当前,函数可以被5种服务触发。这在后续实例中会分别引入介绍。

使用nodejs开发serverless应用速成 Part1

函数指标

函数执行监控查看界面,可以直观的分四个维度查看1小时内的执行情况

使用nodejs开发serverless应用速成 Part1

函数日志

函数执行日志查看界面,可以直观的分四个维度查看1小时内的日志

使用nodejs开发serverless应用速成 Part1

函数别名

可配合版本控制配合实现函数的别名管理


到这里速成的Part1部分结束,回顾一下本篇内容:

  1. Serverless的几个重要的关键字

    • FaaS

    • FunctionStage

    • 触发器

  2. 运行第一个helloworld程序


以上是关于使用nodejs开发serverless应用速成 Part1的主要内容,如果未能解决你的问题,请参考以下文章

搞不定Serverless?让你秒懂掌握Profiling让一份程序优雅自适应

人人都是 Serverless 架构师 | 弹幕应用开发实战

Serverless应用架构转型

即学即会 Serverless | 如何解决 Serverless 应用开发部署的难题?

实战指南 | Serverless 架构下的应用开发

Serverless Devs 2.0 全新发布,让 Serverless 应用开发更简单