【音频】Serverless应用开发常见思路|学习笔记

本文涉及的产品
简介: 快速学习【音频】Serverless应用开发常见思路。

开发者学堂课程【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页)。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
8月前
|
Serverless
函数计算入门-HelloWorld应用开发
本场景介绍如何使用函数计算服务开发HelloWorld应用。
487 0
|
8月前
|
存储 JavaScript 前端开发
Vue的Serverless应用开发
Vue的Serverless应用开发
|
新零售 运维 Kubernetes
SAE -第一课《 Serverless 应用引擎的过去、现在和未来》|学习笔记
快速学习 SAE -第一课《 Serverless 应用引擎的过去、现在和未来》
374 0
SAE -第一课《 Serverless 应用引擎的过去、现在和未来》|学习笔记
|
Web App开发 人工智能 弹性计算
FC -第一课-《从云计算到云原生再到 Serverless 架构》|学习笔记
快速学习 FC -第一课-《从云计算到云原生再到 Serverless 架构》
318 0
FC -第一课-《从云计算到云原生再到 Serverless 架构》|学习笔记
|
云安全 供应链 Cloud Native
serverless学习笔记: 解读云原生的 2022 0x2 产业落地篇
serverless学习笔记: 解读云原生的 2022 0x2 产业落地篇
118 0
serverless学习笔记: 解读云原生的 2022 0x2 产业落地篇
|
Kubernetes Cloud Native 关系型数据库
serverless学习笔记: 解读云原生的 2022 0x1
serverless学习笔记: 解读云原生的 2022 0x1
141 0
serverless学习笔记: 解读云原生的 2022 0x1
|
运维 NoSQL Serverless
serverless 学习笔记: 解读Serverless的2022
serverless 学习笔记: 解读Serverless的2022
144 0
serverless 学习笔记: 解读Serverless的2022
|
存储 弹性计算 Cloud Native
serverless 学习笔记: 阿里云已将 Serverless 数据库大规模落地,这是否代表着数据库的新风向?
serverless 学习笔记: 阿里云已将 Serverless 数据库大规模落地,这是否代表着数据库的新风向?
260 0
serverless 学习笔记: 阿里云已将 Serverless 数据库大规模落地,这是否代表着数据库的新风向?
|
运维 Kubernetes Serverless
serverless学习笔记 | 关于 Serverless 应用架构对企业价值的一些思考
serverless学习笔记 | 关于 Serverless 应用架构对企业价值的一些思考
164 0
serverless学习笔记 | 关于 Serverless 应用架构对企业价值的一些思考
|
人工智能 缓存 运维
serverless学习笔记 | 颠覆开发模式的创新发布背后,我看见了云计算的下一个十年
serverless学习笔记 | 颠覆开发模式的创新发布背后,我看见了云计算的下一个十年
164 0
serverless学习笔记 | 颠覆开发模式的创新发布背后,我看见了云计算的下一个十年

热门文章

最新文章

相关产品

  • 函数计算