速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

闲鱼靠什么支撑起万亿的交易规模?

  • 2020-08-31
  • 本文字数:5451 字

    阅读完需:约 18 分钟

闲鱼靠什么支撑起万亿的交易规模?

2014 年 6 月 28 日,阿里即将赴美上市的这一年,西溪园区的一个茶水间里,28 个人日夜赶工了三个月后,上线了一个闲置交易平台——闲鱼。今年 5 月份,在阿里巴巴的年报中对外公布了闲鱼的数据:GMV2000 亿元,同比增长 100%,每天在线卖家数超过 3000 万人。 闲鱼已经从一个茶水间创业的内部小产品,变成了在 C2C 领域的领先平台。


据艾媒数据估计,2020 年全年的二手物品交易市场的规模将达到万亿以上。线上交易的繁荣亟需技术架构做相应的调整、演进才能支撑业务的快速发展。闲鱼对于阿里而言,有比营收更重要的意义,那就是创新。创新不只体现在业务模式上,闲鱼的技术架构也在探索最新的方向——向 Flutter 化、云原生/Serverless 化发展。


2009 年,从浙江大学毕业的王树彬,在 UT 斯康达工作了三年后,加入阿里巴巴。2017 年,王树彬首次将 Flutter 引入到闲鱼,从 2018 年开始,王树彬带领闲鱼技术团队在下一盘更大的棋:布局 Serverless。颠覆性创新往往是从边缘性的地方出现,而向云原生化/Serverless 化升级,对于闲鱼是一条全新的路,但趟出了这条路,对于很多做线上交易的公司有着巨大的借鉴意义。


今天,我们就一起聊聊闲鱼的云原生故事。

01 为什么要做 Serverless?

闲鱼是依托阿里电商体系的前台型业务,有非常独特的业务特点和用户诉求,在底层依托阿里系统的同时,在表现层和业务层需要探索适合闲鱼的、并且更加快速灵活的研发体系。


按照传统的开发方式,闲鱼原有的 IT 系统会面临很多痛点,比如:


  1. 客户端交互层、服务端业务胶水层、领域层边界划分不清晰,这就导致很小的业务需求就需要整条链路的同学参与,协同成本高,开发调试周期长。

  2. 服务端存在巨型应用,研发耦合、发布耦合、运维耦合严重,甚至系统稳定性也受到很大挑战,单个业务问题往往会影响整个应用。

  3. 运维成本极高。为了保障业务的稳定性和可用性,阿里对每一个应用上线都有相应的规范和规则。哪怕是一个很小的内部应用,一天可能只有一两个访问量,上线也需要遵守既有的规范,这势必会消耗一些固定资源。单个应用消耗的资源可能很有限,但所有应用消耗的资源累积起来也是一个不小的数字。而对于巨型应用,由于影响面巨大,发布时要有更加严格的流程和步骤,一次发布至少要耗时 6 小时,导致运维成本极高。


Serverless 的出现,一方面使云端一体化研发成为可能,很多小业务需求的协同成本可以大大降低。另一方面,Serverless 使业务胶水层的巨型应用,有了比微服务更加合理的拆分方式。


传统巨型应用的成本(速度)、稳定、质量相互制约的瓶颈,可以用下面这个三角形来直观的表示。



云原生/Serverless 这些新技术的出现,可以使应用运维能力下沉,传统巨型应用的成本(速度)、稳定、质量相互制约的瓶颈才有可能被打破。闲鱼在落地新技术的过程中,先围绕 Flutter 重点攻坚了 Flutter 混合工程体系、高性能组件库。然后围绕 Serverless 重点攻坚云端一体化研发体系、服务端业务组装层架构体系。


闲鱼客户端基于 Flutter 进行架构演进与创新,通过 Flutter 统一 Android 和 iOS 双端提升研发效能之后,希望通过 Flutter+Serverless 解决各角色间存在的大量的协同问题,正是这些问题导致整体研发效率低,移动端离业务越来越远,服务端没有时间做底层领域沉淀。通过 Serverless 的引入,闲鱼会明显看到整体研发效率的提升。

