开发者学堂课程【Serverless 技术进阶:【音频】Serverless应用开发常见思路】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/995/detail/15066
【音频】Serverless应用开发常见思路
内容介绍:
一、可观测性
二、如何对应用进行调试
一、可观测性
Serverless应用的可观测性是被很多用户所关注的。可观测性是通过外部表现判断系统内部状态的衡量方式,在应用开发中,可观测性帮助判断系统内部的健康状况。在系统出现问题时,帮助定位问题、排查问题以及分析问题;在系统平稳运行时,帮助评估风险,预测可能出现的问题。
在Serverless应用开发中,如果观察到函数的并发度持续升高,很可能是业务推广团队的努力工作导致业务规模迅速扩张,为了避免达到并发度限制触发流控,开发者就需要提前提升并发度。以阿里云函数计算为例,阿里云函数计算在可观测性层面提供了多种纬度,包括Logging、Metrics以及Tracing等内容。
在控制台监控中心,可以查看到整体的Metrics,服务级Metrics以及每个函数的Metrics。除此之外,还可以看到当前函数的请求记录。
根据不同的请求记录,可以查看到函数的详细信息;
除了在控制台的监控中心处可以查看到函数的日志等信息,在函数详情页面,也可以看到函数的详细日志信息以及Tracing相关信息。
当然,通过Serverless Devs开发者工具,以及函数计算组件也可以进行观测相关操作。
1、通过工具进行Metrics查看
• 有资源描述文件时,可以直接执行s metrics查看函数的指标信息;
• 在没有资源描述Yaml文件时(纯命令行形式),需要指定服务所在地区以及服务名称,函数名等。
此时通过浏览器打开地址,可以看到函数指标信息,需要开启请求级别指标,才能查看函数指标信息,否则图表不展示数据。
开通请求级别指标的方式请同学们在本课程自行查看(文本第4页)。
2、通过工具进行Logs查看
• 有资源描述文件(Yam1)时,可以直接执行s logs进行线上函数的日志查询;
• 在没有资源描述Yaml文件时,需要指定服务所在地区以及服务名称,函数名等。
如果需要以tail模式进行日志的查询,可以增加--tail参数,例如s logs --tail;
查询指定时间段的日志,可以通过增加--start-time和--end-time参数实现。
二、如何对应用进行调试
在应用开发过程中,或者应用开发完成,当所执行结果不符合预期时,通常要进行一定的调试工作。但是在Serverless加架构下,调试往往会受到极大的环境因素限制,通常会出现的情况是,所开发的应用在本地是可以比较健康的、符合预期的运行,但是在 FaaS平台上,则会出现一些不可预测的问题;或者是在一些特殊的环境下,本地没有办法模拟线上环境,难以进行项目的开发和调试。
Serverless应用的调试,一直都是备受诟病的,但是各个云厂商并没有因此放弃在调试方向的不断深入探索。以阿里云函数计算为例,其提供了在线调试、本地调试等多种调试方案。
1、在线调试
简单调试
所谓的简单地调试,就是在控制台来进行调试,以阿里云函数计算为例,可以在控制台通过执行按钮,进行基本的调试,必要的时候,也可以通过设置Event来模拟一些事件。
在线进行调试的好处是,可以使用线上的一些环境进行代码的测试。否则当线上环境拥有VPC等资源时,在本地环境是很难进行调试,例如数据库需要通过VPC来进行访问时,或者有对象存储触发器的业务逻辑等。
2、端云联调
所谓的端云联调指的是在本地进行Serverless应用开发时,往往会涉及到一些线上资源,例如通过对象存储触发器触发函数执行,通过VPC访问数据库等,此时由于线上线下环境的不一致性,会让线下的开发、调试面临极大的挑战。Serverless Devs团队通过搭建Proxy辅助函数的方法,将线上线下资源打通,可以快速帮助开发者在本地进行函数的开发与调试。
ServerlessDevs开发者工具会根据开发者的函数的yaml文件配置,创建辅助服务和辅助函数,这个辅助服务和函数的配置跟您的服务和函数是相同的,并通过辅助服务和辅助函数实现线上线下的网络环境打通,以及完整的端云联调能力:
• 调用这个辅助函数,流量会打回到本地的调试实例,这个时候本地实例接受到event和 context是真实来自线上的;
• 本地调试的实例运行函数逻辑,能直接利用辅助函数运行的那个容器,可以直接访问vpc内网以及一些云服务的内网地址;
• 具体的使用流程是:执行s proxied setup来准备端云联调所需的辅助资源以及本地环境;
• 对于无触发器的普通事件函数或者http触发器函数,准备工作完成后,启动另一个新的终端,切换到该项目路径下,执行s proxied invoke来调用本地函数;
• 完成调试任务之后,可以执行s proxied cleanup清理端云联调所需的辅助资源以及本地环境。
除了通过命令行使用端云联调能力,也可以在VSCode等开发者工具中使用。
最佳实践案例:
三步完成端云联调,端云联调可以通过三个非常简单的步骤快速实现:
步骤1:在已有的项目下,创建端云联调的辅助资源,开启端云联调模式:sproxiedsetup;
步骤2:在完成端云联调模式开启动作之后,通过sproxiedinvoke或者线上的事件进行函数的触发,调试;
步骤3:完成端云联调之后,可以执行sproxiedclean命令,对因端云联调而产生的辅助资源进行清理;
断点调试:通过与常见的IDE进行结合,可以在常见的IDE上实现端云联调的断点调试。
vSCode断点调试案例
步骤1:在已有的项目下,开启调试模式的端云联调能力,命令执行完成功后,本地的函数计算执行环境会阻塞等待调用(执行环境本质是一个HTTPServer);此时若要进行断点调试,需要进行以下的操作:在VSCode上进行相关的配置:ServerlessDevs开发者工具自动在工程目录下面生成.vscode/launch.json文件。
步骤2:打开一个新的终端,通过proxiedinvoke进行触发,例如sproxiedinvoke,如果是事件函数也可以通过线上触发器进行触发,此时要注意将触发器临时指向辅助函数,详情参考proxiedinvoke命令操作过程,回到VSCode界面,既可以进行断点调试了。
调试完成后返回结果,若要在调用的时候制定传入的event参数,可以使用--event,例如sproxiedinvoke-h
步骤3:完成端云联调之后,通过s proxied clean命令,对因端云联调而产生的辅助资源进行清理。
关于Intelli断点调试案例
步骤1:例如需要在IDEA下进行调试,可以在已有的项目下,开启调试模式的端云联调能力,命令执行完成功后,本地的函数计算执行环境会阻塞等待调用(执行环境本质是一个HTTPServer);此时若要进行断点调试,需要进行以下的操作在IDEA上进行相关的配置:
首先,点开Edit Configurations,新建一个Remote Debugging,自定义调试器名称,并将端口配置为3000。上述配置完成后,在IDEA编辑器侧边栏为函数代码增加断点,点击"开始调试"按钮。
步骤2:打开一个新的终端,通过 proxied invoke进行触发,回到IDEA界面,既可以进行断点调试了。调试完成后返回结果,若要在调用的时候制定传入的event 参数,可以使用--event,例如s proxiedinvoke-h
步骤3:完成端云联调之后,通过sproxiedclean命令,对对因端云联调而产生的辅助资源进行清理。
3、本地调试
命令行工具
就目前来看,大部分FaaS平台都会为用户提供相对完备的命令行工具,包括AWS的 SAMCLI,阿里云的 Funcraft ,同时也有一些开源项目例如ServerlessFramework、ServerlessDevs等对多云厂商的支持等。通过命令行工具进行代码调试的方法很简单,以ServerlessDevs为例,本地调试阿里云函数计算:首先确保,本地拥有一个函数计算的项目,然后在项目下执行调试指令,建议查看本节课文字稿(文本第13页)。
编辑器插件
以VScode插件为例,当下载好阿里云函数计算的VSCode插件,并且配置好账号信息之后,可以在本地新建函数,并且在进行打点,之后可以进行断点调试,当函数调试完成之后,可以进行部署等操作。
4、其他调试方案
包括Web框架的本地调试、模拟事件调试,以上调试请同学们查看本节课文字稿(文本14-17页)。