互联网产品思考互联网科技大数据

交通大数据维护管理、报警、智能预警方案

2018-09-29  本文已影响2人  复盘随记

某公司找我出交通大数据技术方案。我用一周时间完成了从需求调研,到掌握大数据知识点,了解算法知识点,设计方案的整个过程。

该公司生产铁路使用的某种设备。有的设备甚至部署在深山老林中。修复出故障的设备很耗时,在这期间相关的铁路只能暂停使用。如果修复时间过久,他们作为厂家要被上级问询。所以,他们希望做一个大数据平台实现

  1. 事中实时报警
  2. 事前故障预测

由事后擦屁股,变成事前处理掉故障。公司也想借机实现从设备提供商向服务提供商的转型。收入模式也从各铁路局一次性收费,延伸到长期收取软件服务费。

以下为方案介绍。


1 项目概况

1.1 项目特点

  1. 数据并发量大,总量大,保存时间久。400个站点,每个站点80个设备,每秒上传 401 B数据,每秒共12 M 的数据量,每天约 1T 的数据量。 数据要备份多年。
  2. 安全要求高。部分深山老林的传感器收集到的数据,通过DTU终端使用4G网络传到公司;部分传感器收集到的数据,使用铁路系统有线内网进行传输。需要注意,取有线网传输的数据时,又需要与外网做安全隔离。

1.2 项目目标

  1. 设备有实时报警功能,图形化展示。
  2. 有预警功能,提前发现故障隐患,提前处理。
  3. 设备全生命周期管理。

1. 2.1 安全目标

  1. 使用有线数据的铁路局N的内网保证安全不受侵害。
  2. 后台只有公司内网可以访问。
  3. 完善的权限控制。
  4. 完整的审计数据。

1. 2.2 数据存储目标

  1. 数据要及时、完整的存储。
  2. 数据要长期、可靠的存储。

1. 2.3 前台目标

  1. 细分化的权限控制,只能看见自己权限内的内容。
  2. 图形化的方式展示设备逻辑关系。
  3. 最新数据要实时显示。
  4. 过去的数据要能统计,报表展示。

1. 2.4 报警目标

  1. 现在发生的故障,要实时、准确报警。
  2. 未来可能的故障,要能预警提醒。预测在未来N个火车经过后是否需要会发生故障,预测设备举例下次故障的剩余寿命。

2 方案概况

该项目整体分为两部分:

  1. 大数据实时分析系统
  2. 维护平台(含前台、后台,下图绿色部分)


    image.png

大数据系统,主要功能有

维护平台具有良好的用户体验,同时具有下面的主要功能

方案整体具有可视化、图形化、自动化、安全、注重用户体验的特点。

性能上满足每天2T的数据处理能力,满足1000个站机、2000个用户的使用要求,满足查询时间在5秒内的要求。

项目全部基于Linux系统开发。使用Java、Python、HTML、JavaScript、CSS等编程语言,Spring、Layui、Echarts、Ajax等前后端框架,Hadoop、Spark、Flume、Kafka、Storm等大数据框架,和Scikit-Learn、H2O 机器学习框架,还使用了数据压缩技术和VPN加密传输技术。

2.1 大数据实时分析系统

该系统负责故障报警、故障定位。
通过长期的设备运行情况、环境天气的积累,基于大数据的机器学习,完成故障预测。
通过完善的分布式存储和数据备份机制,并完成设备运行数据的实时、完整、安全的存储。

2.1.1 故障报警

2.1.2 故障预测

积累故障数据,通过机器学习和深度学习的方式

2.1.3 数据存储

将所有收到的数据保存N年(N的值需要机器学习完成后进行评估),依赖

2.2 维护平台

日常,工作人员主要使用该系统查看系统运营情况,包含以下几项管理功能。

2.2.1 终端状态监测

终端上传设备的管理和工作状态的显示。

2.2.2 天窗计划管理

支持天窗的人工创建和后台上传、自动重新的月份天窗表,并在首页的地图中用特殊颜色区分出来。

2.2.3 数据分类统计

