新闻动态
NEWS CENTER
NEWS CENTER
2020-07-10
后台系统是一个庞大的功能体系,及时的了解每个功能的使用状况,保障业务正常进行是每个系统的重点。通常系统内会开发大量的监控功能(可视化的报表和非可视化的报表)来对这些业务进行监控,同时通知相应的负责人以及时了解业务和服务器状况。
常见的一些监控功能,如账号异常(账号异地登录、账号多次密码输入错误)、运营通知(活动上架、活动下架)、订单异常(订单堆积、派单堆积)、服务器异常(服务器宕机、CPU过载)、脚本异常(脚本卡死、进程过多)等等。
今天带大家来设计一个系统消息通知模块,通过简单的设置,完成个性化的消息发送,并且减轻后期代码的维护工作。首先我们来看看常见消息发送功能是如何实现的以及它们的优缺点。
直接触发是将消息发送的逻辑和具体的业务代码逻辑写在一起,当满足条件时,触发消息发送功能。
我参与过多个系统的开发,发现这么干的人还是挺多的。总结一下应该有以下几个原因:
通过将所有消息先收集到一个消息池(如Mysql、Redis、Kafka等)中,然后再统一通过系统调度将消息发送给接收人。
系统规划的目的就是让功能结构清晰,后期维护更轻松,所以上面第一种的实现方式就不讲了,主要讨论一下消息池功能是如何实现的。先来看一下消息池功能的模型图:
上面的模型主要分四层:
设计具体功能前先来分析一下消息通知都涉及哪些功能。
在系统运行过程中,会涉及到许多业务功能的监控,如订单业务中,订单支付是否有未成功、订单分配是否有堆积的情况、派单功能是有堆积情况;再如运营业务中,商品运营活动已经设置上线时间,到点上线后需要及时通知运营人员上线是否成功,避免影响活动效果。
为了能够及时让维护人员了解问题,通常都对消息进行归类,如账号异常、服务器警告、数据库异常、运营通知、订单异常、脚本异常等。
系统中对于不同类型的消息,根据重要程度会划分出不同的级别。如系统每日报表任务,由于数据量比较大,要求并不是很高,延迟一天通常都可以接受, 所以都是晚上3 ~ 5点之间由脚本自动运行导出后放在服务器上,第二天早上8点发系统通知,再由需求人自行导出就可以了,这类消息属于一般程度;
但是对于服务器宕机这种情况,就必须立即通知负责人进行处理,以免给企业带来更多的损失,这类消息属于紧急程度。
消息接收方式通常就三种:站内信、手机短信、邮箱。不同的接收方式作用有所不同:
对于系统中的消息,比较紧急的如订单支付异常、数据库宕机异常它们需要及时发送,还有一些不重要的,比如上面说的各种任务报表,晚上3、4点生成好后,系统也不会发送消息,一般会设置好时间,等到早上8、9点才会开始发送通知,还有一些任务需要每个几小时就得发送一次。
唯一标示主要用于代码开发。在测试环境和正式生产环境由于测试导致数据库ID不一致,所以开发时没有办法通过对应的ID调用消息,就需要设计一个唯一标识符供开发人员使用,一般标示符命名根据具体的业务点来命名。
由于员工岗位的变动,后台需要设置相应的接收人维护界面,可以自由的添加、删除多个消息接收人。
系统消息基本就上面这些功能,有需要的可以自己再扩展。下面给出部分原型设计图:
功能整理: