目录
消息接收的流程图
消息处理的流程如下所示。
1.线程管理
消息处理是由多线程完成,以加快消息的处理。但是线程的数量如果是固定的,那么可能无法满足实际的需求。如果数量太多,又会占用额外的CPU资源。所以这里采用动态处理线程数的方式来实现。
负载:低
2.消息派发
将收到的消息派发至并发的消息处理类。
注:由于消息需要调用外部接口,可能会卡一定时间,每个消息的处理时间大约40ms - 80ms。
负载:低
3.处理后消息收集
从并发处理类读取已处理的数据。
负载:低
4.消息记录
如果是调试模式,则记录所有数据。
负载:这个比较耗时的操作,但具体负载量有待定量分析。
5.定时更新
根据收到的消息内容,逐条更新设备的信息,重点两项内容:
- 更新消息坐标信息
将更新后的坐标信息发送至坐标信息中。 - 收集报警消息
如果是报警信息(DW31/DW51移动报警,DW33/DW53 断电报警)
负载:低。每台设备只有几个简单的操作,即可10万台也在几十毫秒即可完成。
6.设备信息保存
根据指定的保存周期,将所有的设备信息保存至指定虚拟盘中。
负载:低。目前,每台的数据量约为0.2KB,每分钟存储一次。设10万台在线,则总数据大小为20MB。由于保存的位置为内存虚拟盘,速度可以达到 1000M/s,所以20M的数据可以保存在0.1s 内完成,相对于1分钟的时间,数据量可以忽略。
7.设备自主更新
设备中有历史位置信息,进行更新和保存。
负载:低。每台数据量一般不超过10KB,但是保存的频率很低,约10-20分钟保存一次,可以忽略。
8.报警消息保存
将报警消息保存至指定的虚拟中。
负载:低。由于报警消息量很低,可以忽略。
9.休眠
休眠一段时间,以减少CPU占用率。
负载:1000 ms。
日志记录
在本程序中,由于消息的量可能会很大,所以进行以下分类。
消息类型
等级 | 分类 | 重要级别 | 作用 |
---|---|---|---|
1 | ALERT | A | 需要立刻修改的信息 |
2 | CRITICAL | A | 严重级别,阻止整个系统或者整个软件不能正常工作的信息 |
3 | ERROR | A | 阻止某个功能或者模块不能正常工作的信息 |
4 | WARNING | B | 最具有重要性的普通条件的信息 |
5 | NOTICE | B | 一般信息的日志,最常用 |
6 | INFO | B | 一般信息的日志,最常用 |
7 | DEBUG | C | 仅用于测试测试模。 |
重要级别
根据消息的重要级别,消息分为三类
- A:导致系统无法正常运行的错误。
- B:不影响系统正常运行,但是可用于数据分析的消息。
- C:仅在调度模式下会记录。由于这些消息的量会很大,记录会明显影响系统性能。
- Emonerous (E) 消息数据量大无法实际记录;
- Normal (N) 消息量对性能影响在1%以内,可以正常记录;
- Uncertain (U) 消息量不稳定,可能会能性能产生严重影响。
附录
系统可能的坑
- 每条消息没有结束标记,导致会有0.5秒的延时
- 调用GPS API函数以实现WIFI定位的费用需要自负,可以通过本地保存的方式减少设备的调用,但是这个需要额外的开发量;
- 由于国家政策问题,坐标系有个随机属于会造成一定的偏差;
- 由于设备、网络、系统设计等多方面原因,报警接收时间会有1分钟-2分钟的延时。