大数据系统中收集到的设备运行数据,在存储到分布式数据库时,同步完成了统计,记录到统计结果表里,在这里展示。这样可以提高统计的速度。
通过权限控制,让不同身份的人看不同的数据。

2.2.4 设备状态监测

DTU终端实时传输过来的设备状态将在这里做图形化的展示,并区分权限,根据用户所在的层级,展示相应的内容。

2.2.5 报警信息提示

故障报警发生后,会有微信、短信、网页闪烁、网页声音提示 的综合通知方式。

2.2.6 故障报警处理

报警信息生成后,状态是“待处理”,可以转成“已处理”,并记录处理人。
如果无人处理,将持续报警,每隔5分钟报警一次。

2.2.7 故障预警处理

仅在平台上有网页闪烁、网页声音提示的通知方式。也可以转成“已处理”,并记录处理人。

2.2.8 人员信息管理

创建工作人员的时候,除了个人信息外,还要输入所属的组织层级、角色。

2.2.9 群组信息管理

可以创建不同的群组,相当于组织架构。

2.2.10 角色信息管理

一个创建不同的角色,每个角色对应了一组权限。

2.2.11 权限信息管理

管理每个权限组的默认权限。也可以单独修改某个用户的权限。

2.2.12 车站信息管理

可以增加、修改路局、电务段、线段。可以管理车站的信息,及车站员工、设备、天窗、终端、DTU、设备的报警信息、选择设备的管理软件。

2.2.13 平台运维管理

用于推送管理软件给终端。可以设置推送时间和版本。

2.2.14 审计日志管理

完整的审计日志,记录所有人对平台的操作。

3 大数据实时分析系统方案

本章节介绍的大数据实时分析系统属于整体逻辑图中的黄色部分。

3.1 整体架构

数据流如图:


image.png

该系统采用经典解决方案:Flume -》Kafka-》Storm-》Redis/Hadoop/MySql。

3.2 方案介绍

先由终端将数据压缩后上传,然后使用Flume去监听数据,并实时把每一条数据信息抓取下来并存进Kafka消息系统中, Kafka持久化存储,接着由Storm系统消费Kafka中的消息。消费过程由Zookeeper集群管理,这样即使Kafka宕机重启后也能找到上次的消费节点,接着从上次宕机点继续从Kafka的Broker中进行消费。接下来就是使用Storm做数据解压缩,把二进制和ASCII文件进行解析,把进行设备信息的实时状态输出到Redis缓存数据库中;把设备运行的统计信息保存到MySql中;保存全部的数据到Hadoop集群中,完成3重备份。最后用Web APP去读取Redis和MySql中的数据,展示给用户。前端使用Ajax实时刷新数据。

可以使用机器学习和人工规则处理Hadoop中的数据,预测可能出故障的设备,并报警。

3.2.1 数据采集

image.png

每个车站内,各路段上传的设备信息保存先在车站内的PC机上,然后由采集数据客户端向外上传。

3.2.1.1 采集数据客户端

在每台装有终端软件的PC机上,安装采集客户端。该客户端具有两个功能

  1. 上传数据。监控终端收件收集的各路段发送的日志数据的变化,无论是二进制还是ASCII文件,当有变化时,完成数据的压缩上传。通过E2E模式,实现上传失败,可以重复上传直至成功。
  2. 下载数据。监听无线DTU串口收到的信息,终端软件的客户端是否有新的版本更新或者配置文件的更新。当有更新的时候,会自动下载新的客户端软件和配置文件,下载支持断点续传,节省流量,并不影响日志文件的上传。

日志文件的采集压缩上传,依赖于下面介绍的Flume框架中的 Flume agent 技术。客户端中会集成Flume Agent。后面详细介绍。

无论是二进制还是ASCII文件,文件的每条数据,在设备运行具体信息以外,建议记录

客户端版本实时更新到维护后台,更真实地反应了客户端的现状。

3.2.1.2 终端软件管理

无线网络环境


image.png

有线网络环境

断点下载

3.2.2 DTU的配置