02 一边探索,一边实践

2018 年,闲鱼技术团队开始探索 Serverless,整体分为四个阶段:自建 Dart Server、依托 FaaS 平台、云端一体化、传统巨型应用 Serverless 化。


2018 年 5 月,以 Serverless 思路构建了 2s 内冷启动的 Dart Server 应用框架,用于服务端业务胶水层的轻量化开发。


2018 年底到 2019 年初,闲鱼启动与 Gaia 团队协同共建基于 Gaia 平台的 Dart 运行时,并上线了部分业务。注:Gaia 是基于阿里云的面向淘宝业务特点封装的、用于淘宝业务的 FaaS 平台。


2019 年,闲鱼基于 Gaia 的 Dart Runtime 标准化,探索 Flutter+FaaS 云端编程一体化,领域接口元数据化,最终诞生了 Nexus 等胶水层业务框架,并在闲鱼 20 多个业务落地。


2020 年,闲鱼开始进行云端的工程 &工具一体化,目标是实现一个工程、多端部署。现在,王树彬正带着技术团队攻坚业务胶水层的传统巨型应用治理,使传统应用向 Serverless 化迁移,“最快 3 个月,最晚 6 个月,我们就会交出一份漂亮的答卷。”


具体来看过去这两年的时间里,闲鱼在 Serverless 上的实践成果,主要分为 5 个方面:


  1. 云端编程模型一体化框架(Nexus API)


这个框架的目标是使 Flutter、FaaS 的编程模型统一,打通 UI、交互、数据、逻辑。王树彬提到,一开始说要做 Flutter + FaaS 一体化的时候,我们对“一体化“这三个字的认知相对比较模糊,只是知道端侧的同学可以用 Dart 这门语言来写 FaaS 函数,这其实还停留在语言上的一体化。对于 FaaS 所能做的事,也仅仅停留在前端实施已久的 BFF 层面。


我们花了很长时间来讨论,基于 Dart 生态下,前端的 FaaS 在研发交付其实并不高效,研发阶段主要面临的问题是:


编程语言不统一: 编程语言本身虽然不是最大的障碍,但这也确实给前端开发者增加不少门槛,而且更重要的是语言背后的生态、环境与体系更是一道高高的墙。


开发模式与架构割裂,环境复杂: 端侧一个工程,FaaS 侧也有一个独立的工程,它们背后有自己的一套构建、调试、集成/发布的工具链;除此之外,FaaS 还有自己配套的环境、Runtime、框架作为支撑。开发者面对这样复杂的 FaaS 研发环境与双重的研发工作流是无法做到高效交付的。


最终,我们对一体化有了一个比较清晰的共识,那就是要实现两个核心的一体化:


  • 语言一体化

  • 开发模式与架构一体化


编程语言的一体化可以为开发者提供一种熟悉的技术栈,开发模式与架构一体化能帮助开发者解决工程割裂以及背后复杂的 FaaS 本地运行环境问题,带来与原研发模式基本一致的研发体验。


通过这两个层面的一体化,最终达到开发 Flutter 页面和开发 FaaS 无明显 Gap。例如,闲鱼客户端 Flutter 以往是用 Redux 框架开发,在 Nexus API 框架下,可以使 Redux 与 FaaS 调用无缝集成。



  1. CLI 开发工具标准化


云端一体化开发时,通过 CLI(命令行工具)屏蔽 FaaS 开发的一些细节,使客户端开发 FaaS 时的开发体验标准化,符合客户端同学的本地开发习惯。



  1. 基础服务 BaaS 化


过去两年,我们在逐渐简化基础服务能力,如对象存储、消息、搜索。同时,建设业务领域层服务的元数据中心,这些简化的基础服务能力,再加上已有的业务领域层服务,使客户端同学可以快速组装业务。


  1. 云端工程一体化


