QCon演讲|闲鱼从零到千万DAU的应用架构演进

2019-10-25  本文已影响0人  闲鱼技术

作者:闲鱼技术-扬羽

导读:业务架构要随着业务发展做相应的演进,继而支撑业务的快速发展。本文主要通过介绍闲鱼从零发展到千万级DAU应用的不同阶段的业务特点、核心问题以及针对性的架构演进,来阐述业务架构的演进思路与心得。

闲鱼业务背景

技术架构的演进跟业务形态都是强相关的,闲鱼的市场本质以及用户特点如下描述:

image
闲鱼是一个高性价比的二手交易市场。相比新品市场,二手市场的市场空间就是"用户在付出相同成本条件下有可能获取到更高的物品价值”,典型的比如"游戏卡带,乐高"等这些功能型的产品。同时,闲置市场也有着特殊存在的成本-信任成本,信任成本主要体现在:大部分二手可能没有售后服务;每个人对二手物品残值有着自己的主观评价。
扩大市场空间有两种方式,1.降低新人成本 2.提升匹配效率
image
闲鱼与手淘差异性:

架构演进-试错期

image
架构随着业务阶段不断演进, 每个阶段都有核心的问题

App发版速度(尤其是IOS)跟不上业务快速迭代的上线周期,动态性是端面临的主要问题,因此端上采用了Hybrid的架构:

架构演进-发展期

image

发展期业务与架构核心问题:

架构演进-平台期

image

随着业务的发展,闲鱼基于商品体系的业务达到十几种,逐渐向平台期发展。平台期业务与架构核心问题:

业务隔离框架Swak

image
核心解决因业务发展带来的代码耦合问题,问题主要体现在整体开发、运维效率低,稳定性差。核心思路是分离系统中不可变和可变的部分;分离出”做什么”与”怎么做”、“谁去做”。
将业务中不变的部分放入主干,定义出做什么;变化的部分以扩展点形式开放出来,让具体的业务放自己来实现,完成怎么做,谁去做。Swak的扩展点实现支持远程调用,可以让业务实现应用级别的隔离 ,相比传统的分包、分模块隔离方式更加彻底。
当前,闲鱼商品主链路完成基于Swak的升级。下面是一个闲鱼币个性化业务的代码案例:
image

平台通用能力

image

平台必须提供一些通用能力更好的支持业务发展:

架构演进-云端一体化

云端一体化--背景

image

随着无线发展,移动研发逐渐向多端化发展(IOT、小程序)。传统的基于Native+Web+服务端的开发方式,逐渐出现瓶颈,我们会发现例如:

云端一体化--演进步骤

image

朝着云端一体化的方向,架构的升级大概分成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,进行了一体化的研发模式的探索,使得一个研发人员能从端到服务端完成整个业务的闭环。

云端一体化--跨端方案选择

image
架构方案的选择,可能造成巨大并且长远的影响。在架构的演进中, 我们要善于定义问题,然后通过不断迭代来解决问题,最后才能形成适合自己业务特性的架构。
闲鱼也是一样,所谓没有银弹的解决方案,在跨平台方案的选型中, 充分对比了Flutter与RN的差异性,优缺点。
闲鱼认为"跨平台与高性能是我们当前的核心诉求”, 再结合团队内native技术栈的同学较多这个因素,我们最终选择了Flutter作为跨端解决方案。

云端一体化--云端协同

image
Flutter两端统一后,会发现客户端与服务端虽然都在做同一个业务,不仅技术栈没有统一,而且存在着大量协同的工作,同时端、云的同学仍然无法真正互补和一体化打通。
因此,我们开始思考是否能有一体的架构 ,能让一个同学可以Cover一个云到端的完整业务,形成业务闭环。
这不仅仅是效率的提升,更能为业务开发同学带来更大的成长空间,可以完整的和专注的思考业务。

云端一体化--关键问题以及解法

image

我们梳理了需要解决的关键问题:

面向这些问题,闲鱼的解法思路:

云端一体化--业务落地

image
目前一体化的研发模式已经在闲鱼多个场景落地,我们以下单页的改造举例:
改造前:下单页有着复杂的 渲染 交互逻辑,之前大部分逻辑都是在端上。需要两个客户端+一个服务端的同学来维护。
改造后:

框架下沉:
跨云端业务研发框架Nexus:寓意着能将客户端与服务端连接在一起。
核心思想:将UI与逻辑分离,框架限定了端上只负责UI与状态的存储, 所有的逻辑都在Faas中完成。
非常适合类似下单页的领域稳定的的场景。

云端一体化--收益

image
云端一体化能在多个方面给我们带来收益, 包括团队人员资源的均衡、协同效率的提升、业务的一致性以及人员的新的成长空间
特别适合类似闲鱼规模的具有独立app的研发团队

小结

image

本文分别介绍了闲鱼从快速试错期、发展期、平台期、云端一体化的整体架构演进以及过程中的思考。对核心问题的定义,以及做的具体演进。

我们会发现,架构的演化总是优于一步到位,没有一个大而全或者特效的方法可以一直提升系统效率。软件工程是一个超级复杂的系统,尤其是业务架构,需要随着业务随时变化。明确当前业务特点和核心问题才是设计的根本,不符合业务的架构再领先也没用。相信所有架构师都有这样的体会。
希望通过以上的分享对大家有所启发!

上一篇 下一篇

猜你喜欢

热点阅读