过去的DTU设置无法调整,未来的DTU设置有下面几点需要注意


image.png image.png image.png

以下所有的数据传输,均采用TCP协议。不再赘述。

3.2.3 Flume 集群收集数据方案

Flume是一个分布式的高效的日志采集系统,它能把分布在不同服务器上的海量日志文件数据统一收集到一个集中的存储资源中,Flume是Apache的一个顶级项目。
在Flume中整个系统分为三层:Agent层,Collector层和Store层。Agent层,即采集数据客户端,每个机器部署一个进程,通过Taildir source组件监控日志文件的方式,把新增的日志在压缩后通过DTU或者有线网络发送出去;Collector层负责接收Agent层发送的数据,并且将数据写到Store层,即Kafka集群中。

3.2.3.1 架构设计考虑

可用性
消除系统的单点,提高系统的冗余度。
Agent层
a. 传感器发来的数据先写入磁盘,Agent使用监控文件的方式获得最新的数据。
b. 当Collector变慢或者Agent/Collector网络变慢,Agent将监控到的Events缓存到FileChannel,保存在磁盘上。当Collector恢复正常以后,再将FileChannel中缓存的Events再发送给Collector。
c. 用Supervise进程管理工具监控Agent的进程,如果进程死掉会被系统立即重启。
d.一段时间没有日志增加,将触发Flume agent的报警。
e.为了提高发送数据成功率,Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。),Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),Best effort(数据发送到接收方后,不会进行确认)。这里采用end-to-end模式,类似断点续传,保障在网速慢或者没有网无法上传数据情况下,可以等网络好时继续完成数据的传输。

Collector层
a. 需要2台Collector机器。有线网络下,Agent访问Collector做了负载均衡和重试机制。无线网络下,做了轮询访问,在某台服务器无法使用时,可以启动访问另一台。所以当某个Collector无法提供服务时,Agent的重试策略会将数据发送到其它可用的Collector上面。
b. 当Collector无法提供服务时,也会有相应的报警。
c. 用Supervise进程管理工具监控Collector的进程,如果进程死掉会被系统立即重启。
d.当Collector一段时间没有收到Agent的数据时,自动报警,告知是Agent的问题。
e. Flume写数据先生成tmp文件,系统会每10分钟左右检查各个Collector是否产生了tmp文件。这样可以及时发现Flume写数据的异常。

可靠性
保证Events的可靠传递。


image.png

a. 对Flume来说,当且仅当Agent的Channel中的Events被保存到下一个Agent的Channel中或者被保存到最终的存储服务中。该Events才会被删除。


image.png

b. 数据流中 Channel的持久性。Flume中提供FileChannel机制,保证数据不丢失。
当堆积在Channel中的Events数小于阈值时,所有的Events被保存在MemoryChannel中,Sink从MemoryChannel中读取数据; 当堆积在Channel中的Events数大于阈值时, 所有的Events被自动存放在FileChannel中,Sink从FileChannel中读取数据。这样当系统正常运行时,系统可以使用MemoryChannel的高吞吐特性;当系统有异常时,可以利用FileChannel的大缓存的特性。
c. 默认不支持断点续传功能。如果agent挂了,等agent的source再次开启的这段时间内,增加的日志内容,就没办法被source读取到了。安装会安装flume的execStream扩展,把增加的日志传送给agent。

可扩展性
当数据量增大时,系统能够以简单的增加机器来达到线性扩容的目的。
a. Agent层、 Collector层、Store层 都可以水平扩展。Agent到Collector有负载均衡机制,调节流量。

上面的报警信息,也是传输到Kafka。

3.2.3.2 数据压缩

Flume agent 在发送数据时,无论是采用DTU还是采用有线网络进行发送,都会使用zlib压缩格式进行压缩。

zlib是一种用来改进网络传输数据量的压缩技术,压缩比率在3到10倍左右,可以节省大量的流量。
Flume agent 的 Avro Sink提供了端到端的批量压缩数据传输。

3.2.3.3 Flume集群部署

