成为VIP会员查看完整内容
VIP会员码认证
首页
主题
发现
会员
服务
注册
·
登录
0
从0到千万DAU,这5年闲鱼架构如何演进?
2019 年 11 月 5 日
阿里技术
阿里妹导读:闲鱼品牌创立于14年阿里的某个茶水间,从0开始到现在千万DAU,5年时间里闲鱼见证了闲置物品从线下到线上交易的转移。而线上交易的繁荣,则需要
业务架构做相应的调整、演进才能支撑业务的快速发展。
本文主要通过介绍闲鱼从0发展到千万级DAU应用的不同阶段的业务特点、核心问题以及针对性的架构演进,来阐述业务架构的演进思路与心得。
闲鱼业务背景
技术架构的演进跟业务形态都是强相关的,闲鱼的市场本质以及用户特点如下描述:
闲鱼是一个高性价比的二手交易市场。
相比新品市场,二手市场的市场空间就是"用户在付出相同成本条件下有可能获取到更高的物品价值”,典型的比如"游戏卡带、乐高"等这些功能型的产品。
同时,闲置市场也有着特殊存在的成本——信任成本,信任成本主要体现在:大部分二手可能没有售后服务;每个人对二手物品残值有着自己的主观评价。
扩大市场空间有两种方式:
降低新人成本
提升匹配效率
闲鱼与手淘差异性:
闲鱼与手淘的卖家差异:非专业的个人卖家,利益驱动弱。
发布产品差异:为保证市场供给,只能坚持轻发布。
商品差异:结构化信息少,没有历史累计行为。
闲鱼与手淘在业务、团队结构的差异性导致架构上不同的关注点,导致不同的演进路线。
架构演进——试错期
架构随着业务阶段不断演进,每个阶段都有核心的问题:
试错期业务核心问题:业务不断探索适合的商业模式;
架构核心关注点:提升响应速度,快速支持业务上线;
架构核心原则:以质量换取速度,可以牺牲一点线上质量(业务可接受范围)来换取更快的响应速度。
App发版速度(尤其是IOS)跟不上业务快速迭代的上线周期,动态性是端面临的主要问题,因此端上采用了Hybrid的架构:
URL Router:所有请求路由到一个H5的链接,通过URI Schema重定向到真正页面,如果对应的native没有开发出来,就用H5版本来实现,解决安卓与IOS不同步的问题。
开关中心:通过开关控制页面路由,页面入口是否开启,分版本控制,参数变更等改动。
Poplayer:无需发版的情况下在已有的Native界面上弹出H5的部署容器,来满足运营随时创建活动并需要一个活动入口的需求。
架构演进——发展期
发展期业务与架构核心问题:
业务核心问题:隐约看到商业模式,需要加速验证,扩大规模。
架构关注点:提升效率(为了有机会去做更多事情,非降低整体成本),建设更多能力验证业务方向。
架构演进方向:前后端的协议、工具的自动化。
服务端通过Mbaas(服务端提供基础的数据源(商品、用户、搜索、互动),让客户端/前端通过类SQL的描述一次性获取自己想要的数据,后端不需要增加接口)来实现活动、feeds投放的自动化。
将更多精力投入到本地化、个性化、数据能力(与算法、推荐、搜索打通)的建设中。
客户端开发关注两个点:
对外整体连接协议的梳理,在容器这端演化成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、服务端)技术栈统一。
端上统一了,再通过云端技术栈的打通来减少云端的协同。
参考前端+Node.js的方案,闲鱼服务端用dart(Flutter也是dart语言)替换Java,作为服务端server的语言。
3. Flutter+ Faas(dart runtime)+Nexus。
技术栈统一了,人员还不能互补,最新闲鱼将Dart容器嵌入到Faas容器中,配合跨云端的一体化业务研发框架Nexus,进行了一体化的研发模式的探索,使得一个研发人员能从端到服务端完成整个业务的闭环。
端侧方案选择
架构方案的选择,可能造成巨大并且长远的影响。
在架构的演进中,我们要善于定义问题,然后通过不断迭代来解决问题,最后才能形成适合自己业务特性的架构。
闲鱼也是一样,所谓没有银弹的解决方案,在跨平台方案的选型中,充分对比了Flutter与RN的差异性,优缺点。
闲鱼认为"跨平台与高性能是我们当前的核心诉求”,再结合团队内native技术栈的同学较多这个因素,我们最终选择了Flutter作为跨端解决方案。
云端协同
Flutter两端统一后,会发现客户端与服务端虽然都在做同一个业务,不仅技术栈没有统一,而且存在着大量协同的工作,同时端、云的同学仍然无法真正互补和一体化打通。
因此,我们开始思考是否能有一体的架构,能让一个同学可以Cover一个云到端的完整业务,形成业务闭环。
这不仅仅是效率的提升,更能为业务开发同学带来更大的成长空间,可以完整的和专注的思考业务。
关键问题及解法
我们梳理了需要解决的关键问题:
如何消除云端技术壁垒?
首先要统一技术栈,其次端同学对云的思维模式、知识储备上的差异,需要有办法消除。
如何使工作总量减少 ( 1+1<2 )?
一体化下需要使总工作量降低,不是简单的进行工作量转移。
如何促进生产关系重塑?
生产力发生变化,需要建立新的生产关系。
面向这些问题,闲鱼的解法思路:
统一技术栈:Dart具备服务端语言特点,强类型,支持异步与并发,甚至更快的启动速度,因此作为服务端的server完全没有问题。
Dart落地过程中更多的解决的是生态的问题(阿里的大部分生态都是基于java来建设的,例如中间件、消息、远程调用)。
我们主要通过通过C++扩展、SideCar方式做桥接,Service Mesh来解决。
云端差异抹平:通过Faas , Baas等无服务器能力的建设, 抹平除写代码外的其他差异性(运维、故障定位等),使得客户端同学能写服务端;通过UI2Code(根据图片生成UI代码),页面代码模板化(页面容器,数据管理)使得服务端写客户端。
一体化总体效率提升:以往的架构是云、端分开架构的,一体化后下沉跨云端的研发框架Nexus,通过框架、工程体系的支持,消除协议层,重新定义UI与逻辑分层,带来了总工作量1+1<2。
关系重塑:领域下沉能让原来服务端同学更加专注领域建设,使领域层更加稳定,让业务层与领域层的变化比例,从当前的2:1,提高到5:1 甚至更高。
让大家的关注点都集中在自己的范围内。
业务落地及收益
目前一体化的研发模式已经在闲鱼多个场景落地,以下单页的改造举例:
改造前:
下单页有着复杂的渲染、交互逻辑,之前大部分逻辑都是在端上,需要两个客户端+一个服务端的同学来维护。
改造后:
资源均衡:
将客户端界面从 IOS、Android两端统一成了Flutter,后续只需要一个同学维护即可(原来需要两个开发人员),也不会出现逻辑不一致的情况。
协同效率提升:
端上由两端协同提升到无需协同,云端由接口协议约定演化成现阶段的一体化协议,未来可将协议下沉到框架实现云端无接口约定。
业务闭环&人员成长:
原来云端分离的业务逻辑全部下沉到了Faas(Dart),将原来分散在端与服务端的逻辑进行归一,有机会做更多的规划建设,同时也是端的同一个同学来维护,给这个端的同学带来更大的成长空间。
领域专注:
Faas层调用底层领域服务来完成自己的业务,原来服务端的同学更多投入到交易能力的建设上。
框架下沉:
跨云端业务研发框架Nexus:寓意着能将客户端与服务端连接在一起。
核心思想就是将UI与逻辑分离,框架限定了端上只负责UI与状态的存储,所有的逻辑都在Faas中完成。
非常适合类似下单页的领域稳定的的场景。
如上案例所述,云端一体化能在多个方面带来收益,特别适合类似闲鱼规模具有独立APP的研发团队。
说在最后
本文分别介绍了闲鱼从快速试错期→发展期→平台期→云端一体化的整体架构演进及过程中的思考。
对核心问题的定义,以及做的具体演进。
我们会发现,架构的演化总是优于一步到位,没有一个大而全或者特效的方法可以一直提升系统效率。
软件工程是一个超级复杂的系统,尤其是业务架构,需要随着业务随时变化。
明确当前业务特点和核心问题才是设计的根本,不符合业务的架构再领先也没用。
相信所有架构师都有这样的体会。
看大咖直播,赢大奖
物联网老兵、
北京叶帆易通科技有限公司CEO、
阿里云 MVP刘洪峰强开课啦。四场直播讲透阿里云物联网平台的业务模型,物联网粉丝千万不要错过。
识别下方二维码或点击
“阅读原文”,
了解直播方式,参与问答还有大奖送。
你可能还喜欢
点击下方图片即可阅读
真香!
阿里工程师的一段代码让我看饿了
Go语言出现后,Java还是最佳选择吗?
关注
「阿里技术」
把握前沿技术脉搏
戳这里,
看大咖直播,赢大奖。
登录查看更多
点赞并收藏
0
暂时没有读者
0
权益说明
本文档仅做收录索引使用,若发现您的权益受到侵害,请立即联系客服(微信: zhuanzhi02,邮箱:bd@zhuanzhi.ai),我们会尽快为您处理
相关内容
闲鱼
关注
2
机器学习如何用于芯片系统设计?Jeff Dean推荐Google最新《机器学习系统芯片设计》70页ppt为你讲解
专知会员服务
61+阅读 · 2020年5月31日
华为发布《自动驾驶网络解决方案白皮书》
专知会员服务
126+阅读 · 2020年5月22日
轻量级神经网络架构综述
专知会员服务
97+阅读 · 2020年4月29日
德勤:2020技术趋势报告,120页pdf
专知会员服务
191+阅读 · 2020年3月31日
【SIGMOD2020-阿里巴巴】AliCoCo阿里巴巴电子商务知识图谱的认知概念网半自动构建
专知会员服务
35+阅读 · 2020年3月31日
【百度】-大规模深度学习广告系统的分布式分层GPU参数服务器,Distributed Hierarchical GPU PS
专知会员服务
24+阅读 · 2020年3月15日
【2020新书】如何构建数据团队?:设计集成的技能、需求和解决方案,257页pdf
专知会员服务
113+阅读 · 2020年3月11日
【基于元学习的推荐系统】5篇相关论文
专知会员服务
88+阅读 · 2020年1月20日
阿里巴巴达摩院发布「2020十大科技趋势」
专知会员服务
107+阅读 · 2020年1月2日
中文知识图谱构建技术以及应用的综述
专知会员服务
313+阅读 · 2019年10月19日
【中台】阿里架构总监一次讲透中台架构,13页PPT精华详解,建议收藏!
产业智能官
39+阅读 · 2019年8月25日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
阿里巴巴国际化业务架构:如何让全球用户爱上你
QCon
17+阅读 · 2019年4月10日
【干货】电商数据中台如何构建?
AliData
11+阅读 · 2019年4月4日
技术|Resty-redis-cluster: 基于Openresty构建的rediscluster客户端
ImportNew
6+阅读 · 2019年3月12日
如何运营15万付费用户?
三节课
6+阅读 · 2019年2月28日
干货 | 双11总峰值超8亿OPS 阿里分布式NoSQL如何岿然不动稳如山?
阿里巴巴数据库技术
10+阅读 · 2018年12月12日
【知识图谱】如何构建知识图谱
产业智能官
134+阅读 · 2017年9月19日
今日头条推荐系统架构演进之路
QCon
32+阅读 · 2017年6月21日
Learning to See Through Obstructions
Arxiv
7+阅读 · 2020年4月2日
Residual Non-local Attention Networks for Image Restoration
Arxiv
9+阅读 · 2019年3月24日
Object-driven Text-to-Image Synthesis via Adversarial Training
Arxiv
6+阅读 · 2019年2月27日
Collaborative Similarity Embedding for Recommender Systems
Arxiv
8+阅读 · 2019年2月19日
Counterfactual Normalization: Proactively Addressing Dataset Shift and Improving Reliability Using Causal Mechanisms
Arxiv
7+阅读 · 2018年8月9日
Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba
Arxiv
15+阅读 · 2018年5月24日
Multi-Channel Pyramid Person Matching Network for Person Re-Identification
Arxiv
7+阅读 · 2018年3月7日
Zero-Shot Sketch-Image Hashing
Arxiv
5+阅读 · 2018年3月6日
Piecewise Flat Embedding for Image Segmentation
Arxiv
3+阅读 · 2018年2月12日
DenseReg: Fully Convolutional Dense Shape Regression In-the-Wild
Arxiv
3+阅读 · 2018年2月1日
VIP会员
自助开通(推荐)
客服开通
详情
相关主题
闲鱼
Dart
试错
故障定位
iOS
结构化
相关VIP内容
机器学习如何用于芯片系统设计?Jeff Dean推荐Google最新《机器学习系统芯片设计》70页ppt为你讲解
专知会员服务
61+阅读 · 2020年5月31日
华为发布《自动驾驶网络解决方案白皮书》
专知会员服务
126+阅读 · 2020年5月22日
轻量级神经网络架构综述
专知会员服务
97+阅读 · 2020年4月29日
德勤:2020技术趋势报告,120页pdf
专知会员服务
191+阅读 · 2020年3月31日
【SIGMOD2020-阿里巴巴】AliCoCo阿里巴巴电子商务知识图谱的认知概念网半自动构建
专知会员服务
35+阅读 · 2020年3月31日
【百度】-大规模深度学习广告系统的分布式分层GPU参数服务器,Distributed Hierarchical GPU PS
专知会员服务
24+阅读 · 2020年3月15日
【2020新书】如何构建数据团队?:设计集成的技能、需求和解决方案,257页pdf
专知会员服务
113+阅读 · 2020年3月11日
【基于元学习的推荐系统】5篇相关论文
专知会员服务
88+阅读 · 2020年1月20日
阿里巴巴达摩院发布「2020十大科技趋势」
专知会员服务
107+阅读 · 2020年1月2日
中文知识图谱构建技术以及应用的综述
专知会员服务
313+阅读 · 2019年10月19日
热门VIP内容
开通专知VIP会员 享更多权益服务
电波作战向多域融合方向发展
DeepSeek R1本地部署,小白教程来了!
《核风险:认知与途径》最新32页报告
《评估武装部队的频谱需求,优化国防频带使用》218页书籍
相关资讯
【中台】阿里架构总监一次讲透中台架构,13页PPT精华详解,建议收藏!
产业智能官
39+阅读 · 2019年8月25日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
阿里巴巴国际化业务架构:如何让全球用户爱上你
QCon
17+阅读 · 2019年4月10日
【干货】电商数据中台如何构建?
AliData
11+阅读 · 2019年4月4日
技术|Resty-redis-cluster: 基于Openresty构建的rediscluster客户端
ImportNew
6+阅读 · 2019年3月12日
如何运营15万付费用户?
三节课
6+阅读 · 2019年2月28日
干货 | 双11总峰值超8亿OPS 阿里分布式NoSQL如何岿然不动稳如山?
阿里巴巴数据库技术
10+阅读 · 2018年12月12日
【知识图谱】如何构建知识图谱
产业智能官
134+阅读 · 2017年9月19日
今日头条推荐系统架构演进之路
QCon
32+阅读 · 2017年6月21日
相关论文
Learning to See Through Obstructions
Arxiv
7+阅读 · 2020年4月2日
Residual Non-local Attention Networks for Image Restoration
Arxiv
9+阅读 · 2019年3月24日
Object-driven Text-to-Image Synthesis via Adversarial Training
Arxiv
6+阅读 · 2019年2月27日
Collaborative Similarity Embedding for Recommender Systems
Arxiv
8+阅读 · 2019年2月19日
Counterfactual Normalization: Proactively Addressing Dataset Shift and Improving Reliability Using Causal Mechanisms
Arxiv
7+阅读 · 2018年8月9日
Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba
Arxiv
15+阅读 · 2018年5月24日
Multi-Channel Pyramid Person Matching Network for Person Re-Identification
Arxiv
7+阅读 · 2018年3月7日
Zero-Shot Sketch-Image Hashing
Arxiv
5+阅读 · 2018年3月6日
Piecewise Flat Embedding for Image Segmentation
Arxiv
3+阅读 · 2018年2月12日
DenseReg: Fully Convolutional Dense Shape Regression In-the-Wild
Arxiv
3+阅读 · 2018年2月1日
大家都在搜
自主可控
量化交易
大型语言模型
基础模型
研究报告
锂电池
阿里妈妈
线积分
深绿
“跨越险阻2018”挑战赛中
Top
提示
微信扫码
咨询专知VIP会员与技术项目合作
(加微信请备注: "专知")
微信扫码咨询专知VIP会员
Top