当前位置:首页 > 闲鱼技术 > 正文内容

业务代码解构利器–SWAK

xianyu3年前 (2021-03-12)闲鱼技术365

作者:闲鱼技术-紫思

微信号:pps688888
添加微信, 免费测试软件
复制微信号

简介

业务的不断发展、商品类型的不断增多、不断添加的业务需求使得闲鱼的代码出现“bad smell”——平台代码和业务代码耦合严重难以分离;业务和业务之间代码交织缺少拆解。这也是行业中的通病。为解决此类问题,闲鱼自研了一套技术框架——SWAK。本文带大家一起看看SWAK是怎么解构闲鱼代码的。

SWAK是Swiss Army Knife的简称,众所周知,瑞士军刀是一款小巧灵活、适用于多种场景的工具。在闲鱼服务端,SWAK框架也是这样一种小巧灵活、适用于多种场景的技术框架, 它所要使用的场景都具有同一个特点——多实现间的规则化执行。本文将以一个例子开篇,来详细介绍其中的概念。

多实现和规则化执行

图片1

熟悉闲鱼的朋友们应该知道,在闲鱼App里面,商品有丰富的表现形式,不妨叫做类型A、类型B和类型C,各种类型也可以有各自的子类型。每种类型的业务逻辑存在一定的共性,但是也存在部分差异——如在分享页面中,subtitle字段的展示逻辑就不尽相同:

这种单一的实现通常会被写成如下的代码:

类似的代码大家应该都写过不少。逻辑简单的时候写成这样无可厚非,但当逻辑开始变复杂的时候这种写法会具有较多的坏处:

  • 难以抽出公共的逻辑,代码块愈发臃肿。
  • 有较多相同点少量异同点的新类型的实现很难复用原先的代码。
  • 各个类型的代码实际上融合在一块,更改代码可能会影响到其他类型,提高上线风险和测试回归成本。
  • 对于新接手的开发人员来说,理解成本高,上手难度大,无形中降低开发效率。

按照面向对象的思想,获取title的方式对于所有类型都是一致的,应该沉淀成平台逻辑,而获取subtitle就可以抽象成一个接口方法,而类型A、类型B和类型C的宝贝都具有各自的实现而已。对于 获取subtitle这个接口方法来说,它有着多种实现。

那么什么是规则化执行呢?在上面的例子中,我们按照了商品的类型(type)进行了逻辑的分离,但通常情况下并非能分隔地如此彻底。举一个例子,运营团队的划分可能也按照商品类型(type)做划分,也有可能按照类目(category,如手机、3C数码、服饰、图书等)体系来做划分,甚至还有可能按照地域进行划分。那么一个商品可能既会受到商品类型体系的约束,又会受到类目体系的约束,还会受到地域的约束。如果几种约束不一致的话,就会产生冲突。比如subtitle字段,从类型A的视角上来看应该显示价格,在图书类目的视角下或许应该透出出版社——毕竟爱读书的人大多更关注质量而出版社是衡量质量的一个重要标准。是展示价格,还是出版社?或者都展示?如果都展示的话先展示价格还是先展示出版社?如果一行不够放下所有内容又怎么办?无论是上述的哪一种展示方式,背后都是“规则”(在设计模式里,称之为“策略”),代码也无非是按照“规则”进行编写而已。

以上的例子是多实现规则化执行的一个经典场景。类似地,如ABTest、双写等逻辑也是多实现规则化执行的应用场景。

基本思想

在上面的例子中,按照商品的类型或者按照商品的类目进行区分会产生冲突。其实无所谓类型或者类目,对于商品这个对象来说,无非是给其贴上了不同的标签而已——如一个类型A的图书类目宝贝被贴上“类型A”和“图书”两个标签。“类型A”的获取subtitle接口方法对应着一种实现,而“图书”的获取subtitle接口方法又对应着另一个实现。当一个对象被贴多个标签的时候,多个标签对应的实现就会产生冲突。

冲突的解决依赖于“规则”。“规则”最重要的两个部分是——优先级(Priority)和归约(Reduce)策略;执行的先后顺序由优先级决定,而显示第一个实现的结果、显示第二个实现的结果还是两个实现结果的拼接等都是归约策略。“规则”还可以包含如“并行执行方式”和“异常处理方式”等其他组成部分。

如上,可以得出SWAK的基本思想:

  • 分析对象所具有的标签。
  • 分离出不可变的逻辑和可变的逻辑。可变的逻辑抽象成接口。
  • 可变的逻辑根据标签的不同有多种实现。每种实现是独立的,即每种实现是互相隔离的。
  • 当对象同时具有多个标签时,使用优先级和归约策略来解决冲突问题。