除了在原有的终端软件所在的电脑上全部安装的收集客户端外,还需要4台机器部署Flume collector,2台位于有线内网,2台位于机房中。

Flume agent

3.2.3.4 VPN 加密保护链接内外网络

有线内网的Collector与公司机房之间使用VPN进行连接。并在Collector所在的机器上,安装防火墙,作为防护外部访问的第二道屏障。

VPN全称Virtual Private Network 虚拟专用网络,是在公共网络中建立专用的数据通信网络的技术,可以为企业之间或者个人与企业之间提供安全的数据传输隧道服务。常用于内网和外网之间的通信。

3.2.4 Kafka集群持久化传输数据方案

image.png

Flume collector 收集到的数据,将被发送给Kafaka集群。
Kafka是一种分布式的,高吞吐量的消息系统,基于发布/订阅的消息系统。Kafka起到一个数据缓冲池的作用,类似于Redis,但是更可靠。使用Kafka的原因是:

3.2.4.1 设计架构考虑

可用性
保证Kafka一直在传输数据。
a. 某个Kafaka node 没有传输数据,则报警。
b. 用Supervise进程管理工具监控kafaka的进程,如果进程死掉会被系统立即重启。

可靠性
保证数据能传输到下一个集群。
a. 消息被持久化到本地磁盘,并且支持数据备份防止数据丢失。默认保存一周。Kafka充分利用硬盘速度,比如RAID-5 的磁盘阵列上线性写的速度大概是600M/秒,速度满足需求。
b. 能记录数据的消费位置并且用户还可以自定义消息消费的起始位置。断电后,可以继续消费消息。
c. 允许集群中节点失败,会使用其他节点发送数据。
d. Store层的Kafka存储最新的N天(默认为7)数据,并给Storm系统提供实时数据流。
e. 分布式集群,任何节点的宕机和动态扩容都不会影响整个集群的工作运行。

可扩展性。
Kafka 支持在线水平扩展。

3.2.4.2 Kafka集群部署

使用3台主机安装Kafka集群。与Flume Collector公用2台。
注意:为了提高性能,Kafka集群与后面Hadoop集群分开,无法公用。因为Kafka依赖磁盘读写和大的页面缓存,如果和Hadoop共享节点的话会影响其使用页面缓存的性能。

3.2.5 Storm 集群收集实时处理数据方案

image.png image.png

Storm 是一个分布式的,可靠的,容错的数据流处理系统。它会把工作任务委托给不同类型的组件,每个组件负责处理一项简单特定的任务。

Strom是一个非常快的实时计算框架,官网首页给出的数据是每一个Storm集群上的节点每一秒能处理一百万条数据。
Storm集群任何节点的宕机和动态扩容都不会影响整个集群的工作运行。

在这里,系统把二进制文件和ASCII文件解压,进行数据解析,然后

Storm 集群的输入流由一个被称作 spout 的组件管理,spout 把数据传递给 bolt, bolt 要么把数据保存到某种存储器,要么把数据传递给其它的 bolt。

在Storm的业务处理代码中,使用三个bolt:
a. 将全部的数据传输给Hadoop集群,保留历史数据。
b. 更新每一个设备、终端的最新状态,输出到Redis 和MySQL。
c. 更新统计数据,比如历史数据量、今日数据量,每个传感器的数据量,传入MySQL。

3.2.5.1 设计架构考虑

可用性
保证Storm一直在工作。
a. 某个Storm node 一段时间没有传输数据,则报警。
b. 用Supervise进程管理工具监控Storm的进程,如果进程死掉会被系统立即重启。

可靠性
保证数据能传输到下一个集群。
a. 分布式集群,任何节点的宕机和动态扩容都不会影响整个集群的工作运行。

可扩展性
Storm支持在线水平扩展。

3.2.5.2 Strom的集群部署

Storm和上面的Kafka共用3台机器。

3.2.6 Hadoop 集群存储数据方案

image.png

