Java
- • 上图代码中入口函数handler是回调函数,其他函数都是async函数
- • callback的第一个参数是错误信息,第二个参数是返回值,如果函数运行正常没有报错,callback第一个参数返回空值。
触发器及事件对象
Faas接收到触发器产生的事件之后会根据触发器信息生成event对象,以event为参数调用函数
Http触发器
http触发器会根据http请求和请求参数生成事件,然后以参数形式传递给函数。那么http函数触发器的入口函数中的request和response参数具体由哪些属性组成?
http触发器request参数
通过以下这种方式获取request中的body信息
API网关触发器
用API网关接收http请求,然后产生事件,将事件传递给Faas,Faas将函数执行完毕之后,将函数返回值传递给API网关,API网关再将返回值包装为Http响应返回给用户
Lambda API网关触发器event参数示例
http触发器使用起来更简单,API网关触发器功能更加丰富比如ip黑名单,流量控制等
定时触发器
小结
- • 每个云厂商都实现与自己相关的触发器,比如文件存储触发器、消息触发器、数据库触发器
- • 触发器决定了一个Serverless应用如何提供服务也决定了代码应该如何编写
- • 丰富的触发器可以让应用的功能更加强大,不同的触发器的额外属性不同也给编程带来了麻烦
- • 将业务逻辑拆分到入口函数之外,保持入口函数的简洁,这样业务代码就与触发器无关了
日志输出
在Serverless中,日志输出和传统应用的日志输出没有太大差别,只是日志的存储和查询方式变了
- • 默认使用日志服务存储日志,日志服务包含日志采集和分析产品并设置报警项。
- • 各个云厂商的Faas使用自己的日志服务来存储函数日志。
- • Faas平台也提供了基本的函数监控,包括函数的运行时长,内存使用
异常处理
- • 虽然在Serverless中一个函数的异常,只会影响这一次函数的运行,不会使得整个系统崩溃,但是在编写代码时,也需要充分考虑程序的异常,保证代码的健壮性,进一步提升系统稳定性。
- • 代码编辑可以在云端进行,而不仅仅在本地进行。
- • 应用的组成是单个独立的函数而不是所有功能的集合体。
- • 除了具体基本的函数能力之外,还需要提供便利的开发工具,丰富的触发器,完善的日志监控等其他服务集成,这些是在做技术选型的时候需要考虑的问题。
执行上下文重用问题案例分析
为函数设置一个定时触发器,每分钟执行一次。这段代码在本地执行是没有问题的,每次执行函数都会获取一个新的时间,然后查询数据。
但在Serverless中就存在两个比较严重的问题:
- • 函数并发限制
- • 执行上下文重用
这个案例的现象是每次查询的结果都是一样的。
要想深刻的理解问题原因呢需要先了解Serverless的运行原理
Serverless运行原理
Serverless运行原理本质上就是函数的运行原理
接下来从三个角度来叙述下。
函数调用链路:事件驱动函数执行
在案例中设置了一个定时触发器,函数每分钟都会执行一次,这是因为定时触发器会产生一个事件,Faas平台会接收各种事件,当时间来临的时候会根据事件属性来执行函数,这个过程叫事件驱动。