值得一提的是,SWAK的基本思想借鉴自阿里巴巴中台的TMF架构,关于TMF的细节可以参考《尽在双11--阿里巴巴技术演进与超越》一书的《基于TMF框架的交易平台架构》章节。

相应地,使用SWAK框架将带来如下的好处:

  • 代码逻辑清晰,可变和不可变一目了然。
  • 代码复用度变高。
  • 可变逻辑按照标签进行隔离,单个标签的实现不会影响到其他标签的实现,降低开发和测试成本。无论是按照“类型”分还是按照类目分,对应的开发和测试同学只需要关注对应的逻辑即可。
  • 新接手的开发人员能够快速理解,轻松上手。

实现原理

相较于运行期才进行根据标签去扫描并加载实现类的方式,SWAK框架更倾向于在静态期就能分析出具有某几个标签的对象在不同的实现方法下会有着怎样的执行逻辑。一方面通过缓存可以明显降低响应时间,另一方面也便于在开发期间发现和排查问题。整体的实现原理可以分成两个部分:注册 和 执行。基本流程如下:

图片2

在注册过程中,SWAK框架将会扫描文件(多实现接口、归约策略、冲突优先级采用了Java注解或者XML文件进行了配置,下面的代码示例中介绍多实现接口和其实现类是如何配置的),扫描出的结果都注册到了本地缓存中,而在执行过程中SWAK框架会从本地缓存中直接查找其所需的冲突优先级配置和归约策略等,这样有助于减少响应时间。另外,使用统一的本地缓存有助于进行“可视化的展现”——开发人员可以直观地看到并分析出程序的执行流程;产品经理也可以直观地看到哪些功能点可以方便扩展,哪些地方的优先级需要更新等等,甚至有助于需求的估时和排期。使用统一的本地缓存也为“可视化的配置”提供了可能性,结合阿里内部的Diamond或者Switch框架(轻量级的开关和动态配置项管理框架),可以无需更新代码,仅需推送配置就可以更新冲突优先级,为开发和测试提供了极大的便利。

闲鱼服务端应用基本都基于Spring框架。为了便于在服务端应用上使用SWAK框架,在设计之初,我们就要求SWAK需要100%地兼容Spring框架。最终的实现版本做到了这一点,无论是业务的bean还是SWAK框架自身引入的bean,都完全由Spring容器托管。框架还使用了cglib代理了上图里执行过程中的一系列流程,完全由框架执行,对开发同学是完全透明、无感知的,使用起来如普通的单实现的接口一般,如下代码块所示。

在闲鱼的应用情况

目前,SWAK框架在闲鱼已经在商品发布和编辑的部分流程上得以应用,我们正在积极将SWAK框架扩展到到更多的流程上。下图是基于SWAK框架的商品域核心功能的改造计划。经过基于SWAK的升级改造,闲鱼商品域核心功能按照业务隔离,各业务开发同学仅需关系其对应业务的开发即可,其通用逻辑和业务隔离由基于SWAK框架的一层和二层充分保证。代码质量和开发效率将获得显著提升。

图片3

总结

闲鱼自研的SWAK这一多实现规则化执行框架,可以很好地解决平台代码和业务代码耦合严重难以分离、业务和业务之间代码交织缺少拆解的问题。并且SWAK 100%兼容Spring,使用方便,快速上手。名副其实地,SWAK框架就像瑞士军刀一样可以适用于多种场景,小巧方便。当然,SWAK仍在不断进化,特性和功能仍在不断丰富。类似地,在闲鱼还有很多有意思的、创造性的尝试。如果对此感兴趣,欢迎加入我们。

<

扫描二维码推送至手机访问。

版权声明:本文由中客网络发布,如需转载请注明出处。

本文链接:http://www.zzzmc.cc/165.html

分享给朋友:

相关文章

闲鱼货源都去哪里找?

闲鱼货源都去哪里找?

  【闲鱼批量上架软件】 现在大家应该都知道,闲鱼是阿里巴巴旗下的平台,是关于闲置物品交易平台,虽然依托于淘宝,但是也聚集了数亿级的巨量流量,据“闲鱼”官方数据显示,此平台上拥有每天超20万件闲置物品的成功交易。   对于一部分新人来说,想要卖货就需要找货源,这个问题应该难倒了一大部分新人进军闲鱼。货源一般是指进购商品的渠道。或者是找批发商合作,这样货源是便宜,但是你要胃口大,吃的下才行,去当地科技市场之类的批发点进货,这要看你的货量大小,是否长期合作,砍价的本事,关注季节与各大商场的促销消息,这样你可以通过一种错位的营销方式以低价的成本拿到高质量的品牌货。   【闲鱼批量上架软件...