Hadoop是常见的分布式大数据存储集群,在Hadoop中,HDFS解决了文件分布式存储的问题,MapReduce解决了数据处理分布式计算的问题。
本项目中,在Hadoop上,使用分布式数据库Hbase存储需要的数据。Hbase中数据被分散到多个节点存储,当客户端发起查询请求的时候,集群里面多个节点并行执行查询操作,最后将不同节点的查询结果进行合并返回给客户端。Hbase性能非常高,适合TB级数据的存储。

3.2.6.1设计架构考虑

可用性
保证Hadoop一直在工作
a. 设置两个主节点。
b. 某个主、从节点没有工作,则报警。
c. 用Supervise进程管理工具监控Hadoop的进程,如果进程死掉会被系统立即重启。
d. 每个小时都监控数据大小周同比是否有较大波动,则报警
e. 使用snappy算法进行压缩存入Hbase中的数据,来减少存储空间的占用。snappy算法是Google大数据推荐的压缩算法。
来自《Hbase: The Definitive Guide》中的一个对比:


image.png

可靠性
使用中不出问题
a. 设置3份备份副本,任何节点的宕机和硬盘的损坏都不会影响整个集群的工作运行。3份备份分别存放在本地机架的节点上,同一机架的另一个节点上,和不同机架的节点上。通过数据的冗余存储机制保证数据的高可靠性。
这样可以有以下优点:

可扩展性
Hadoop支持在线水平扩展。

3.2.6.2 Hadoop的集群部署

每天的原始数据是1T,压缩后有200M到500M之间。算上2份备份数据,每日需要1T左右的硬盘。每年365T的数据,37块 10T硬盘。建议每月中旬前,准备好下个月的硬盘,完成从节点的部署。

需要2台主节点,N 台从节点,N = 每年365 T * 10年 / 每个从节点的容量。内存在3G以上即可。

3.2.7 Redis缓存方案和MySql长期存储

image.png

Redis 高性能内存数据库,存储Storm传过来的每个传感器的最新数据。这些需要实时更新的数据,不适合保存在硬盘数据库中。

MySql数据库在数据少的时候,具有比Hbase更好的查询性能。适合存储不必实时展示,但是以后可能被经常查询的数据。包含

MySql的数据都在Hadoop中有存储,不必再次备份。

3.2.8 天气数据的采集

天气作为影响设备运行的重要因素,也将被采集。采集来源是和风天气。每天400*24次的数据采集,可以使用他们的免费版本API。数据将被存储到天气中。

3.2.8 数据可视化

image.png

前端实时显示:Redis + SpringMVC + Layui + Echarts + HTML5 + CSS3 + Bootstrap + JavaScript + Ajax;
历史数据查询:Hive on Spark + Hbase;
统计数据展示:MySql;

前端使用以上广泛使用的的成熟框架,保证对打浏览器的兼容性,并充分利用最新的H5 CSS3技术,提高展现的效果。每秒向Redis中读取数据,完成实时数据的刷新。

当查询跨度较大的数据时,Hive on Spark + Hbase 的组合进行查询,比Hive on MapReduce 快百倍。

3.2.9 实时报警

当实时缓存Redis中内出现存在故障的传感器终端和设备,或者发觉可能有故障,会使用微信服务号和阿里大鱼短信向相关人进行报警通知。

3.2.10 机器学习 预测故障发生率

机器学习基本介绍


image.png

这个多项式是最简单的机器学习算法 。
所谓机器学习的过程,类似于解N元方程,已知了很多变量的值和对应的结果,求出参数。再用参数集合未来的变量的值,进行新的计算。

机器学习分为三个步骤

3.2.10.1 算法选择

因为已知了特征以及结果是否有故障,所以这是一个监督学习的场景。将使用通过以下两种方法之一来实现预测:

候选分类算法

候选回归算法

Scikit-Learn 是Python 中的机器学习框架;H2O是开源的,分布式的,基于内存的,可扩展的机器学习和预测分析框架,适合在企业环境中构建大规模机器学习模型。
我们将分别使用两种框架 ,完成上面的各种算法,分析比较出效果最好的算法,也就是预测结果和真实结果间均方根误差最小的回归算法和准确率、召回率最好的分类算法,当做线上算法。

