首页 > 闲鱼新闻
从0到千万DAU,这5年闲鱼架构如何演进?
21-10-05闲鱼新闻围观688次
简介 阿里妹导读:闲鱼品牌创立于14年阿里的某个茶水间,从0开始一周千万DAU,5年时间里闲鱼见证了闲置物品从线下交易的转移。随着线上交易的发展,则需要业务结构做出相应的调整、演进支持业务的快速发展。本文主
阿里妹导读:闲鱼品牌创立于14年阿里的某个茶水间,从0开始一周千万DAU,5年时间里闲鱼见证了闲置物品从线下交易的转移。随着线上交易的发展,则需要业务结构做出相应的调整、演进支持业务的快速发展。本文主要通过介绍闲鱼从0000万级到DAU应用的不同阶段的特点、核心问题发展以及业务架构演进,来分析业务架构的演进思路与心得。
添加微信,免费试用软件
复制微信号
闲鱼业务背景
技术架构的演进与业务形态都是相关的,闲鱼的本质以及用户特点描述:
闲鱼是一个高利率的二手交易市场。新新品市场,二手市场的市场空间就是“用户在充足的相同价格条件下有可能获得到上升的物品价值”,典型的比如“游戏卡带、乐高”等这些功能型的产品。同时,闲置市场也有个别的——信仰成本,存在成本的主要表现在:少数可能没有流失;很多人对二手物品残值部分自己的总结评价。
扩大市场空间有两种方式:
降低新人成本提升效率
闲鱼与手淘的差异性:
闲鱼与手淘的卖家差异:非专业的个人卖家,利益驱动弱。发布产品差异:为了保证市场需求,只能自己轻松发布。商品差异:结构化信息少,没有历史累积行为。
闲鱼与手淘在业务、团队结构的不同性导致上不同的关注点,导致不同的演进路线。
剧本演进——试错期
成长阶段逐渐演进,阶段核心的问题:
试错期业务核心问题:业务不断探索适合的商业模式;企业核心关注点:提升响应速度,快速支持业务上线;核心原则:以质量换取速度,可以牺牲一点线上质量(业务范围)来换取更快的响应速度。
应用发版速度(尤其是IOS)跟不上业务更新的周期,动态性是端端上的主要问题,所以端端采用了Hybrid的架构:
URL Router:所有请求接入到一个H5的链接,通过URI Schema生成到真正的页面,如果原生没有开发出来,就用H5版本来实现,安卓解决与IOS不同步的问题。开关中心:通过开关控制页面页面的分页版本,页面入口是否开启,控制,参数更改等变化。Poplayer:无需发版的情况下在上面的Native界面上弹出H5的部署容器来满足运行随时创建活动并需要一个活动入口的。
电影演进——发展期
发展期业务与架构核心问题:
业务核心问题:隐约看到商业模式,需要加速验证,扩大规模。建筑关注点:提升效率(目的是有更多的接口,非降低整体成本),建设更多能力验证业务。
服务端通过Mbaas(服务端提供基础的数据(商品、用户、搜索、互动),让客户端/前端通过类SQL的描述成为用户获取自己想要的数据,无需再次增加接口)来实现活动、饲料的自动化。将更多的建设推荐到本地化、个性化数据能力(与算法、搜索打通的)中。
客户端开发两个点:
一个通用的整体连接协议的功能,在容器这端的功能上形成Service Bus(类似服务端的ESB),对具体的实现进行封装,以简单的基础能力的可替换。组件库的建立,新做一个页面的时候,可以通过已有的UI组件进行简单的整体,无需从0开始搭建。组件服务端打通,组件与逻辑与数据直接由服务端完成,客户端负责解析与渲染。
因此时期客户端更多的工作是交互交互的UI组件和支持这个适配基础的。
电影演进——平台期
随着业务的发展,闲鱼基于体系的业务达到十几个,商品逐渐向平台期发展。平台期业务与架构核心问题:
业务核心问题:需要让更多的二方、三方参与到共享经济平台的建设中,但平台生态建设又超出闲鱼自身的能力。核心关注点:扩展性(具备接入业务的能力)、业务隔离(已接入业务架构的运行)、基础能力建设(业务更好的发展)。构图原则:做一些更基础的规划,然后再把更多的战略、行动能力二方或三方完成。
业务框架隔离SWAK
核心解决因业务发展带来的代码环问题,主要表现在整体开发、运维效率低差、稳定性差。核心思想是分离系统中不和吹气的部分;分离出“行为”与“怎么”、“谁攻击”。
将业务中不变的部分非原生主干,出行为;变化的部分以扩展点形式开放出来,让具体的业务放来实现,完成怎么做,谁融合。Swak的扩展点实现支持远程调用,可以让业务实现应用级别的隔离,比传统的分包、分模块隔离方式更加彻底。
当前,闲鱼商品主完成基于Swak的升级。下面是一个闲鱼币个性化业务的代码案例:
平台通用能力
平台必须提供一些通用能力更好的支持业务发展:
选实时因闲鱼商品特性(结构化信息少,产品生产解决高)导致传统离线选品转换率差的问题。线上实时故障定位能力——神探:闲类闲鱼大型系统因依赖多、场景多,导致频发、问题解决线上常见问题。核心思想是系统每一次错误的分析请求对进行实时采集、聚合再可视化的形态,将整体故障定位过程变成自动化。
架构演进——云端一体化
背景
随着无线,发展移动逐渐向多端化发展IOT、小程序程序。基于Native+Web+服务端的开发方式,传统的出现界面,我们会发现例如
端上同学离业务越来越远,服务端同学没时间做重点领域沉淀。各端景观之间的大量协同,整体景观低下。招人也难了,需要同时招一些技术栈的同学;
在这种背景下,我们所关注的一点是后续的研究成果上,从整体的新构图、研究模式出发,思考未来的结构演进、关系轨迹才能适合当前的业务形态。我们希望探索出适合“闲鱼这样大型的具有独立APP”的高效发展战略,形成云端整合的研究能力,支持一云多端的发展。
演进步骤
云端集成的场景,场景的升级大致3个步骤:
1。端上用Flutter实现了端(IOS、Android)统一。无线了发展现在,跨平台的需求已经非常强烈,团队需要考虑Android,IOS配比,一个业务需要在终端都写,考虑双端逻辑一致性,测试两遍。所以跨平台的方案能非常直接有效的降低研究成本,解决资源均衡的问题。
2。Flutter+dart实现了三端(IOS、Android、服务端)技术栈统一。端上统一了,再通过云端技术栈的打通来减少云端的协同。参考前端+节点。js的方案,闲鱼服务端用dart(Flutter也是dart语言)替换Java,作为服务端server的语言。
3。Flutter+ Faas(dart 运行时)+Nexus。技术栈统一了,人员还不能互补,闲鱼将Dart容器集成到最新的Faas容器中,配合跨云端的集成业务研究框架Nexus,进行了整合的研究模式的探索,使一个研究人员能够从端到服务端完成整个业务的闭环。
端侧方案选择
架构的选择,可能会造成巨大的计划的影响。在结构演进中,我们要解决问题,然后通过再形成来解决问题,最后才能适合自己业务的结构。
闲鱼也是一样,没有银弹的解决方案,在跨平台方案的选型中,对比了Flutter与RN的差异性,优缺点。闲鱼认为“跨平台与表现是我们当前的核心诉求”,再结合团队内本土技术栈的选择了同学目标这个问题,我们最终作为跨平台解决方案。
云端协同
Flutter 端统一后,会发现客户端与服务端虽然都在做同一个业务,服务技术栈没有统一,而且存在大量协同的工作,同时端、云的同学还不能完全互补和整合打通。
因此,我们开始思考能否有整体的架构,可以让同学们覆盖一个到端的完整业务,形成业务闭环。
这有利于提升,更适合开发业务伙伴的成长,可以完整的和专注的思考业务。
关键问题及解法
我们想要解决的关键问题:
如何删除云端技术壁垒?首先统一技术其次端同学对云的思维模式、知识储备上的差异,需要有矿池,。如何使工作细节( 1+1<2 )?一体化下需要使总工作量降低,而不是简单的进行工作量转移。如何促进生产关系?产能发生变化,需要建立新的生产关系。
这些问题,闲鱼的解法思路:
统一技术栈:Dart具备服务端语言特点、类型强、支持异步与简单、快速的启动速度,因此服务端的服务器完全没有问题。Dart落地过程中更多的解决是生态的问题(阿里的大部分生态都是基于java来构建的,例如中间件、消息、远程调用)。我们主要通过C++扩展、SideCar方式做桥接,Service Mesh来解决。云端差异抹平:通过Faas、Baas等无服务器能力的建设,抹平除写代码外的其他差异性(运维、故障定位等),粘贴客户能写服务端;通过UI2Code(根据图片生成) UI代码),页面代码模板化(页面容器,数据管理)封装服务端写客户端。整体整体提升提升:总体的架构是云、端单独架构的,整体后下沉跨云端的工程框架Nexus,通过框架、架构的支持,删除协议层,重新定义UI与架构带,来了总工作量1+1<2。关系:场景下沉开始服务端同学变化专注领域建设,使领域层稳定,让业务层与领域层的比例,从当前的2:1,提高到5:1甚至更上一层楼。让大家的关注点都集中在自己的范围内。
业务落地及收益
现在一体化的研究模式已经在闲鱼几个场景落地,以下单页的改造模式举例:
改造前:
下单页部分复杂的渲染、交互逻辑,之前的大量逻辑在端,需要两个客户端+一个服务端的同学来维护。
改造后:
资源均衡:客户端界面从 IOS、Android 终端单一变成了混乱,只是需要一个学生维护发酵(需要两个开发人员),也不会出现实际场景将的情况。协同效率提升:端上由终端连接提升到无需连接,云端由接口协议实现现阶段的整体协议,未来可通过接口接口实现云端无约定。
闭环&人员成长:原来业务云端分离的业务逻辑全部下到了Faas(Dart),将原来分散在端与服务端的逻辑进行归一,有机会做更多的规划建设,同时也是端的同一个同学来维护,给这个端的同学晚上的成长空间。领域专注:Faas每天调用领域服务来自己的完成,自己服务端的同学业务更多到交易能力的建设上。框架下沉:跨云端业务研究框架Nexus:寓意着能将客户端与服务端连接。核心思想就是将 UI 与逻辑分离,框架界定了端上只负责 UI 与状态的存储,所有的逻辑都在 Faas 中完成。非常适合类似下单页的领域稳定的环境。
如上案例所述,云端集成能在各方面带来收益,特别适合类似闲鱼的具有独立APP的研究团队。
说在最后
本文分别介绍了闲鱼从快速试错期→期→平台期→云端集成的整体架构演进及过程中的思考。对核心问题的定义,以及做的具体演进。
我们会发现,画面的增长总是一个大而简单到位,没有任何特效的方法可以一直提升系统。软件工程是一个超级复杂的系统,尤其是业务架构,需要随着业务不断变化。明确当前业务特点和核心问题才是设计的真正目的。相信所有架构师这样的理解。
看大咖直播,赢大奖
物联网老兵、北京叶帆易通科技有限公司CEO、阿里云MVP刘洪峰强开课啦。四场直播讲透阿里云物联网平台的业务模型,物联网粉丝千万不要计划。
识别全球二维码或点击“阅读”,了解直播方式,参与互动还有奖品送。
你可能还喜欢
点击世界图片频道阅读
真香!阿里工程师的一段代码让我看饿了
Go语言出现后,Java还是最佳选择吗?
关注「阿里技术」把握前沿技术脉搏
点这里,看大咖直播,赢大奖。