当前位置: 华文星空 > 汽车

物联网、车联网研发涉及到哪些关键技术,如存储、大数据分析、高并发消息处理(数据采集、分发、流转)?

2015-03-09汽车

我之前做过一段时间的物联网卡业务,对物联网/车联网进行过一些调研,对行业现状有一些基本的了解,并且我之前很长时间都从事于消息推送与数据仓库等相关工作,所以对你提出的这个问题很想分享一下自己的看法,希望可以抛砖引玉,大家一起讨论,互相学习进步。

一、整体流程

首先说一下整体流程,以车联网为例(我认为车联网是物联网的一个细分场景,具有很强的代表性,而且它对联网及其他技术的要求要高于普通物联网场景),它可以包含以下流程:

1.车载设备采集数据:车体运行监控数据、环境监控数据、GPS定位信息及车载多媒体使用信息等;

2.物联网卡实时传输数据:目前用于车联网的一般是4G或5G的SIM卡,可以将采集到的数据实时高速上传到厂商的服务端;

3.服务端接收数据:服务端接收车载设备发送的数据,并保存到消息队列或数据库等;

4.服务端实时处理:实时处理程序对接收到的数据进行简单处理,得到实时监控信息,用于判断车辆状态是否正常以及是否需要产生交互等;

5.服务端离线处理:离线处理程序对数据进行清洗、分析及可视化等,用于指导业务升级。

>>举例说明:一辆货车行驶在高速公路上,此时发动机转速、冷却液温度、胎压、GPS定位及本次行驶时长正在由车载设备实时采集,车载设备通过一张中国移动的4G SIM卡联网,将采集到的数据发送到厂商的服务端,厂商的服务端接收到数据后,先将其写入消息队列,实时处理程序进行简单的判断认为数据一切正常,然后将数据写入数据库中,离线程序对数据库中的数据进行深入的统计分析,得出货车的发动机转速与冷却液温度及行驶时长的关联关系,工程师将这一关系进行标准化,得到一个判定标准,增加到实时处理的判断逻辑中。

二、关键技术

上述流程中涉及到的软硬件较多,大概包含以下内容:

1.车载设备采集数据:各种传感器(速度传感器、温度传感器及GPS传感器等)、嵌入式主板、嵌入式操作系统、数据收集软件:

如果不做创新,那这一块就很容易,嵌入式主板及各种传感器都很成熟,有很多厂家支持DIY定制,价格也不高,操作系统目前以Linux与Android等为主,基于此开发应用的学习成本不算高。

2.物联网卡实时传输数据:SIM卡通信模组、SIM卡、通讯协议、客户端软件:

除贴片卡等特殊形式的卡之外,物联网卡在外形与使用上与普通手机卡没有区别,主要由移动/联通/电信三家运营商发行,由于各地域信号差异,一般在车载设备上会放置至少两张卡,两个通信模组会根据信号状况进行智能切换。通讯协议一般基于udp协议或http协议,有厂商自定义,客户端与服务端保持一致即可。

3.服务端接收数据:tcp/udp/http/websocket服务端、负载均衡、数据库、内存数据库、消息队列:

为了支持更多设备更快速更稳定的接入,需要开发一个高效稳定的服务端用来接收数据,并且需要支持横向扩展,其中最主要的是负载均衡,可以通过F5等硬件实现,也可以通过lvs等软件实现。由于程序内存有限,而且常见关系型数据库的写入速度不高,为避免高速高并发的数据引起平台故障,服务端应该先把数据先写入内存数据库或消息队列中。

4.服务端实时处理:消息订阅、流计算、多线程、分布式:

实时处理的要求之一就是快,读数据要快、处理数据要快、输出数据要快,消息订阅是指上游有新数据写入中间件后,下游马上就能读到,流计算是指在读写数据的过程中进行逻辑处理,多线程能够提升同时处理数据的数量,分布式能够使多台机器同时处理数据。

5.服务端离线处理:数据仓库、机器学习、推荐系统、WebUI:

数据仓库是指能够存储大规模数据量,并且能够较快速的从中分析出有价值的信息的软件系统。机器学习提供的统计分析与知识发现等方法适用于分析海量数据,同时推荐系统可以根据数据中存在的一定规律对未来数据进行预测,用于风险预测或数据初判等方面。从数据仓库中可以得到一些统计结果、数据趋势、关联关系或周期规律等,基于此开发前端图表进行展示。

三、服务端架构举例

1.传统设计:

(1)服务端采用多点多活部署,使用F5对外提供负载均衡;

(2)服务端接收数据后写入内存数据库Redis 中或消息队列Kafka中;

(3)入库程序从Redis或Kafka中读取数据,写入Oracle等关系型数据库或Hive等文件系统数据库或其他;

(4)实时处理程序从Redis或Kafka中读取数据进行处理;

(5)离线处理程序从Oracle或Hive或其他数据库中读取并分析数据。

2.推荐使用TDengine重构设计:

由上图可以看出,传统设计中流程多、组件多、机器多,由此带来的问题是效率低、风险高、投入高,所以我们需要做出一些优化,经过长时间的调研与测试,对多种架构进行了优劣对比,最终认为使用TDengine可以很好的解决上述问题。我们先看它的官网介绍:

TDengine 是一款开源、高性能、云原生的时序数据库(Time Series Database, TSDB), 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计。同时它还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一款极简的时序数据处理平台。

所以,它的时序存储特性可以取代Redis/Kafka作为第一步的消息存储,流式计算与数据订阅又满足数据处理的场景,它的集群模式也保证了系统的稳定,的确「大幅减少系统设计的复杂度」,改造后的架构如下图所示:

当然这只是我个人浅见,希望大家指正。