3.2.10.2 特征工程

特征工程会反复迭代。

数据清洗
a. 特征抽象。将数据转换成算法可以理解的数据,非结构化数据转化为结构化数据,不同格式的数据统一格数。
b. 特征缩放。将变量数据经过处理之后限定到一定的范围之内。可以加快算法收敛的速度。
c. 处理缺失值。删除没有意义且缺失值较多的属性。

特征选择
a. 选出与目标变量相关性较高的特征。找到正常传感器与故障传感器之间有明显区别的特征。(猜测比如出厂时长、使用情况。)我们可以scikit-learn的 Wrapper方法,通过递归特征消除方法筛选出与故障相关性最强的特征,逐步剔除特征。如果存在不相关特征,可能会降低分类的准确率。
b. 去除冗余特征。不同特征之间会互相影响,或受到同根同源,进而影响到统计结果的真实性。可以通过scikit-learn的皮尔森相关性图谱找出冗余特征并将其剔除。去除不相关特征可以简化计算,更体现出问题的因果关系。
c. 对特征的权重进行排序。通过特征重要性排序来挖掘哪些变量是比较重要的,降低学习难度,最终达到优化模型计算的目的。这里,我们采用的是scikit-learn的随机森林算法判定特征的重要性。

3.2.10.3 模型训练

样本不平衡问题
故障数据具有故障数据,无故障数据多的特点,会对模型学习造成困扰。可以采用SMOTE方法解决。SMOET的基本过程是:采样最邻近算法,计算出每个少数类样本的K个近邻,从K个近邻中随机挑选N个样本进行随机线性插值,构造新的少数样本,同时将新样本与原数据合成,产生新的训练集。实现正负样本各50%。

进行训练
构建逻辑回归分类器,产生预测结果。

数据集划分
交叉验证法划分数据集,将数据划分为3部分:训练集、验证集和测试集。让模型在训练集进行学习,在验证集上进行参数调优,最后使用测试集数据评估模型的性能。

参数计算
采用网格搜索调优参数,通过构建参数候选集合,然后网格搜索会穷举各种参数组合,找到最好的那一组设置。
模型评估
第一评估标准:提前发现了多少有故障的传感器。也就是,模型运行一年后,一年内真实故障发生情况比去年同期减少的百分比。
准确率和召回率是一组矛盾的变量。我们认为应该是召回优先,准确率次之。发现有故障去提前修理,甚至多跑几趟;比漏发现故障,影响铁路运行要好。

模型优化

特征和数据决定了机器学习问题的上限,而模型和算法只是尽最大可能地逼近这个上限。
当然如果数据特别少,不太可能做出非常好的结果。不同的算法只是60分到61分的区别。
需要不断的通过真实数据,反复计算,才能优化优化模型。

3.2.10.4 机器学习硬件部署
image.png

需要配置一台专门用于机器学习的机器,这是推荐的配置。

3.3 整体硬件部署方案

和阿里云的BD沟通后,虽然可以打大折扣,但是每年的费用还是很高。最终决定本地存储。

3.3.1 硬件配置

机器A B: 位于铁路内网,安装Flume Collector

3.3.2 hadoop扩展

随着数据的增加,可能Hadoop的硬盘数据不足,需要在Hadoop集群中接入新的机器。我们会做一个脚本,实现一键安装,完成配置。你们只要实现物理机器的接入即可。

3.4风险

  1. 数据风险。由于网络问题,某个Agent无法上传数据,车站内的PC硬盘空间有限,硬盘写满后,存在未数据没有上传就被覆盖或者删除的可能,
  2. 预测风险。设备故障数据不足,大数据系统无法进行有效的机器学习,影响分析预测的准确性和开发时间。

4 维护平台

image.png

本章节介绍的维护平台系统属于整体逻辑图中的绿色部分。

对方对于功能已经有很详细的想法,本章节主要是补充部分实现细节,和我的新想法。

使用经典的控制层、数据层、展示层三层结构。使用分别是MySQL、Java Spring、Layui/Echarts/Ajax。