闲鱼在成功引入 Flutter 后,在端侧形成了以 Flutter 为主、H5 为辅的跨端研发体系,使传统的 Android 和 iOS 的两端研发,合并成一端。在端上的生产力得到释放时,我们发现端的同学有机会向下层走一点,使服务端面向简单的数据组装逻辑,由端的同学一人闭环完成,这套模式尤其适用于一些小业务的需求。类似的尝试业界其实早就有了,例如 GraphQL 框架的流行,前端的 BFF 层的形成。但有了 Serverless,服务端轻量代码的开发可以极大地简化,所以闲鱼选择这个时机推进云端一体化。


云端一体化涉及到云端编程框架、工具链、工程体系、基础服务 BaaS 化、领域服务下沉,同时,也涉及人员上的组织保障、分工重塑、安全生产培训等。


  1. 传统巨型应用的 Serverless 化改造


Serverless 不是银弹,但与业务胶水层的特点很匹配,非常适用于解决胶水层的传统巨型应用的拆分,这也是闲鱼正在攻坚的下一个难题。


03 难题与破局

闲鱼落地 Serverless 的过程中并非一帆风顺。王树彬提到,在 Serverless 云端一体化过程中,遇到了一些技术难题,比如 Java 富客户端的异构语言访问、开放环境如何统一以及客户端同学对领域接口不熟悉等问题。


在闲鱼的 Java 系统中,存在大量的 Java 富客户端应用。针对 Java 富客户端的异构语言访问,闲鱼以 Sidecar 的模式,建立 Java 的 Proxy 来解决这类问题。


紧接着,为了让开发环境统一,闲鱼开发了自己的 CLI 工具(GCLI)。GCLI 是一个基于支撑 FaaS 研发生命周期的命令行工具,它定义了闲鱼 FaaS 开发闭环,统一了 FaaS 的研发环境,是提升 FaaS 研发效率的利器。GCLI 将研发闭环拆解成适合 Serverless 研发习惯的开发指令。为了让用户继承其研发习惯和工具,闲鱼优先选择了基于本地的开发方案;使用 Docker 技术统一开发环境,在 Dcoker 内声明 Dart FaaS 技术栈依赖的运行环境(软件+配置)。借助容器技术,FaaS 的软件环境可以移植到任何支持 Linux 运行的操作系统,从而解决了环境统一的问题;GCLI 通过 FaaS Open API 实现本地和函数平台实现互操作,形成完整的研发闭环。


最后,针对客户端同学对领域接口不熟悉的问题,闲鱼开发了领域层的元数据中心。


云端一体化重塑了传统的云、端边界,减少了协同,也给人员的分工带来了更大的灵活性,技术上的研发效率、研发质量也明显提升。而这些改变对于业务带来的直接好处,就是可以让业务有更快的迭代速度、更快地适应市场和用户需求的变化。


云端一体化目前应用在闲鱼的重交互场景以及轻量业务场景中,其带来的技术效率、质量提升更容易以量化的数据形式呈现。例如,以典型的中大型业务需求抽样统计,开发人日降低了 30%,千行代码 Bug 率降低了 20%。如果以零散需求统计,数据提升会更加明显。以往的小需求由于多个同学参与,往往排期需要几周,而云端一体化后,资源的灵活性明显提高,使需求响应速度大大提升。



“但是,还有一些问题没有解决”,王树彬说,在 Serverless 的巨型应用拆分方面,闲鱼遇到的问题更加严峻,比如:


  • 微服务和 Serverless 的选型

  • 在 Functions 之间代码复用

  • 对函数的依赖做统一升级


这几个问题的方案,闲鱼还在逐步验证中,待经验成熟后再向大家详细分享,欢迎持续关注。

04 借鉴与思考

什么样的公司、应用或场景应该选用 Serverless 的架构模式?目前没有具体的定义,关键在于想清楚。想清楚,就需要平衡好收益、成本、效率和应对市场的能力。其中,成本是企业更为关注的因素,这其中包括基础设施搭建的成本、运维成本、扩容成本、安全成本等。


