一个多业务、多状态、多操作的交易链路,闲鱼架构如何演进?
![](/assets/blank.gif)
业务特征
我们今天定义闲鱼交易链路,从闲鱼特有的交易模式“边聊边买”,由交易聊天为入口,下单、订单详情、订单列表及相关二级页面,包含契约签订、履行、违约服务。履约区分为正向交易流程(付款、发货、收货、评价等)、逆向交易流程(退款、退货等)。
交易链路关键场景(聊天-购买-订单)
交易链路所承接的业务有:普通交易、见一见交易、担保交易、闲鱼币交易、玩家交易、回收交易、寄卖交易等。不同业务在不同状态下提供不同的交易操作。以普通C2C交易正向交易流程为例:
普通C2C交易正向交易流程
交易链路具有多业务、多状态、多操作的特征。作为应用的关键链路中的一环,业务相对固化,需要保证性能与体验,同时也需要一定的动态性,能够快速地承接新增业务类型、新增业务状态、新增交易操作,视觉不常改变,对页面组件动态性无强诉求。
交易链路业务特征
演进过程
手淘的方案
类似的交易场景,手淘提出来不错的解决方案——新奥创。新奥创通过页面区块化与行为通信协议,提供基于业务的页面、组件、规则,前端实现动态模板,后端根据业务将页面进行编排,实现跨端、组件动态化。
可戳→手淘新奥创
闲鱼的问题
在闲鱼业务场景中,特有的C2C交易模式,与手淘B2C交易模式下差别较大,没有购物车、没有多商品聚合订单。手淘的交易流程可以在天猫、飞猪、盒马等通用。但闲鱼的交易模式,出于业务特征,不适合在手淘完成闲鱼交易流程。
闲鱼C2C交易链路业务相对固化,没有强页面动态化的需求。在这样的背景下,前后端向新奥创迁移,成本较高且收益较少。并且,新奥创的后端开发仍然需要关心页面编排,并不是更终态的研发模式。因此,闲鱼没有将新奥创作为技术选型。闲鱼交易链路的侧重点是:
稳定:保证双端一致,减少双端逻辑不一致的场景;
支持一定的动态化能力:端侧仅处理页面渲染,业务逻辑上云;
新研发模式:前端深入业务,实现服务端页面渲染相关逻辑,后端领域下沉,专注领域建设,云端一体;
为达到这个目标,交易链路架构演进经过3个阶段:
闲鱼交易链路演进方向
我们来简单看一下闲鱼交易链路的架构演进过程:
闲鱼交易链路架构演进
第一阶段:业务解耦
在2017年-2018年,交易链路由原有业务快速迭代时期的简单代码结构,进行了页面区块化改造。此时,服务端大致分为3层:底层数据模型、闲鱼C2X交易域、业务解决方案。后端基于底层数据模型,根据闲鱼不同业务特性与业务逻辑,搭建闲鱼C2X交易域,再以业务解决方案提供不同场景业务数据。
而端侧分为两层,业务数据解析将后端的业务数据,根据不同业务类型、不同交易状态进行解析、整合,转换为页面渲染协议ViewModel,同时将页面区块化,抽离出不同业务通用组件,根据ViewModel直接渲染。
页面区块化
操作Action化
第二阶段:两端一体,逐步上云
2019年,在第一阶段的基础上,我们首先解决双端逻辑不一致的问题,选择了Flutter作为跨平台解决方案,同时通过FishRedux进行页面区块化改造。交易操作也通过CommonAction完成逻辑一致,实现端上的交易操作中台,提供给交易链路多业务场景进行调用。
Flutter&Fish Redux
交易操作中心
业务上云
此时,服务端仍分为3层:底层数据模型、闲鱼C2X交易域、业务层。业务层包含业务解决方案、页面渲染解析。客户端上仅保留渲染层。
第三阶段:云端一体
在前一阶段,客户端将端侧业务逻辑完整上云,但同样出现了瓶颈,在交易业务场景,后端需要更多的精力进行领域建设和沉淀,更少关心页面渲染交互的逻辑,我们希望能有更高效的研发模式,减少各端研发之间的大量的协同, 提升整体研发效率。
此时我们选择统一技术栈Dart,通过FaaS无服务器能力建设,采用Flutter+FaaS(Dart Runtime)云端一体的研发模式,让客户端同学来写服务端胶水层代码,同时还无需关心传统服务端运维、扩容等工作。原有的业务聚合、渲染协议解析,由客户端同学在Server完成,实现逻辑归一,完成端到端的研发闭环,实现资源配置的优化。
云端一体化工程体系
在云端一体的研发模式中,Server进行了重新的分层,后端能够专注领域建设,客户端开发完成原有的业务解决方案以及到渲染协议的解析,即下图标红部分。当然,在实际开发过程中,FaaS与领域的边界因实际业务有一定交集。
服务端开发:完成领域建设;
客户端开发:聚合多域信息,实现渲染协议,端侧直接进行UI渲染;
云端一体阶段详细架构
同时,在交易链路,我们将后端接口划分为渲染接口与交互接口:
渲染接口提供页面渲染数据,下图为FaaS部分的代码结构,完成接口校验后,定义页面协议,同时根据业务需求,将多领域数据进行聚合填充。
渲染接口设计
前文中,我们介绍过,交易包含有多操作,在不同业务中,时常有新增操作的需求。不同订单类型不同订单状态包含哪些操作,由渲染接口实现操作动态可配置,例如”已下单未付款“C2C普通交易订单,包含“付款”、”关闭交易“操作。操作触发后的实现,需要业务校验、触发领域服务的交互行为,由端侧完全迁移至FaaS,通过闲鱼的Nexus框架使用Logic Engine的Action通信协议,例如,用户触发创建订单行为,即触发CREATE_ORDER的Action,FaaS部分调用下单的领域服务后,通过NativeApi,触发端上相应的操作唤起收银台、跳转链接。
交互接口设计
效果
当前闲鱼交易链路在云端一体的阶段不断深耕,目前已经落地了下单页面,由原有的前后端3人开发变为1人开发,减少协同显著提升研发效率,其他场景也已经在规划落地中。下单页云端一体版本闲鱼11月版本开始灰度,有兴趣的同学可以亲身体验。
后续计划
本文介绍了闲鱼交易链路的架构演进的过程与思考,不同业务场景适用不同的业务架构,在业务发展过程中,会遇到各式各样的问题或瓶颈,针对业务当前问题与发展方向,选用合理的、收益与成本得宜的技术方案,是顺势而为。闲鱼云端一体化应用架构的落地场景不仅是交易链路,后续会以交易链路为范例不断演进与扩展。
淘系技术部依托淘系丰富的业务形态和海量的用户,我们持续以技术驱动产品和商业创新,不断探索和衍生颠覆型互联网新技术,以更加智能、友好、普惠的科技深度重塑产业和用户体验,打造新商业。我们不断吸引用户增长、机器学习、视觉算法、音视频通信、数字媒体、移动技术、端侧智能等领域全球顶尖专业人才加入,让科技引领面向未来的商业创新和进步。
请投递简历至邮箱:ruoqi.zlj@taobao.com
了解更多职位详情:2684亿成交!每秒订单峰值54.4W!这样的团队你想加入吗?
END
淘系技术,实力为2019年双11而战!稳!
![](/assets/blank.gif)
首次揭秘 | 淘宝新发布的躺平如何做3D场景化导购?
![](/assets/blank.gif)
![](/assets/blank.gif)
一个多业务、多状态、多操作的交易链路,闲鱼架构如何演进?相关推荐
- java闲鱼支付系统_闲鱼: 多状态多操作的交易链路架构演进
¶ 闲鱼: 多状态多操作的交易链路架构演进 转载说明: 版权声明:本文为CSDN博主「闲鱼技术」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:htt ...
- 一个多业务、多状态、多操作的交易链路?闲鱼架构这样演进
前言 双十一刚刚结束,成交额2684亿震惊全世界,每秒订单峰值达54.4W笔.在闲鱼2000万DAU,交易数额同样增长迅速的今天,我们如何保障交易链路的稳定与快速支撑业务?这篇文章从客户端开发的角度, ...
- 一个闲鱼挂机项目,让淘宝用户彻底“躺赢”
闲鱼挂机项目,单号日收益约3元,这个项目比较稳定,并且目前做的人比较少,值得操作,每天仅需2分钟,可无限放大 一.项目介绍 闲鱼币可以用来推广闲鱼的商品,所以很多人需要闲鱼币,也由此产生了买卖:我们通 ...
- 每个java程序都至少有一个线程给主线程,java程序在主线程中判断各个子线程状态的操作,该如何解决...
java程序在主线程中判断各个子线程状态的操作 每个子线程在队列为空时会wait等待其他线程添加新url到队列,到最后所有子线程都取不到url时也会都wait住,要在主线程中判断如果所有的子线程都是w ...
- Visual Studio 2017错误:无法启动程序,在当前状态下操作不合法
本文翻译自:Visual Studio 2017 error: Unable to start program, An operation is not legal in the current st ...
- ListView自定义视图中对Button按钮实现仅允许一个按钮处于开启状态
2019独角兽企业重金招聘Python工程师标准>>> Android项目迭代,之前使用下拉框Spinner被替换成ListView,相应的实现也比之前更加复杂了,根据美工给出的界面 ...
- isis宣告网络_ISIS是一个分级的链接状态路由协议
ISIS 是一个分级的链接状态路由协议,基于 DECnet PhaseV 路由算法. ISIS 可以在不同的子网上操作, 包括广播型的 LAN . WAN 和点到点链路. ISIS 是一个链接状态协议 ...
- Linux命令:netstat【监控TCP/IP网络,可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息】【TCP的11种状态】
netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的状态信息. netstat [选项] 选项 描述 -a 显示所有网络连接和监听的所 ...
- SAP 标准带料委外加工 投A产B业务场景及功能操作演示(1)
因为目前在一个模具产业的公司项目上,他们公司业务其实比较具有典型性.当中会涉及到带料委外的业务和工序外协的业务.这几天我把这两个部分业务的场景和系统操作做个记录,然后再结合这个企业的实际业务情况,简化 ...
最新文章
- 查看mysql的启动日志目录下_mysql诊断启动问题、查看日志文件详解
- extern使用说明
- ASP.NET技术的学习顺序
- 使用esp8266制作wifi干扰器
- iframe中嵌入报表
- SuperMap BIM+GIS技术白皮书
- Kali 暴力破解wifi密码
- mssql2000sp4 sql injection
- 自媒体短视频怎么制作?视频制作大神分享的超全教程,新手也能轻松上手!
- SpringBoot+H5微信登陆(网页)
- 乐固加固后windows下实现给apk签名
- “武大樱花绽放视频”动手实操教程--Python
- 五一劳动节放假通知的模板(通用版5篇)
- 关于Visual Studio 2008调试的一些经验以及错误(0xXXXXXXXX处最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突)
- background-size的几种取值
- jQuery 搜索条件联合查询 (数组条件查询)
- Power Supply驱动框架
- arduino 驱动_Arduino驱动的My Little Pony捐款箱
- Cloudera Manager初体验
- SequoiaDB+Spark搭建医院临床知识库系统
热门文章
- Android开发7年,疫情期间八家大厂高工的面试经历和真题整理
- 用python做鹦鹉螺图_加速鹦鹉螺Python阅读图像的Exi
- JAVA攻城狮:JAVA核心第11版 卷1基础知识,卷2高级特性+JAVA编思第4版(中)
- 【牛客网动态规划专项】DP12 龙与地下城游戏问题
- 彻底搞懂GC机制和GC算法
- 电脑pin码忘了登录不进系统_升级win10系统必须要做的5件事,装机、重装系统必知...
- 苹果又被「啃」掉一口 打破应用商店垄断终有实质性进展
- Python扫码登录保存和验证cookies值——微信公众号篇(四)
- VS-RK3399 安兔兔运行跑分测试
- Ant Design RangePicker 日期选择器不可选择今日或以后的日期, 最多可以选择31天.