助力流式数据处理快速开发


背景:
1.网易考拉APP首页、频道页、活动页、发现页feed流实现,需要对有序列表数据进行数据转换、聚合处理、还原排序等操作。
2.资源投放系统的设计和上线,提供了持久化对象高度抽象的可能,各模块处理逻辑垂直拆分是趋势。

需求分析:


如上图,需求可抽象为:持久化对象——> 业务对象 ——> 视图对象 的处理流程。

看起来可能没有什么价值,那么看一下批量处理的图示:


需要保持数据顺序的同时,将数据归类批量处理,而后还原顺序。
看起来好像很简单,但是写起来其实很繁琐,且不说各种判空,就是根据类型作相应的处理,每个接口写一遍也是很烦的。
重复劳动是不可以忍受的!
怎么办呢?

方案设计


V1.0

抽象出Po、Bo、Vo三组模型
设计Adapter、Filter、Handler三个接口,实现适配、过滤、处理功能
设计AdapterFactory<S,T>,扫描注解绑定Adapter、Handler,校验流程完整性,实现初始化。
通过 List<View> buildView(String accountId, List<Module>) 接口实现根据po批量获取vo

V2.0


定义对象ProcessTemplate<S,T>(流程模板),用于定义流程,由流程节点组成,每个节点有一个Adapter和多个前处理器(Handler)、后处理器(Handler)


定义上下文对象接口ProcessContext<S,T>


定义流程引擎接口


为使用方便,定义自动加载流程引擎接口,并在AbstractAutoProcessFactory中定义抽象方法设置默认流程引擎上下文,在DefaultAutoProcessFactory中实现根据注解初始化默认流程引擎上下文。


接入实战
为了方便大家理解,首先看一下时序图


上面介绍的很复杂,其实使用起来很简单,举一个简单的例子,当前从资源投放系统取到原始素材列表中含有对象BigImageWithGoods,需要给客户端展示的数据对象为BigImgGoodsViewV2。
kaola-mobile-compose系统会先把
BigImageWithGoods数据拷贝到BigImageWithGoodsBo对象中,然后进行相关业务处理,最后将业务数据输出到BigImgGoodsViewV2。
如图所示:


下面看一下业务代码:
1. 由
BigImageWithGoodsAdapterPo2Bo完成把BigImageWithGoods数据拷贝到BigImageWithGoodsBo对象中的任务


2. 由BigImageWithGoodsBoHandler完成对一拖八商品数据批处理


3.由BigImageWithGoodsAdapterBo2Vo完成把
BigImageWithGoodsBo输出到BigImgGoodsViewV2中的任务


4. 配置自动初始化工厂类


5.注入工厂类就可以使用API啦!


至此,单一模块的配置就完成了。下面看一下使用现况:



业务场景
1. APP首页、频道页、活动页、发现页流式数据处理


2. APP调查问券等资源投放数据接入场景(图片暂无)

3. 种草社区首页


4. 种草社区后台(接入中)



总结:有一定的学习成本,但接入成本不高。根据APP首页改造对比,熟练使用后,业务代码可减少60%以上,大大提高开发效率。
PS:配合资源投放系统效果更好喔!资源投放系统适配接入包开发中。


未来将支持功能:
1. 自加载Handler支持优先级设置
2. 多线程
……

本文来自网易实践者社区,经作者曹一帆授权发布。

作者简介:曹一帆    跨境电商/内容产品事业部

个人邮箱:evain.c@icloud.com