当前位置: 首页 > 后端技术 > Java

SpringBootServerless实战-Serverless应用的监控与调试

时间:2023-04-01 13:36:45 Java

简介:SpringBoot是基于JavaSpring框架的套件。应用程序。在云原生环境中,有大量的平台可以运行SpringBoot应用,比如虚拟机、容器等。但其中最吸引人的是以无服务器方式运行SpringBoot应用程序。作者:细流SpringBoot是一个基于JavaSpring框架的套件,它预装了一系列Spring组件,允许开发者只需要很少的配置就可以创建独立的应用程序。在云原生的世界里,可以运行SpringBoot应用的平台有很多,比如虚拟机、容器等,但其中最吸引人的还是以Serverless的方式运行SpringBoot应用。通过系列文章,我将从架构、部署、监控、性能、安全五个方面来分析在Serverless平台上运行SpringBoot应用的优缺点。为了让分析更具有代表性,我选择了github上50k以上star的电商应用商城作为例子。通过《SpringBootServerless实战-部署》一文,相信大家已经感受到了启动Serverless应用的便利。这是展示如何监控和调试无服务器应用程序的系列文章中的第三篇。实时日志对于运行在远程云平台上的应用,日志是主要的调试手段。分布式应用存在多个实例,日志收集和分析非常具有挑战性。虽然有很多成熟的开源产品,但是构建和维护这些软件的成本并不小。函数计算内置完整的日志收集/分析支持。用户只需要在应用逻辑中输出日志,这些天就会自动收集起来,并可以通过多种方式实时查看、汇总和查询。在上一篇文章中,我们已经使用ServerlessDevs工具为应用自动创建日志仓库。您可以在函数计算控制台查看请求和应用级日志,也可以使用SQL语言进行高级查询。此外,ServerlessDevs工具还提供了实时日志功能,对应用调试很有帮助。在项目根目录下,即s.yaml所在目录下,执行如下命令,会输出s.yaml中定义的所有服务的日志。sudo-Eslogs用户还可以查看指定服务的日志。sudo-Esmall-adminlogs通过-t参数,用户还可以进入观察模式实时查看日志。sudo-Esmall-adminlogs-t此时ServerlessDevs工具会实时监控mall-admin应用下所有实例的日志,实时显示新生成的日志。之后,当我们通过浏览器或者curl等向mall-admin应用程序发送请求时,就可以看到相应的请求处理日志输出。ServerlessDevs也支持根据关键字查询日志。比如我们可以执行如下命令查看mall-admin应用ERROR级别的日志。small-adminlogs-t--keyword=ERROR索引多维度查询展示除了ServerlessDevs的命令行工具,用户还可以在函数计算控制台查看函数、实例、请求等多个维度的日志.以mall-admin为例,在函数计算控制台左侧导航栏中,点击“服务与功能”,选择mall-admin服务,然后选择该服务下的同名功能进入mall-管理功能详情页面。单击监控指标选项卡。如下图,请求列表展示了请求的执行状态,包括成功/失败、在什么函数版本上执行、执行时间、内存占用、在哪个实例上执行等等。查询与请求相关的日志也很方便。下图显示了实例维度的信息。除了指标,用户还可以滚动到页面底部查看对应的实例列表,并登录实例进行相关操作。注意:函数计算的按需实例完全由系统管理,实例闲置一段时间后会被系统回收。回收的实例不再使用,无法登录。下图中以灰色显示。通过函数计算平台提供的日志收集和查询能力,无缝衔接用户的开发流程。修改代码,使用ServerlessDevs工具部署应用,查看日志。整个过程如丝般顺滑。本地调试在将应用部署到云平台之前,我们通常希望将应用部署到本地进行调试。ServerlessDevs工具提供了在本地运行应用程序的能力。在项目根目录(s.yaml所在目录)下,执行命令启动相应的服务。auto参数是指为实例自动生成一个与Web框架兼容的测试域名。例如,执行以下命令:sudo-Esmall-adminlocalstartauto该工具将在本地启动函数实例并提供一个可调用的url。这样我们就可以在本地调试web应用,提高效率。注意:每次启动本地实例时,都会随机生成监听端口。在很多端云联调的情况下,组成应用的微服务/功能需要与其他服务相互调用。除了在本地进行简单的单元测试外,还需要将代码部署到云端进行联调或集成测试。这种方式使得开发调试过程比较漫长,云端的复杂环境也增加了问题诊断的难度。例如:要迁移原来的应用程序,功能实例需要访问云环境中的其他服务。实例启动失败,如何排查原因?应用采用微服务架构,涉及多个服务。本地代码开发完成后,能否快速完成端到端测试?事件驱动的应用程序通过事件源触发功能。有很多链接和长链接。能否在本地快速测试整个链路?...为了解决以上问题,ServerlessDevs提供了端云联调功能。通过端云联调,开发者可以在本地启动实例,无缝对接云环境,快速测试调试问题。端云联调可以帮助开发者:修改代码,实时查看结果,缩短调试迭代闭环。能够以最高的效率复用丰富的本地开发调试工具。端云联调在本地开发机与云应用的VPC环境之间建立安全隧道连接。访问云应用的流量会自动转发到本地开发机;同时,本地实例对外访问的网络流量也会自动转发到云应用的VPC环境中。例如,从本地实例访问云端的RDS数据库实例时,传统上开发者只能允许公网访问RDS实例。而使用端云联调不需要修改任何配置,直接通过内网访问RDS实例即可。以商城应用为例,整个应用由mall-admin-web、mall-admin、mall-portal、mall-search等多个服务组成。服务之间存在上下游依赖关系。例如,mall-admin-web会向下游的mall-admin服务发送请求。假设我们已经在测试环境部署了一整套商城应用服务,现在想在开发机上调试mall-admin服务,需要部署整套服务和数据库如mall-admin-web到开发机,或者通过public与云端VPC中的服务和数据库进行交互是非常繁琐甚至不现实的。端云联调可以让我们在本地开发机环境中启动一个mall-admin服务实例,与云端VPC环境中的其他服务和数据库安全无缝交互。用户不需要做任何设置。首先在s.yaml所在目录执行如下命令,启动mall-admin服务的端云联调。sudo-Esmall-adminproxiedsetup然后在控制台访问mall-admin-web应用,可以看到相关请求已经转发到本地mall-admin功能实例。并且本地实例可以无缝访问云VPC中的数据库或其他服务。注意:使用端云联调时,所有流量都会发送到本地实例。恢复到函数计算上实例的流量,需要执行sdeploy重新部署相关函数。总结从下图中的两份报告可以看出,在Serverless领域,调试和可观察性一直是Serverless开发从业者最大的两大痛点。函数计算作为Serverless产品,始终把开发者放在第一位。它在调试和可观察性方面领先于所有云厂商。在调试方面,ServerlessDevs工具支持本地调试、端云联调,甚至远程调试。调试;在可观察性方面,推出了其他厂商没有的秒级监控、实例指标、实例登录等功能,大大提高了Serverless开发者的工作效率和幸福感。服务器更少,价值更高!本文原文链接为阿里云原创内容,未经允许不得转载。