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

创新推出-Serverless调试大杀器:端云联调

时间:2023-04-01 22:11:44 Java

介绍:端云联调功能不仅提高了Serverless应用开发者的开发效率,也带来了良好的开发体验;让本地开发环境突破网络限制,真正实现与云端环境的融合,本文将带您了解端云联调功能是如何解决应用调试问题的。作者:西柳背景说起目前最火的技术,免不了要讨论一个概念:Serverless。Serverless作为一种新型的应用架构,可以让我们摆脱繁琐的基础设施维护工作。只需上传代码包或图片,即可获得弹性、高可用、免运维、低成本的服务。听起来很美好的Serverless,在实际开发过程中确实存在一些痛点。例如,在使用Serverless的过程中,你一定有以下烦恼:使用FunctionComputeCustomRuntime/Container,想要扁平化原有的SpringBoot、PythonFlask、ThinkPHP等各种语言框架的应用,需要实例启动时访问对于云环境下的其他服务(如数据库或注册中心),应用启动失败如何排查原因?应用采用微服务架构,涉及多个服务。本地代码开发完成后,能否快速完成端到端测试?事件驱动的应用程序通过事件源触发功能。有很多链接和长链接。能否在本地快速测试整个链路?...行业研究报告(hacknoonserverlessreport[1])也表明调试是Serverless落地的最大障碍。目前业界现有的Serverless应用调试方式主要是利用本地模拟云执行环境进行本地调试;而在远程环境中运行的应用程序主要依赖日志。由于无法在本地模拟真实的云环境,本地调试无法解决上述问题。为此,我们推出业界创新的端云联调功能,解决Serverless应用调试难题。ServerlessDevs端云联调[2]功能的核心思想是让本地开发环境突破网络的限制,与云端环境融合。通过端云联调,开发者可以在本地启动实例,无缝对接云环境,快速测试调试问题。端云联调可以帮助开发者:修改代码,实时查看结果,缩短调试迭代闭环。例如,要开发的服务依赖于其他服务。本地代码开发完成后,最好发起一个端到端的测试,看是否改动打断了调用方服务。如果采用传统方式,需要将代码部署到远端,才能发起测试,过程非常冗长。能够以最高的效率复用丰富的本地开发调试工具。比如排查远程环境中测试用例的失败情况,以往只能靠日志。如果可以将生产流量导入到本地环境中的实例,并使用本地环境中的各种IDE进行调试,那不是很好吗?如下图所示,端云联调在本地开发机和云应用的VPC环境之间建立了安全的隧道连接。访问云应用的流量会自动转发到本地开发机;同时,本地实例对外访问的网络流量也会自动转发到云应用的VPC环境中。例如本地实例访问云端的RDS数据库实例,传统开发者在本地调试开发,只能通过公网访问RDS实例或者购买VPN服务实现本地访问线上VPC。而使用端云联调不需要修改任何配置,直接通过内网访问RDS实例即可。端云联调只需要在s.yaml目录下执行s代理设置即可。此命令执行以下操作:根据vpc配置和s.yaml中的其他信息创建辅助服务/功能,并预配置辅助功能。剩余1个实例。这个辅助功能的作用是充当代理服务,本地实例所有进出流量都会经过代理服务。在本地环境启动代理容器实例,通过通道服务与1中的FC网络代理容器实例建立双向通信TCP隧道。启动本地函数容器实例。比如直接在CustomRuntime中运行SpringBoot应用,启动SpringBoot的本地函数容器实例和2中的代理容器实例共享网络。springboot应用已经可以访问内网在线VPC资源。本地函数容器实例启动成功后,就可以开始调试了。可以直接使用s代理调用或者curl自定义域名来调用辅助Service/Function。流量会通过代理服务返回到本地的函数容器实例,本地的IDE会启动实例中的应用。进行断点调试。关闭端云联调,因为会有预留1个实例的辅助功能,所以调试完成后,可以手动清理资源,避免不必要的开销。在开启了端云联调的终端,直接CTRL+C中断,或者在另一个终端,在同目录执行sproxiedcleanup,使用上述1或2方法之一。如果不放心,可以执行多次代理清理。即使忘记清理,如果本地开发关闭或网络断开,通道会话也会自动关闭,保留的资源会自动清理。实战场景举例以阿里云函数计算的一个真实企业客户为例:小王是一家业务驱动型公司的开发人员。运维,结构大致如下:小王将最频繁迭代的外部前后端项目一键迁移到函数计算的CustomRuntime。其中,SpringBoot项目需要能够使用各种VPC内网地址访问下游服务(如Registry或其他微服务接口),此时ServerlessDevs提供的端云联调[3]就可以派上用场,只需要在s.yaml(VPC配置,函数定义在s.yaml)所在目录下执行:$sproxiedsetup该命令会与云端VPC环境建立安全网络通道,并在本地启动应用实例.此时本地实例可以无缝访问云VPC环境中的资源,比如使用内网地址访问注册中心、RDS、Kafka等。这意味着你的应用配置可以与本地和本地的资源进行交互。没有任何变化的云环境。同时直接在函数计算FC上使用自定义域名对应的这个SpringBoot后端工程,流量会路由到本地应用实例。比如你部署到FC的前端项目的函数名是frontend,对应的自定义域名是frontend.abc.com。部署在FC上的前端所依赖的后端服务的函数名为backend,对应的自定义域名为backend.abc.com。这时候你直接在浏览器中打开fronted.abc.com,用后台请求进行操作。流量会自动从线路路由到本地的SpringBoot实例。同时,SpringBoot日志会实时显示在终端上。您甚至可以使用Click来调试来自线路的流量。假设SpringBoot后端工程实例在本地启动失败,可能的原因包括函数计算的VPC配置不正确,对应的下游服务有白名单限制等。此时,您可以在本地重现与云环境中的实例相同的启动过程,这对于排查实例启动问题非常有帮助。如下图所示:我们从本地实例的启动过程信息中可以很清楚的定位到原因是Nacos无法访问。我们需要检查函数是否正确配置了Nacos所在的VPC信息,或者Nacos是否有白名单限制等。总结最后简单用一张表来总结下本地调试和端云联调的区别:Serverless是未来一年或十年云计算的默认计算范式。目前,调试是Serverless中最大的挑战之一。与其他竞争对手只提供本地调试的能力相比,阿里云函数计算创新性地提出了端端和云端的联合调试,通过工具实现良好的开发者体验,大大提高了开发者的开发效率和幸福感。无服务器应用程序。人生如此短暂。我使用无服务器!相关链接[1]hacknoonserverless报告:https://hackernoon.com/top-5-...[2]端云联调:https://github.com/devsapp/fc...[3]端云联调:https://help.aliyun.com/docum...原文链接本文为阿里云原创内容,未经允许不得转载。