本文介绍如何通过函数计算,解决闲鱼研发耦合严重和运维复杂等问题。
客户介绍
闲鱼是依托阿里电商体系的前台型业务,有非常独特的业务特点和用户诉求,在底层依托阿里系统的同时,在表现层和业务层需要探索适合闲鱼的、并且更加快速灵活的研发体系。
从2018年开始,闲鱼架构负责人带领闲鱼技术团队布局Serverless。颠覆性创新往往是从边缘性的地方出现,而向云原生化及Serverless化升级,对于闲鱼是一条全新的路,走出了这条路,对于很多做线上交易的公司有着巨大的借鉴意义。
客户痛点
客户端交互层、服务端业务胶水层、领域层边界划分不清晰,导致很小的业务需求就需要整条链路的开发人员参与,协同成本高,开发调试周期长。
服务端存在巨型应用,研发耦合、发布耦合和运维耦合严重,系统稳定性也受到很大挑战,单个业务问题往往会影响整个应用。
运维成本极高。为了保障业务的稳定性和可用性,阿里巴巴对每一个应用上线都有相应的规范和规则。哪怕是一个很小的内部应用,一天可能只有一两个访问量,上线也需要遵守既有的规范,这势必会消耗一些固定资源。单个应用消耗的资源可能很有限,但所有应用消耗的资源累积起来也是一个不小的数字。而对于巨型应用,由于影响面巨大,发布时要有更加严格的流程和步骤,一次发布至少要耗时6小时,运维成本极高。
解决方案
Serverless技术使云端一体化研发成为可能,很多小业务需求的协同成本可以大大降低。另一方面,Serverless使业务胶水层的巨型应用,有了比微服务更加合理的拆分方式。
云原生及Serverless这些新技术的出现,可以使应用运维能力下沉,打破传统巨型应用的成本、稳定、质量相互制约的瓶颈。闲鱼在落地新技术的过程中,先围绕Flutter重点攻坚了Flutter混合工程体系、高性能组件库。然后围绕Serverless重点攻坚云端一体化研发体系、服务端业务组装层架构体系。
闲鱼客户端基于Flutter进行架构演进与创新,通过Flutter统一Android和iOS双端提升研发效能之后,希望通过Flutter加Serverless解决各角色间存在的大量的协同问题,从而解决整体研发效率低,移动端离业务越来越远,服务端没有时间做底层领域沉淀的问题。通过Serverless的引入,可以看到闲鱼整体研发效率得到明显的提升。
使用效果
云端编程模型一体化框架Nexus API。
这个框架的目标是使Flutter、FaaS的编程模型统一,打通UI、交互、数据和逻辑。闲鱼架构负责人提到,一开始说要做Flutter+FaaS一体化的时候,他们对一体化这三个字的认知相对比较模糊,只是知道端侧的开发人员可以用Dart这门语言来写FaaS函数,这其实还停留在语言上的一体化。对于FaaS所能做的事,也仅仅停留在前端实施已久的BFF层面。
CLI开发工具标准化。
云端一体化开发时,通过CLI命令行工具屏蔽FaaS开发的一些细节,使客户端开发FaaS时的开发体验标准化,符合客户端开发人员的本地开发习惯。
基础服务BaaS化。
过去两年,闲鱼在逐渐简化基础服务能力,如对象存储、消息、搜索。同时,建设业务领域层服务的元数据中心,这些简化的基础服务能力,再加上已有的业务领域层服务,使客户端开发人员可以快速组装业务。
云端工程一体化。
闲鱼在成功引入Flutter后,在端侧形成了以Flutter为主、H5为辅的跨端研发体系,使传统的Android和iOS的两端研发,合并成一端。在端上的生产力得到释放时,闲鱼发现端的开发人员有机会向下层走一点,使服务端面向简单的数据组装逻辑,由端的开发人员一人闭环完成,这套模式尤其适用于一些小业务的需求。
传统巨型应用的Serverless化改造。
Serverless与业务胶水层的特点很匹配,非常适用于解决胶水层的传统巨型应用的拆分,这也是闲鱼正在攻坚的下一个难题。
从最开始不被外界看好,甚至被调侃为“咸鱼”,到如今实现了千万DAU,盘活了一个万亿级市场,闲鱼的出现,无论是对前端的电商生态,还是用户在互联网上的生活形式,都产生了重要的影响。
为了支撑起闲鱼万亿的交易规模,技术团队正在紧锣密鼓地进行传统巨型应用的Serverless化改造。