闲鱼商家怎样进行有效措施避免被封号

闲鱼商家怎样进行有效措施避免被封号

  【闲鱼助手】闲鱼商家怎样进行有效措施避免被封号      2020年11月13日   闲鱼助手   93 views   0   在鱼上小时卖货运可能是通过非法堵心,熟悉咸鱼一定就是要知道这只是一顿普通的饭,那么我们如何进行有效地可以避免免免费鱼非法堵心这件事呢?   第一点就是不卖自己违规经营的东西,可以看看公告栏哪些方面是禁止违法的。 正如我们所说,发财的方法写在我们的刑法中,但他们能用吗? 所以一定要遵守软件的规则。 如果你不遵循它,你怎么能在这所大学里跑?   第二点是,当你聊天时,你必须通过使用一种礼貌的语言。 如果没有对方用非常苛...

“闲鱼”如何翻身提高超赞?_小千记团队_闲鱼助手教程技巧培训_闲鱼流量曝光提升

“闲鱼”如何翻身提高超赞?_小千记团队_闲鱼助手教程技巧培训_闲鱼流量曝光提升

  世间百事皆有因果,就像每个社会事件发展都有导火索,我们闲鱼也是中国如此,我们千方百计的运营不过是自己想要通过提高学生我们的成交量,获得学习更多的支持,但是如果我们也知道闲鱼中最能影响闲鱼成交量的一大主要因素之一就是超赞数,何为超赞?其实他们就是买家对于需要我们宝贝店铺或者提供服务工作满意而点亮的,那么这自然环境也就象征着我们作为商品店铺的受欢迎程度,超赞既然如此重要,我们有哪些技巧研究方法分析可以有效提高吗?别急,小编带着大家一起来看一看!   首先,我们有一个超级头衔的优势。 首先,这是一个地位的象征,代表着领域中最强的国王。 第二个好处是有太多的曝光机会来增加个人的知名度。 这将...

备战双十一·谁的表情包在天上飞

备战双十一·谁的表情包在天上飞

作者:闲鱼技术-镇雷,还休 前言 双十一刚过,这个全民吃土的时期,闲鱼非常贴心的推出了一个土味表情包的活动,可以通过定制表情包来吐槽并分享大家吃土的心声,这篇文章将为大家介绍如何用Python和weex快速搭建这样一个基于人脸识别的活动项目。 关键词:weex、Python、人脸识别 1. 前端搭建 前端页面主要包括:拍照和生成表情两部分。 1.1 拍照 拍照使用的是windvane的拍照模块,目前只能支持weex环境,h5环境暂时只能通过提示和拉端让引导用户到闲鱼or手淘去生成土味表情。在手淘的最新版本8.1.0中,直接用WVCam...

怎样优化一些咸鱼的商品?

怎样优化一些咸鱼的商品?

  【闲鱼曝光量】怎样优化一些咸鱼的商品?      2020年10月12日   闲鱼曝光率   60 views   0   在闲鱼上卖商品,一定要学会优化自己的商品,增加自己的标题。这样别人浏览你的商品的次数才会多。   但是怎样优化自己的商品呢,一定要学会这几个方式。   一定要会分析和自己同类型的商品,然后分析别人的商品,看他在哪一个鱼塘里面活跃过,或者看他定的一些价钱,还有他发布宝贝的时候的时间,还有他发布宝贝的地区,都需要好好的查看一下。   而且自己发布的商品不要让自己的退款率变高。如果你退款率变高的话,你闲鱼账号的权重就会降...

闲鱼如何提高自己的浏览量

闲鱼如何提高自己的浏览量

  【闲鱼批量上架软件】闲鱼的浏览量直接关系到了商品的成交量,所以这个对很多的信誉商家是很重要的,但是很多的闲鱼小白并不知道怎样提高自己的商品的浏览量。为此也很苦恼,所以今天我就来为大家分享一下,如何提高自己的浏览量。   如果我们的闲鱼想要提高浏览量,们可以做一些免费送的活动,但并不是真的免费送,能进一些成本比较低的商品,然后邮费设置的比成本高,这样我们还是能够赚到利润的,虽然利润不高,但是可以为我们后期的店铺流量打基础。让自己的店铺流量提高了,那我们的商品成交量一定会提高,所以不要在意前期做一些投入。   【闲鱼批量上架软件】还有就是我们在回复客户的时候,一定要快速的回复,这样...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。