34

GCLI——闲鱼FaaS开发利器

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzU4MDUxOTI5NA%3D%3D&%3Bmid=2247485284&%3Bidx=1&%3Bsn=3101a9c1f08a3944f6d7a84c78e32511
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

关于GCLI

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

关键问题

FaaS开发 闭环

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

6FbEB3J.png!web

研发环境统一

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

  • 陷入「It works for me」困境,开发环境的干扰让问题本质迟迟无法重现

  • 开发环境退化,如环境变量被覆盖、OS被动升级导致兼容性问题等

  • 开发环境适应,基于linux开发的库、工具无法在非linux环境下运行

  • Start From Scratch, 对于一个新的技术栈,开发环境安装和配置是阻碍用户尝试创新的因素之一

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

GCLI 的解决方案

为了解决上面两个核心问题,如下图所述,GCli将研发闭环拆解成适合Serverless研发风俗的开发指令;为了让用户继承其研发习惯和工具,闲鱼优先选择了基于本地的开发方案;使用Docker技术统一开发环境,在Dcoker内声明Dart FaaS技术栈依赖的运行环境(软件+配置)。

Fz6RRzb.png!web

借助容器技术,FaaS的软件环境可以移植到任何支持Linux运行的操作系统,从而解决了环境统一的问题;GCLI通过FaaS Open API实现本地和函数平台实现互操作,形成完整的研发闭环。

GCli命令行

GCli命令行被设计成standalone的可执行程序来消除对应编程语言对runtime依赖。它会将用户开发指令转换为Docker的操作命令,并以一定的策略来控制Docker的生命周期。下面是GCLI的功能片段:

ruQJRfi.png!web

用户可以借助GCLI定义的研发指令开发函数。例如用户用开启热部署,只用关心代码编写,GCLI将代码实时同步到云端,随后调用一次函数并观察函数返回和结果即可。

- 利用GCLI热部署和日志指令开发函数

- 本地运行或debug函数

GCLI Docker容器

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

bMZRJb7.png!web

  • 宿主机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的职责更加单一,更加轻量化。作为对开发技术最了解的架构人员可以根据规范交付开发镜像,让开发人员享受「统一」带来的红利。

闲鱼技术团队不仅是阿里巴巴集团旗下闲置交易社区的创造者,更是移动与高并发大数据应用新技术的引导者与创新者。我们与 Google Flutter/Dart 小组密切合作,为社区贡献了多个高 star 的项目和大量 PR 。我们正在积极探索深度学习和视觉技术在互动、交易、社区场景的创新应用。闲鱼技术与集团中间件团队共同打造的 FaaS 平台每天支持数以千万级用户的高并发访问场景。  

就是现在! 客户端/服务端java/架构/前端/质量 工程师 面向社会+校园招聘,base杭州阿里巴巴西溪园区,一起做有创想空间的社区产品、做深度顶级的开源项目,一起拓展技术边界成就极致!

*投喂简历给小闲鱼→ [email protected]

6VrARnz.jpg!web

ZriEn26.png!web

开源项目、峰会直击、关键洞察、深度解读

请认准 闲鱼技术


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK