说起当前最火一个技术, 不可避免地讨论到一个概念:Serverless。作为一种新型的应用架构,Serverless 让我们摆脱了维护基础设施的繁琐,只需要上传代码包或者镜像, 即可得到一个弹性、高可用、免运维、低成本的服务。
听上去很美的 Serverless 在实际落地开发过程中,却确存在一些痛点。比如您在使用 Serverless 的过程中,肯定有如下的困扰:
业界的调研报告(hacknoon serverless report[1])也体现调试是 Serverless 落地最大的障碍。目前业界已有的 Serverless 应用调试手段,主要是在本地模拟云端执行环境进行本地调试;而远端环境中运行的应用则主要靠日志。由于在本地无法模拟真实的云端环境,因此本地调试无法解决上述问题,为此我们推出了业界创新的端云联调功能,解决 Serverless 应用调试的难题。
Serverless Devs 的端云联调[2]功能,核心思路是要让本地开发环境突破网络的限制,和云端环境融为一体。开发者通过端云联调能在本地启动实例,和云端环境无缝连通,快速进行测试和问题调试。端云联调能帮助开发者:
如下图所示,端云联调在本地开发机和云端应用的 VPC 环境间建立一条安全的隧道连接。访问云端应用的流量将自动转发到本地开发机上;同时本地实例对外访问的网络流量也被自动转发到云端应用的 VPC 环境中。比如在本地实例访问云端的 RDS 数据库实例,传统方式开发者如果在本地进行调试开发的话, 只能放开 RDS 实例的公网访问或者购买 VPN 服务实现本地访问线上 VPC。而使用端云联调,不需要任何配置的改变,可以直接以内网的方式访问 RDS 实例。
用户只要在 s.yaml 的目录下, 执行 s proxied setup,这个命令做了如下事情:
因为会有一个辅助函数预留1个实例, 所以调试结束后, 您可以手动清理资源, 以免产生不必要的费用。
使用上面 1 或者 2 其中一个方法即可, 如果您不放心, 可以多次执行 s proxied cleanup。
即使您忘记清理, 如果本地开发机关机或者断网, 通道 session 会自动关闭, 预留的资源也会自动清理。
以阿里云函数计算一个真实的企业客户为例:小王是一个业务驱动型的公司的开发, 公司为了提高业务迭代效率, 技术架构向全面云原生化演进, 减少基本设施的管理和运维, 架构大致如下:
小王将迭代最频繁的对外的前后端分离的项目都一键迁移到函数计算的 Custom Runtime,在其中 SpringBoot 的项目需要能使用各种 VPC 内网地址访问下游服务(比如注册中心或者其他微服务接口),这个时候Serverless Devs 提供的端云联调[3]就可以派上用场了, 只需要在 s.yaml (s.yaml 中定义了函数的 VPC 配置) 所在目录下执行:
$ s proxied setup
该命令会和云端 VPC 环境建立安全的网络通道,并在本地启动应用实例。此时本地实例可以无缝访问云端 VPC 环境内的资源,比如使用内网地址访问注册中心、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 serverless report:
https://hackernoon.com/top-5-serverless-trends-in-2020-wd1m3t8g
[2] 端云联调:
https://github.com/devsapp/fc/blob/main/docs/zh/command/proxied.md
[3] 端云联调:
https://help.aliyun.com/document_detail/195642.html
Spring Boot Serverless 实战 | Serverless 应用的监控与调试
https://mp.weixin.qq.com/s/ToDSQXB1b6q5CMXpcWvrBw
原文链接:http://click.aliyun.com/m/1000323092/
本文为阿里云原创内容,未经允许不得转载。