支付系统专题/设计/设计之路

【系统设计】我们是如何一个半月从无到有打造一个互联网回收平台的

2017-04-12  本文已影响396人  一名软件工程师

我们接到一个需求,开发一个互联网废旧垃圾回收平台。需求方只是一个想法,技术团队如何落地,不仅仅涉及到系统设计,更重要的是先梳理清业务链路。


业务分析

废旧品处理厂期望直面普通用户进行废物回收,这是一个串行的长链路业务,所以我们以业务参与人员的角度切入分析:

用户Customer

客服CustomerSupportor

调度员Dispatcher

调度管理员GeneralDispatcher

回收员Recycler

仓储:需求是打通上下游,那么废旧品集中回收后,需要运送到专门的仓库进行分拣归类,然后统一配送给末端处理企业,这就要求有相应仓储工作人员接入。

仓储_原料入库下货员

仓储_原料分拣员

仓储_成品入库称重员

仓储_成品出库员

仓储_成品出库称重员

仓储_管理员

财务

财务人员

至此整个业务链路基本处理完毕,对于终端处理企业,由于数目众多类型众多,我们无法再进行更深一步的打通。


核心业务模型抽取

账户Account

回收单RecycleOrder

客服工单SupportorWorkOrder

回收工单RecyclerWorkOrder

业务端回收物品Item

仓储段回收物品Item

仓储入库单WarehouseInOrder

仓储出库单WarehouseOutOrder

除了上述核心模型外,其它模型例如用户地址Address,车辆Car,车辆位置CarLocation,回收品类Category,SubCategory,规格Spec,城市City,全局唯一框Backet,分拣员等模型其实本质都是对于上述核心模型的描述和补充。


系统划分

我们在进行系统划分时遵循的几个基本原则:

划分实践

我们的划分过程经历多轮头脑风暴和迭代,具体过程就不详细展开了,直接看看最终的方案
互联网回收系统
支付系统
仓储系统
400呼叫系统
数据报表系统
B2B电子订单系统

至此,回收平台系统已经设计完毕,技术选型也初步确定。项目成功上线,除了因为某些小bug造成的单点故障,在设计规模下,没有发生因系统设计不合理引发的问题,系统扩展性也比较强,对于新增业务基本能够很好得支持。


其它小结

代码仓库:我们的全部代码初期存放于gitoschina上,后来一段时间经常服务异常,无法commit,所以转移到了aliyuncode,非常稳定,速度很快。

持续集成:我们基于jenkins做了全部系统的持续集成,支线代码提交就会部署开发环境,主干代码更新就会部署测试环境,生产环境部署也是一键达成。其中很多小点还是值得分享的,具体我会在其它博文里介绍。

代码工程:我们打造了非常规范,并经过实战优化的Spring Boot多Module工程目录,晚些也会在专题博文里分享介绍。

依赖管理:一般项目用的Maven,一般项目用的Gradle,对比来说,更喜欢Gradle,配置灵活功能强大。

埋点实现:

静态资源通过阿里云CDN服务支持访问,资费很低,节约了系统服务器的宝贵带宽

车辆定位使用了G7货运人,还是比较稳定的,中间出过一次问题,及时找到对方技术接口人并解决,此外定制开发也能找到接口人,效率也挺高。

WebSocket使用了leancloud,但是稳定性有段时间不好,后来基于开源自建了一个Socket服务器。

短信服务初期使用leancloud,送达率略低,后期切入阿里大于,自费和送达率都符合业务要求。

微信开发,因为有微信公众号,所以对接了微信的各种接口,也填了微信浏览器的各种坑,具体细节会在其它文章分享

支付开发,对接微信支付,支付宝支付,相关分享会在其它专题文章里讲述。

前端框架,使用了angularjs,不得不说是后端MVC人员转型前端开发利器啊。

前端框架,报表使用了JQWidgets,非常好用

MVC异常处理,我们把所有前端请求分为两类,page类和api类,page类主要是返回html,api类返回json数据,所有的返回即使在异常情况下(大部分异常)也是标准的{"result": "","data": "","success": "","message": ""},前端通过angularjs的拦截器功能,实现了全站的异常封装和交互,节约了很多代码

因为我们的遵循了从繁入简的设计思想,所以虽然因为实际情况妥协将回收模块,客服模块,调度模块进行了耦合,但大家都清楚系统未来演进,业务继续生长是一定会进行拆分的,所以我们在代码迭代中会刻意保持不同模块的独立性,领域模型不要过度耦合,跨模块调用统一采用基于bean的服务实现,关键编号保留分库分表位。这样后期如果必须进行拆分时,也会很高效。

...还有很多,一些细节想起来再加吧,这个项目已经交付好久了。


至此基本罗列完了我们对该项目的需求整理,分析以及系统设计的大致过程。
大家如果对其中的部分细节感兴趣,或者有异议,非常欢迎留言谈论批评指正,我会及时勘正补缺。

上一篇 下一篇

猜你喜欢

热点阅读