Netflix 是落地 Serverless 的一个成功的典型,Netflix 在产品设计上一直都有创新的基因,除了不间断的 A/B 测试之外,每周都会发布很多新功能。为了确保这样高强度的工作成果,就需要一个 API 服务平台来帮助客户端工程师快速而有效地将更改的需求部署到服务层。FaaS 通过把那些与服务相关的所有平台组件抽象为业务逻辑本身来实现这一目标,而 Serverless 模式能够为 Netflix 提供一个平台,即使没有服务器和运营经验的工程师也可以开发高可用的服务。


采用 FaaS 模式,本质上是对交易速度和可能性的定制化。有些应用程序的 FaaS 服务表现得很好——Netflix API 的情况就是如此,Netflix 运行的是相对统一的微服务,只需要访问和改变下游服务的数据。然而,如果服务需要定制化,例如需要改变服务平台的各个组成部分,像 RPC、数据访问、缓存、认证等,那么 FaaS 模式可能无法为这些服务提供足够的灵活性。


自建 Serverless 平台对企业 IT 人员的要求比较高,同时建设成本也很高。另外,实施 Serverless 需要一个成熟的生态。绝大多数情况下,已经上云的企业应该优先考虑云厂商的 Serverless 产品,而没有上云的企业,需要考虑现有系统的生态情况是否能与云厂商的 Serverless 产品兼容。


对于 Serverless 产品的选型,应该综合几个方面来看:生态的成熟度,支持的开发语言,功能丰富度,收费标准等,关键是结合企业自身业务发展的需求。

05 关于未来

O’Reilly 曾对 Serverless 的应用情况进行了过一次调查,发现软件行业的开发者关注和应用 Serverless 非常多,这在意料之中,但是金融和银行业也在高度关注 Serverless,原因之一是越来越多的金融科技初创企业的诞生,它们承担了传统基础架构的责任,并且以更开放的心态,接纳和拥抱 Serverless 。


对于拒绝 Serverless 的理由,60% 的受访者表示是安全问题。因为很多行业对于 IT 环境的安全性要求很高,而采用任何新技术都可能会带来安全风险。


此外,开发者另外一层顾虑主要是担心被厂商绑定,这就导致具备一定规模的组织会基于开源方案,如 Knative,搭建自己的 Serverless 平台。而一旦某个开源方案成为主流,云厂商就会主动去兼容开源标准并增大社区投入。


Serverless 除了对技术和业务产生影响外,对于企业组织架构和技术人员也提出了新的要求。


首先,Serverless 改变了沟通结构。按照康威定律,组织架构需要适应新的沟通结构,才是最好的匹配。闲鱼以前负责客户端和服务端的同学是分开的,在全新的 Flutter+Serverless 的背景下,组织结构也需要做相应的调整。经过讨论,闲鱼最终决定按照业务线划分,将客户端、服务端的同学按业务线重新组合到一起。


其次,Serverless 使客户端的同学有机会更多的了解业务,这就要求客户端同学更加具有业务敏感度。Serverless 促使客户端同学扩大了技术边界,也需要了解一定的服务端开发概念。


最后,Serverless 要求原有的服务端同学有更好的数据建模、领域建模能力,从而有助于底层接口复用度更好。


从最开始不被外界看好,甚至被调侃为“咸鱼”,到如今实现了千万 DAU,盘活了一个万亿级市场,闲鱼的出现,无论是对前端的电商生态,还是用户在互联网上的生活形式,都产生了重要的影响。


为了支撑起闲鱼万亿的交易规模,王树彬和技术团队正在紧锣密鼓地进行传统巨型应用的 Serverless 化改造,“闯过了 Serverless 的这一关,才是我比较满意的状态。”


本文转载自公众号阿里巴巴中间件(ID:Aliware_2018)。


原文链接


闲鱼靠什么支撑起万亿的交易规模?


