端云联调DevsDevs远端环境中运行远端](组图)

背景

说起目前最流行的技术,免不了要讨论一个概念:Serverless。作为一种新型的应用架构,Serverless 将我们从繁琐的基础设施维护中解放出来。我们只需要上传代码包或者图片,就可以得到一个灵活、高可用、免运维、低成本的服务。

听起来很美的 Serverless,在实际开发过程中确实存在一些痛点。比如在使用Serverless的过程中,一定会遇到以下问题:

行业研究报告(hacknoon serverless report[1])也表明,调试是实现 serverless 的最大障碍。目前业界现有的Serverless应用调试方式主要是模拟云执行环境进行本地调试;而在远程环境中运行的应用程序主要依赖于日志。由于无法在本地模拟真实的云环境,本地调试无法解决上述问题。为此,我们推出了业界创新的端云联调功能,解决Serverless应用调试问题。

端云联调

Serverless Devs的端云联调功能[2]的核心思想是让本地开发环境突破网络的限制,与云环境融合。通过端云联调,开发者可以在本地启动实例,无缝对接云环境,快速进行测试和问题调试。端云联调可以帮助开发者:

修改代码,实时查看结果,用最短闭环调试迭代。例如,要开发的服务依赖于其他服务。当本地代码开发完成后,最好发起端到端测试,看看更改是否破坏了调用者服务。如果采用传统方式,需要将代码部署到远程端才能启动测试,过程非常冗长。它可以以最高的效率重用丰富的本地开发和调试工具。例如,要调查远程环境中的测试用例失败,我们只能依靠过去的日志。如果我们可以将生产流量导入本地环境中的实例并使用本地环境中的各种 IDE 进行调试,那不是很酷吗?

如下图所示b本地调试工具,端云联调建立本地开发机与云应用VPC环境之间的安全隧道连接。访问云应用的流量会自动转发到本地开发机;同时,本地实例访问的外网流量也会自动转发到云应用的VPC环境。比如本地实例访问云端的RDS数据库实例,如果开发者在本地调试开发,只能开放RDS实例的公网访问或者购买VPN服务,实现本地访问在线VPC。通过端云联调,可以直接通过内网访问RDS实例,无需修改任何配置。

开启端云联调

只要用户在 s.yaml 目录中执行 s 代理设置,该命令就会执行以下操作:

根据你的s.yaml vpc配置等信息创建一个辅助Service/Function,并为辅助功能预留1个实例。该辅助函数的作用是充当代理服务,本地实例的所有传入和传出流量都将通过该代理服务。启动本地环境的代理容器实例,通过通道服务与1中的FC网络代理容器实例建立双向通信TCP隧道。启动本地函数容器实例。比如使用Custom Runtime直接运行SpringBoot应用,启动SpringBoot的本地函数容器实例和2中的代理容器实例进行网络共享。springboot应用已经可以访问内网在线的VPC资源了。本地函数容器实例启动成功后,即可开始调试,直接使用s proxied invoke或curl自定义域名调用辅助Service/Function,流量会通过代理服务回传到本地函数容器实例,并且本地 IDE 将在实例 Debug 中使用断点启动应用程序。关闭端云联调

因为会有1个实例预留的辅助功能,调试后可以手动清理资源,避免不必要的费用。

在开启端云联调的终端,直接CTRL+C中断或者在另一个终端,在同目录下执行s proxied cleanup

使用上述1或2种方法之一,如果担心,可以多次执行s proxied cleanup。

即使忘记清理b本地调试工具,如果本地开发者关机或断网,也会自动关闭通道会话,自动清理预留资源。

实战场景示例

以阿里云函数计算的一个真实企业客户为例:小王是一家业务驱动型公司的开发者。为提高业务迭代效率,公司将技术架构演进为全面的云原生方式,减少基础设施的管理和运维。结构大致如下:

小王将迭代最频繁的外部前后端项目一键迁移到函数计算的自定义运行时,其中SpringBoot项目需要能够使用各种VPC内网地址访问下游服务(如registry或其他微服务接口)),这时候Serverless Devs[3]提供的端云联调就可以派上用场了。只需要在s.yaml(s.yaml中定义功能的VPC配置)所在目录执行即可:

$ s proxied setup

该命令将与云 VPC 环境建立安全的网络通道,并在本地启动应用程序实例。此时本地实例可以无缝访问云VPC环境中的资源,比如使用内网地址访问registry、RDS、Kafka等。这意味着你的应用配置不需要做任何改变就可以与资源交互在本地和云环境中。

同时,直接使用这个SpringBoot后端项目对应的函数计算FC上的自定义域名,将流量路由到本地应用实例。比如你的前端项目部署到FC的函数名是frontend,对应的自定义域名是frontend.abc.com。前端依赖部署在FC上的后端服务的函数名是backend,对应的自定义域名是backend.abc.com。这时候直接在浏览器中打开fronted.abc.com,对后端请求进行操作。流量自动从线上路由到本地 SpringBoot 实例,并在终端实时显示 SpringBoot 日志。指向从线路调试流量。

假设SpringBoot后端项目的实例本地启动失败,可能的原因包括函数计算的VPC配置错误、对应下游服务的白名单限制等。此时,您可以在本地重现与云环境实例相同的启动过程,这对于解决实例启动问题非常有帮助。如下所示:

从本地实例的启动进程信息中我们可以很清楚的定位到Nacos无法访问的原因。我们需要检查该功能是否正确配置了 Nacos 所在的 VPC 信息,或者 Nacos 是否有白名单限制等。

总结

最后,我们简单用一张表来总结一下本地调试和端云联调的区别:

Serverless 作为未来十年云计算的默认计算范式,是目前 Serverless 调试面临的最大挑战之一。与其他仅提供本地调试能力的竞争对手相比,阿里云函数计算创新地提出了端云联调。并且通过工具实现良好的开发者体验,大大提高Serverless应用开发者的开发效率和幸福感,人生太短,我用Serverless!

相关链接

[1] hacknoon 无服务器报告:

[2] 端云联调:

[3] 端云联调:

参考

Spring Boot Serverless实战| 无服务器应用程序的监控和调试

原文链接:

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论