GCLI-闲鱼FaaS开发利器

本文涉及的产品
简介: FaaS研发效率利器

作者:闲鱼技术-无浩

关于GCLI

闲鱼技术团队推行了基于Flutter+Servless的一体化研发方案, 在Serverless技术的加持下,客户端开发可以轻松独立完成业务闭环。FaaS作为Serverless技术业务功能主要载体,其开发效率影响需求交付的速度。GCLI是一个基于支撑FaaS研发生命周期的命令行工具,它定义了闲鱼FaaS开发闭环,统一了FaaS的研发环境,是提升FaaS研发效率的利器。

关键问题

FaaS开发闭环

下图是简化后的闲鱼FaaS开发视角下的开发生命周期,和传统服务端开发相同,图中2.1~2.3是最高频动作,将这些动作串联起来、提供标准的操作语义,以高效的运转对于提升FaaS开发生产力至关重要。闲鱼FaaS希望给用户提供像开发本地函数一样开发FaaS代码的体验。

    ![image.png](https://ucc.alicdn.com/images/lark/0/2020/png/18740/1590387303295-d199b83c-3eb4-448e-a935-a97814e3a99e.png)
      

研发环境统一

闲鱼的FaaS自建了一套适配自家JAVA生态的工具链以简化FaaS的编程平面,但同时引入了开发环境的一致性问题, 开发环境不能收敛管理可能带来

  • 陷入「It works for me」困境,开发环境的干扰让问题本质迟迟无法重现
  • 开发环境退化,如环境变量被覆盖、OS被动升级导致兼容性问题等
  • 开发环境适应,基于linux开发的库、工具无法在非linux环境下运行
  • Start From Scratch, 对于一个新的技术栈,开发环境安装和配置是阻碍用户尝试创新的因素之一

上述几点在闲鱼的实践里得到了应验,之后闲鱼尝试基于WebIDE开发来解决环境的问题,但现阶段体验上和理想有差距,WebIDE由于用户研发习惯和工具也得不到很好的继承,开发效率反而因此下降;如何统一开发环境、延续用户开发习惯也是需要重点考虑的。

GCLI的解决方案

为了解决上面两个核心问题,如下图所述,GCli将研发闭环拆解成适合Serverless研发风俗的开发指令;为了让用户继承其研发习惯和工具,闲鱼优先选择了基于本地的开发方案;使用Docker技术统一开发环境,在Dcoker内声明Dart FaaS技术栈依赖的运行环境(软件+配置)。
image.png
借助容器技术,FaaS的软件环境可以移植到任何支持Linux运行的操作系统,从而解决了环境统一的问题;GCLI通过FaaS Open API实现本地和函数平台实现互操作,形成完整的研发闭环。

GCLI命令行

GCLI命令行被设计Standalone的可执行程序以消除编程语言Runtime的依赖。它会将用户开发指令转换为Docker的操作命令,并以一定的策略来控制Docker的生命周期。下面是GCLI的功能片段:
image.png
用户可以借助GCLI定义的研发指令开发函数。例如用户用开启热部署,只用关心代码编写,GCLI将代码实时同步到云端,随后调用一次函数并观察函数返回和结果即可。

  • 利用GCLI热部署和日志指令开发函数
#打开热部署能力,实时监听代码变化,并实时在云端生效
gcli hotdeploy -f my_function --watch
#调用远程函数,获取调用结果
gcli invoke -f my_function --data '{"data":{}}'
#查看云端函数日志以tail的方式运行
gcli logs -f my_function --tail
  • 本地运行或debug函数
#本地拉起函数容器
gcli local start
#本地debug
gcli local debug

GCLI Docker容器

GCLI Docker容器希望提供一个和技术栈无关的FaaS开发镜像规范,并解决与IDE本地协同开发的问题。在基于Dart的FaaS技术栈里,容器的设计参考下图:

    ![image.png](https://ucc.alicdn.com/images/lark/0/2020/png/18740/1590397735949-8810d36b-3f39-4b33-b5f5-5c2ef0305b24.png)
      
  • 宿主机IDE侧

    • 用户代码目录通过bind mount到Container,然后在容器内完成编译,之后的产物能够被IDE识别
    • GCLI通过Docker同步的配置文件,执行端口映射、bind mount或环境变量导入操作
    • 宿主通过Volume共享容器内的文件(如Pub仓库、Maven仓库),提升编译速度
    • 宿主通过NAT地址转换和容器打通网络,端口转换信息定义在GCLI的配置文件里
  • 容器侧

    • 镜像加速区,为了提升编译的速度,在镜像里预置了可能需要的缓存文件以及环境变量
    • 软件仓库,定义需要同步到host的软件
    • 编译/运行时环境,包括语言运行时、环境变量、仓库等
    • 定制软件,GCLI提供的开发指令的实现来自这里

有了对开发容器的抽象和定义,对于开发环境的提供者只要遵循镜像的设计标准,即可以复用GCLI的能力,快速交付一个基于统一开发环境的研发工具。

 

总结和展望

闲鱼自从在FaaS开发中实施了GCLI,开发人员在下面几点上获益:

  • 开发门槛降低了,对跨栈开发友好,非Dart技术栈开发人员可以在30分钟内从裸机到完成开发部署FaaS服务。
  • 本地开发环境稳定可靠,彻底消灭了开发环境不一致引起的问题,节约了宝贵的开发时间。
  • 开发闭环指令简单易用,而在GCli产出之前,50%的开发会由于定制开发工具复杂、易出错而选择放弃使用,进而选择传统低效的开发方式。以部署为例,传统方式需要10分钟完成部署,GCLI只需要5秒。
  • 容忍Windows等操作系统的开发,对于一种新的开发模式推广有正面作用。

文章前面提过GCLI为了延续用户的开发习惯,选择在宿主机IDE开发代码,基于Docker的GCLI解决了统一环境问题,但由于共享开发机的方式对于宿主的性能有一定要求,在非Linux系统上运行Docker多了虚拟机的开销,在本地运行Docker并不是提升编译性能的最优解。未来,特别在云原生开发技术不断发展中,不单是FaaS技术栈,开发环境会逐渐走向容器化,云主机托管用户的开发环境,另外IDE的职责更加单一,更加轻量化。作为对开发技术最了解的架构人员可以根据规范交付开发镜像,让开发人员享受「统一」带来的红利。
                                      

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
5月前
|
运维 Serverless 云计算
云上开发新范式:Serverless 的必然与应然 | 云栖深度对话
云上开发新范式:Serverless 的必然与应然 | 云栖深度对话
|
6月前
|
监控 Serverless 测试技术
函数计算的开发
函数计算的开发
37 0
|
2月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
|
2月前
|
小程序 IDE Serverless
【经验分享】支付宝小程序serverless云开发拓荒
【经验分享】支付宝小程序serverless云开发拓荒
80 0
|
3月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
7621 132
|
3月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
为了帮助用户高效率、低成本应对企业级复杂场景,函数计算团队正式推出 Stable Diffusion API Serverless 版解决方案,通过使用该方案,用户可以充分利用 Stable Diffusion +Serverless 技术优势快速开发上线 AI 绘画应用,期待为广大开发者 AI 绘画创业及变现提供思路。
87290 4
|
4月前
|
运维 Serverless API
Serverless云开发入门
Serverless云开发入门
|
5月前
|
运维 Serverless 云计算
飞天技术观|云上开发新范式:Serverless的必然与应然
在2022年云栖大会上宣布核心产品全面Serverless化之前,阿里云在Serverless领域布局已经有六七年积累了,一直在打磨产品,夯实基础;从去年开始,阿里云进入到了Serverless的第二阶段,一路突飞猛进,相对应地,阿里云Serverless产品数量和丰富度都在快速增长,业务规模也在快速增长。
464 1
|
6月前
|
Serverless 云栖大会
云栖大会 Serverless 开发专区
云栖大会 C馆,阿里云x森马定制创意体恤!
|
7月前
|
小程序 IDE Serverless
基于小程序Serverless开发个人相册小程序
本场景基于小程序云Serverless+小程序开发者工具(IDE),快速搭建个人相册小程序
156 0