2020-08-31 14:023491

评论 1 条评论

发布
用户头像
我们可以把这看成一篇润物无声的软文,其实干货没多少,其主要目的就是让你和云绑定,上serverless,云厂商将彻底成为不可替代的基础设施
2020-09-02 09:39
回复
没有更多了
发现更多内容

go-zero如何追踪你的请求链路

万俊峰Kevin

Trace microservice Go 语言

简析低代码开发与传统开发的区别与优势

Marilyn

敏捷开发 低代码

移动安全加固助力 App 实现全面、有效的安全防护

蚂蚁集团移动开发平台 mPaaS

安全攻防 App风险 mPaaS

DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座

华章IT

数据库 postgresql

接口测试如何在post请求中传递文件

测试人生路

接口测试

架构师训练营 - 第 7 周课后作业(1 期)

Pudding

【运维思考】如何做好云上运维服务?

嘉为蓝鲸

云计算 运维 数字化转型 数据中心 云服务

“开源软件供应链点亮计划-暑期2020”公布结果 基于ChubaoFS开发的项目获得最佳质量奖

京东科技开发者

大数据 开源 云原生

天啦撸!打印日志竟然只晓得 Log4j?

沉默王二

Java 日志 log4j

【涂鸦物联网足迹】API及SDK介绍

IoT云工坊

软件开发 物联网 API sdk 云平台

重磅解读:K8s Cluster Autoscaler模块及对应华为云插件Deep Dive

华为云开发者联盟

容器 k8s 服务

解决大中型浏览器(Chrome)插件开发痛点:自定义热更新方案——2.基于双缓存更新功能模块

梁龙先森

Java chrome 大前端 浏览器 技术方案

医疗界“最强大脑”落户杭州!阿里巴巴联合浙大一院共同打造

互联网

Apache DolphinScheduler 是如何走进Apache的

代立冬

大数据 数据湖调度 DolphinScheduler Apache DolphinScheduler

嗯,查询滑动窗口最大值的这4种方法不错...

王磊

Java 数据结构和算法

终于啃完了这份Java核心原理+框架“面试圣经”,成功五面上岸美团

Java架构追梦

Java 架构 面试 微服务 框架开发

如何实现后台管理系统的权限路由和权限菜单

徐小夕

Java 大前端 编辑器 H5 数据可视化

架构训练营 - 第7周课后作业 - 学习总结

Pudding

分库分表的 9种分布式主键ID 生成方案,挺全乎的

程序员小富

分库分表 Java 分布式

mongodb 源码实现系列 - 网络传输层模块实现三

杨亚洲(专注MongoDB及高性能中间件)

MySQL mongodb 分布式 高性能 分布式数据库mongodb

阿里云官方推出操作系统“等保合规”镜像 -- Alibaba Cloud Linux 等保2.0三级版

阿里云基础软件团队

内核

《Python:Python编程简介:计算机编程和机器学习入门指南》

计算机与AI

Python

会展云技术解读 | 面对突发事故,APP如何做好崩溃分析与性能监控?

京东科技开发者

云计算 云服务

每周一看:16份文档资料,程序员软硬实力全概览,总有一个适合你

小Q

Java 学习 程序员 架构 面试

揭秘在召唤师峡谷中移动路径选择逻辑?

华为云开发者联盟

算法 地图 最短路径

谈谈敏捷开发概念和迭代开发方案

Learun

敏捷开发

浅谈API网关(API Gateway)如何承载API经济生态链

华为云开发者联盟

API 网关

LeetCode题解:77. 组合,递归回溯,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

技术分享:WebAssembly能否重新定义前端开发模式?

葡萄城技术团队

webassembly

【云小课】版本管理发展史之Git+——代码托管

华为云开发者联盟

git 代码管理 托管

帮助企业摆脱困境,名企归乡工程师:能成功全靠有它!

Philips

敏捷开发

闲鱼靠什么支撑起万亿的交易规模?_架构_禾易_InfoQ精选文章