4.1 登陆页面

这个地方,我们重点强调安全,从几个方面进行安全防护

4.2 地图

根据每个访问用户的组织关系、身份角色,展示可以展示的地图。
此处的地图,我们使用百度开源的 ECharts 中的组件作为我们的技术工具。
全国地图中,我们还会采用图形化的方式,在地图中显示各车站此时此刻的天气状况。

4.3 主页

4.3.1 页面布局

页面布局,使用最新的后台框架Layui实现。使用左侧和顶部的导航,实现一键切换。
进行功能操作时,车站的选取方式应简便,易于操作,同时对已选车站应使用cookie的方式进行记录,具有记忆功能,方便操作。

4.3.2 终端状态监测

在大数据系统中,设备、终端的最新数据已经存储到Redis中,还会存储到MySQL中的终端状态表中。因为毕竟内存数据库只起到缓存的作用,空间有限。比如,一个设备一天没有数据了,想看最新数据,Redis中调取不到,就会从MySQL中读取。

4.3.3 天窗计划管理

在MySQL中设置月份天窗计划表。类似于常见的日历应用,可以设置重复规则。

不建议做excle导入。根据经验,人是靠不住的,总是会出问题,excel中写的东西会有会出问题的情况,比如错别字。

4.3.4 数据分类统计

大数据系统中的Storm和Redis中进行统计计算,存储到MySQL的统计结果表里,Java负责对统计结果表进行查询,前端展示页面使用Layui和Ajax作为主要的开发工具。

4.3.4.1 数据统计

历史统计数据从MySQL中的统计表中调取。
由于历史数据数以亿记,查询时当场统计太慢。所以,我们在大数据系统记录设备情况时,已经把需要的统计结果实时统计到专门的统计结果表中。每次查询的时候,不是当场进行计算,而是查询统计结果表,提高查询的速度。

4.3.4.2 数据展示

所有涉及可视化、图形化的地方, 我们使用百度开源的 ECharts 作为我们图形化报表的技术工具。

ECharts,是一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。
ECharts 提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、treemap、旭日图,多维数据可视化的平行坐标,还有用于 BI 的漏斗图,仪表盘,并且支持图与图之间的混搭。

4.3.5 设备状态监测

我们会在后台上提供一个浏览器内使用的绘图板,工作人员可以在浏览器内像做PPT似的以拖拽的形式,绘画、修改室内和室外的设备布置图,可以在图上标记上设备的位置,关联已经添加好的设备ID即可。这种方式具有灵活性、和可扩展性。
在图中,设备根据Redis中存储的最新状态和当时天窗的情况,显示对应的颜色和提示。

在有车辆经过时,还会如下图一样,动态地显示出火车经过的效果。


image.png

查看车站模拟量曲线时,支持随意拖拽时间范围。所有涉及时间的数据,都支持拖拽时间范围。


image.png

无线方式上传的数据,做到实时上传即可,各种格式、类型的数据互相转换都是很简单的。

通过多级索引提高查询速度。查询历史曲线时,因为历史数据数以亿计,为了提高查询速度,大数据系统会存储数据时,就在Hbase中为设备ID做索引,将设备ID作为查询条件的字段拼接到RowKey中。保障查询日、月、年详细曲线时的响应速度。其他常用查询字段也会做二级索引,来提供查询速度。

4.3.6 故障报警

故障定义:

4.3.7 故障预警

大数据系统会从两个维度做预测分析:

5 后台管理

公司自己梳理的很清楚了,本章节主要是补充部分实现细节,和我的新想法。

5.1 登录页

后台,从下面几方面做安全保护

5.2 主页

这里我们的补充的是:

绘图拖拽化

配置模板化

终端软件运维

通信协议管理

6 系统运维解决方案

对于一个大型复杂系统来说,监控是必不可少的部分。我们会使用听云和Zabbix作为的运维监控工具。实现:


image.png
image.png

代码及数据库监控

服务器监控

实时运维性能警报

