阿里巴巴|Serverless 调试大杀器:端云联调

阿里巴巴|Serverless 调试大杀器:端云联调

文章图片

阿里巴巴|Serverless 调试大杀器:端云联调

文章图片


背景 说起当前最火一个技术 ,不可避免地讨论到一个概念:Serverless 。 作为一种新型的应用架构 , Serverless 让我们摆脱了维护基础设施的繁琐 , 只需要上传代码包或者镜像 ,即可得到一个弹性、高可用、免运维、低成本的服务 。
听上去很美的 Serverless 在实际落地开发过程中 , 却确存在一些痛点 。 比如您在使用 Serverless 的过程中 , 肯定有如下的困扰:
使用函数计算 Custom Runtime/Container 想要一键平迁原有 SpringBoot , Python Flask , ThinkPHP 等各种语言框架的应用 , 实例启动过程中需要访问云端环境中的其他服务(如数据库或者注册中心) , 遇到应用启动不起来时 , 该怎么排查原因? 应用采用微服务架构 , 涉及到多个服务 。 能否在本地代码开发完成后快速进行端对端测试? 事件驱动的应用 , 通过事件源触发函数 , 环节多 , 链路长 , 能不能在本地快速测试整个链路? …… 业界的调研报告(hacknoon serverless report[1
)也体现调试是 Serverless 落地最大的障碍 。 目前业界已有的 Serverless 应用调试手段 , 主要是在本地模拟云端执行环境进行本地调试;而远端环境中运行的应用则主要靠日志 。 由于在本地无法模拟真实的云端环境 , 因此本地调试无法解决上述问题 , 为此我们推出了业界创新的端云联调功能 , 解决 Serverless 应用调试的难题 。
端云联调 Serverless Devs 的端云联调[2
功能 , 核心思路是要让本地开发环境突破网络的限制 , 和云端环境融为一体 。 开发者通过端云联调能在本地启动实例 , 和云端环境无缝连通 , 快速进行测试和问题调试 。 端云联调能帮助开发者:





















【阿里巴巴|Serverless 调试大杀器:端云联调】
变更代码 , 实时查看结果 , 调试迭代的闭环最短 。 例如要开发的服务被其他服务依赖 , 当本地代码开发完成后 , 最好能发起端对端的测试 , 看看改动有没有 break 调用方服务 。 如果采用传统方式 , 需要把代码部署到远端 , 发起测试才可以 , 流程很冗长 。能够复用本地丰富的开发调试工具 , 效率最高 。 例如调查远端环境中的测试用例失败 , 以往只能靠日志 。 如果能把生产流量导入到本地环境的实例上 , 使用本地环境上各种 IDE 进行调试 , 是不是很爽? 如下图所示 , 端云联调在本地开发机和云端应用的 VPC 环境间建立一条安全的隧道连接 。 访问云端应用的流量将自动转发到本地开发机上;同时本地实例对外访问的网络流量也被自动转发到云端应用的 VPC 环境中 。 比如在本地实例访问云端的 RDS 数据库实例 , 传统方式开发者如果在本地进行调试开发的话 ,只能放开 RDS 实例的公网访问或者购买 VPN 服务实现本地访问线上 VPC 。 而使用端云联调 , 不需要任何配置的改变 , 可以直接以内网的方式访问 RDS 实例 。开启端云联调 用户只要在 s.yaml 的目录下 ,执行 s proxied setup , 这个命令做了如下事情: 根据您 s.yaml 的 vpc 配置等信息创建一个辅助的 Service/Function 并对辅助函数预留1个实例 。 该辅助函数的作用是作为代理服务 , 本地实例所有进出流量都会通过该代理服务 。启动本地环境的代理容器实例 ,通过通道服务 ,和 1 中的 FC 网络代理容器实例建立一条双向通信 TCP 隧道 。启动本地的函数容器实例 ,比如您是 Custom Runtime 直接跑 SpringBoot 应用 ,启动 SpringBoot 的本地函数容器实例和 2 中的代理容器实例共享网络 ,springboot 应用已经能内网访问线上 VPC 资源 。本地函数容器实例启动成功 ,即可以开始调试 , 直接使用 s proxied invoke 或者 curl 自定义域名调用辅助的 Service/Function ,流量会通过代理服务打回到本地函数容器实例 ,开启本地 IDE 对实例内的应用进行断点调试 。关闭端云联调 因为会有一个辅助函数预留1个实例 ,所以调试结束后 ,您可以手动清理资源 ,以免产生不必要的费用 。在开启端云联调的终端 ,直接 CTRL + C 中断 或者在另外一个终端 , 在相同的目录下执行 s proxied cleanup 使用上面 1 或者 2 其中一个方法即可 ,如果您不放心 ,可以多次执行 s proxied cleanup 。即使您忘记清理 ,如果本地开发机关机或者断网 ,通道 session 会自动关闭 ,预留的资源也会自动清理 。实战场景举例 以阿里云函数计算一个真实的企业客户为例:小王是一个业务驱动型的公司的开发 ,公司为了提高业务迭代效率 ,技术架构向全面云原生化演进 ,减少基本设施的管理和运维 ,架构大致如下: 小王将迭代最频繁的对外的前后端分离的项目都一键迁移到函数计算的 Custom Runtime , 在其中 SpringBoot 的项目需要能使用各种 VPC 内网地址访问下游服务(比如注册中心或者其他微服务接口) , 这个时候Serverless Devs 提供的端云联调[3