点击空白处退出提示
新华社采编审业务管理与考核系统
我要开发同款作品详情
● 项目职责:
1.负责基础数据的统计模块开发,业务人员的业绩考核统计架构设计
2.需求调研与技术框架选型:采用MongoDB数据库方便字段扩展,及考虑MongoDB的性能优势;采用多线程计算,结合以位长度时间刻度的数据单元及多维度进行聚合计算存储,并在前端微服务做二次聚合,灵活应对日期的查询要求。
3.项目开发进程:项目中根据需求变化多次进行深度重构优化,大幅改进了查询性能,包括前端查询的多线程优化,最终选择时长单位从以小时到日为单位的改进,降低了统计结果的数据条数,有效提升了前端二次聚合计算的效率,提升了用户体验。得到了用户的好评。
4.技术选型:MongoDB、springCloud、多线程/池。MongoDB聚合框架的应用、原生多线程池和spring注解线程池的应用及踩坑、分布式事务锁的应用、shell脚本在微服务中应用。
5.技术特点:为了方便用户后期脱离技术人员依赖,将大量的计算和协调的定时器改为可数据库和后台管动态修改参数,且无需重启微服务的技术实现。项目中还多次采用基于数据库的分布式锁技术,协调上下游操纵或计算的连贯和通讯。项目中考核部分,需要每年的考核指标数据项是可变的,设计为表头存储于表头表中,动态获取和生成考核表。项目中大量采用定时器处理数据的采集和统计计算及索引源数据生成等任务
● 项目心得:
1.独自开发了基于Spring AOP技术实现的可以灵活调度的定时器框架,它可以用数据库管理和改变而不需要重启项目的,取代了spring注解方式的定时器。深刻理解了指定时间模式和间隔周期模式的实现原理。期间实现过基于代理模式的第一版,但是发现模板代码较多,不利于推广到项目中使用,之后采用SpringAOP方式实现,扩展的业务定时器模板代码量较小,可以快速被同事学习吸收。该框架可以随时动态调整定时器的时间参数、类型参数和启/停等功能,并实现了定时器处理事务记录和追踪,从而有效解决了,原有定时器不能动态调度问题。既可以快速解决运维中需要临时调度定时器到新的时间点执行的问题,还可以实现随着业务逻辑需要动态调整调度定时器,非常方便灵活。因为有了AOP的实际经验,为以后实现其他基于AOP的技术奠定了基础,比如统一日志管理,统一缓存实现,公共接口与定制化业务插件实现等。
2.不可尽信官方文档与参考书。项目中发现spring注解线程池十分不可靠,尤其是与java原生线程池混用或有多层注解线程池时,会发生回执不了,导致程序假死,进而导致我的定时器无法继续周期性工作,最后为了避免写原生线程池的代码量(原生线程池时可靠的)只好放弃最外2层的回执(这两层在业务场景下可以不关心回执),才算最终完美解决。
3.做架构和负责团队带领,一定要培养1~2个跟得上思路思维敏捷的后辈,这样对项目和团队的效率非常重要,不能凡事都要亲力亲为,但是关键的思绪和业务需要跟踪跟进和掌握在自己手中。在项目中积累和发现的好用的技术一定要释放共享出来给团队,要保持开放的心态。这样对团队成员的成长也是非常有好处的。
4. 项目起始一定要亲自动手写好关键业务流程样例代码,供团队复制使用参考,形成规范动作,方便团队成员相互修改或延续开发时,没有交流上的障碍,所有人像一个人的代码风格。最后大家只是在业务细节上不同,但是相似场景的代码格统一。新进入团队的成员也被强制推荐采用。架构师开始是累些,但是后期维护难度大大降低,而且要不定期审阅团队其他成员的代码,发现问题及时指出。
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态
评论