此外,补充Ambari作为Apache的顶级项目,是一个基于Web的工具,主要用来创建、管理、监控Hadoop集群。


image.png

7 性能、安全、接口、安装、可靠性

7.1 性能

支持同时与 500 个站机维护终端进行实时通信

7.2 安全

系统对可接入终端进行登记,未登记的终端不允许接入

保证用户在平台上进行的任何操作都不会影响平台的正常运转

无论系统维护人员在什么地方,都能及时收到系统出现异常的安全提示
保证接收报警、预警通知的用户能接收到平台发出的每一条报警、预警

MySQL数据的定时备份

7.3 接口

与外部应用和终端的对接,将按照对方的文档进行开发。内部接口将写明文档。

7.4 安装

易于安装使用

7.5 可靠性

具备应对各种网络异常的相关措施

具备应对各种功能异常的相关措施,避免因功能异常而导致系统不能正常 使用的情况发生

平台与站机维护终端之间通信数据丢包率不应超过 0.2%。

系统上电自启

7.5 可用性

MTBF 大于 50000 小时

7.6 可维护性

程序结构清晰,易于分析

8 建议

8.1 大数据系统尽量多地收集数据

包括不限于温度、压力、振动。

8.2 可以建立生产大数据平台

生产中建立实时激光测量、等设备质量监控体系,并将这些数据统一汇总到后台中。
实现实时的统计、报警。

8.3 可以建立生产管理平台&App

电子化地跟踪销售订单、工人流转、采购物料、订单出库流程。实现:

整个流程,可以使用图表化的方式查看。方便管理、统计、监督、溯源、分析。


参考文献:
四信DTU使用文档 http://www.four-faith.com/uploadfile/2017/1130/20171130114203171.pdf
断点续传代码 https://www.ibm.com/developerworks/cn/java/joy-down/index.html
内网穿透VPN搭建 https://www.dbooodb.com/2016/09/28/Through-the-network-of-vpn/
Flume日志收集 详细介绍 https://www.cnblogs.com/oubo/archive/2012/05/25/2517751.html
美团使用fluem经验 https://tech.meituan.com/mt_log_system_arch.html
flume数据压缩 https://www.jianshu.com/p/1183139ed3a0
Hadoop、Spark、HBase与Redis的适用性讨论(全文)http://blog.51cto.com/datainsight/1426538
七牛是如何搞定每天500亿条日志的
https://blog.qiniu.com/archives/3928
猎聘日志方案 https://juejin.im/entry/5720397871cfe4006b2d5d82 三台机器搭建系统

Scikit-Learn Python 中的机器学习 http://sklearn.apachecn.org/
NASA机器学习技术之预测性维护 !! http://www.infoq.com/cn/articles/machine-learning-techniques-predictive-maintenance?utm_source=articles_about_Database&utm_medium=link&utm_campaign=Database
雅虎大规模时间序列数据自动异常检测架构 https://blog.csdn.net/justAStriver/article/details/76861532
结合Scikit-learn介绍几种常用的特征选择方法 https://www.cnblogs.com/hhh5460/p/5186226.html
TensorFlow的逻辑回归实现 https://blog.csdn.net/Gamer_gyt/article/details/80115299
TensorFlow之逻辑回归 http://suanfazu.com/t/tensorflow/13215
【机器学习算法实现】logistic回归__基于Python和Numpy函数库 https://blog.csdn.net/u012162613/article/details/41844495
百度智能磁盘故障预测 http://forum.huawei.com/enterprise/zh/thread-446957.html
基于多维时间序列的数控机床状态预测方法研究 http://jsuese.cnjournals.com/html/2018/1/201700435.html
机器学习 逻辑回归 做 金融诈骗预测 https://zhuanlan.zhihu.com/BecomingaDataScientist

Zabbix 3.0 从入门到精通(zabbix使用详解) https://www.cnblogs.com/clsn/p/7885990.html#auto_id_25


工作后,第一次出技术为主的方案,还算顺利。网络上资料如何丰富,学习能力跟得上就够了。

上一篇 下一篇

猜你喜欢

热点阅读