华为云EI—实时流计算和时空数据库助力用户打开IoT无限可能
随着技术的发展与市场需求的深入,IoT物联网已进入快速发展期,给ICT行业带来了广阔的市场空间。在刚刚过去的2018华为中国生态伙伴大会期间,通过展区展示不难发现,在汽车、水、电、气、工业设备等等领域,越来越多的终端联接网络,源源不断的产生海量时序和时空数据,这些数据往往具有很强的时效性,随着时间的推移,其价值也就急速衰减,因此如何应对海量时序/时空数据的高速存储和查询、如何对数据进行实时的检测和监控、如何实时的挖掘出数据背后的价值都是很大的挑战。那么,华为云EI企业智能又是如何帮助用户与伙伴应对这些挑战呢?
车联网正成为IoT行业应用的先锋
IoT典型场景
根据笔者在IoT领域的一些实践经验,将IoT领域的在线应用场景归纳为如下:
物联网IoT数据源产生的数据大多是时序和时空数据,那么什么是时序数据和时空数据。我们一般认为时序数据是某个时间点发生了某件事情,但是在时序数据这个领域里定义的时序数据全都是跟数值有关的。举一个简单例子,一辆汽车在上午9点在某个加油站加油这条记录,相当于一条日志,本身不能构成一个时序数据,但是如果今天我们每一秒钟都记录了该汽车的油箱里具体油量的值,那么今天的86400条油量记录数据再加上每秒的时间点则构成了一个时序数据。那什么是时空数据呢?简单来说,如果今天我们每一秒钟都记录了该汽车的位置信息(X\Y坐标),这些位置数据则构成了二维空间数据,那么这86400条的坐标记录数据加上每秒的时间点则构成了一个时空数据。
对于这些时序和时空数据的在线业务可以简单的分为三大类,实时检测、实时查询和实时分析。
实时检测是期望可以实时的对异常数据、异常行为和故障进行检测,快速返回给管理系统或者通知相关人员等。比如车队管理则要求进行电子围栏的检测,一旦发现车辆行驶或停止的范围超出了规定的地理空间范围,则可以进行告警。或者货运公司发现某货运汽车并没有按照正常的路线行驶,偏离了正常航道,也可以进行告警,从而进行实时纠偏。
实时查询,主要是对于这些时序数据或者时空数据进行查询以进行下一步的分析或进行展现,比如查询早上7点到9点早高峰期间车的轨迹、车辆本周的油量变化曲线、用户用电曲线等。由于IoT采集数据的频率非常高,可能还需要绘制低精度的曲线。
实时分析,主要是对于采集到的指标数据进行分析,得到基于某些行业的知识,比如对于驾驶员的行为分析,对于汽车油耗的统计分析等。
IoT数据实时分析方案
在IoT领域,对于IoT数据的实时处理流程包括以下几个步骤:
1) 通过IoT Hub进行数据采集或者通过GPS的接入;
2) 对数据进行实时检测,或者预处理;
3) 数据写入数据库/文件系统;
4) 对数据库/文件系统中的数据进行查询、分析。
基于华为云服务来实现上述的处理流程,主要会如下图所示的几个服务:
IoT Hub可以对接物联网终端进行数据采集;DIS(数据接入服务)采用kafka内核将数据接入到华为云,并和CloudStream(实时流计算服务)无缝对接;CloudStream从DIS消费数据进行实时检测或分析,返回检测结果给在线应用,或者增加一些分析数据写入到CloudTable时序/时空数据库中;CloudTable(表格存储服务)作为毫秒级NoSQL数据库可以支持海量的数据存储,并提供时序/时空数据的查询和实时分析;对于一些近实时的查询分析可以通过spark内核的UQuery服务来进行。下面详细介绍核心服务CloudStream实时流计算和CloudTable时序/时空数据库能给企业带来什么价值。
实时流计算,IoT的核心引擎
对于IoT场景的海量时序/时空数据,华为云CloudStream作为实时流式大数据分析服务,微秒级的计算性能为企业挖掘实时数据价值提供了核心能力,具体体现有以下显著优势:
1. 双引擎
IoT场景海量的数据实时计算必须需要有高性能的计算引擎支撑,既要满足低时延高吞吐的性能要求,又要满足数据一致性要求。另外,IoT场景多种多样的业务也要求计算引擎能够运行批量,流式,交互式,图处理,机器学习等应用。目前业界主流的流计算引擎Flink和Spark Streaming都非常适合IoT场景,两者以不同的设计思想(前者是原生流式计算,后者是微批处理计算)各领风骚,都有着活跃的开源社区支撑。
CloudStream集成了Flink和Spark Streaming,双引擎方式很好的连接了开源生态,完全兼容开源版本Flink1.4和Spark2.2,方便业务人员平滑迁移线下业务上云。
2. 基于地理位置分析的SQL 扩展
IoT大量业务场景需要对时空数据进行实时的地理位置分析,如电子围栏、偏航检测等。CloudStream扩展了Flink SQL,提供了基于地理位置分析的一系列Time GeoSpatial语法,方便业务人员使用SQL快速开发地理位置分析业务,其中DDL for Time GeoSpatial可以快速定义基本元素,例如点、线、多边形、圆等;SQL Geospatial Scalar Functions 可以对基本元素进行基本操作,例如计算两点间距离、判断区域是否覆盖、判断点是否在区域内、移动位置计算、分析距离相交包含关系等;SQL Time Geospatial可以在窗口中对基本元素进行基本操作,例如计算多种窗口的平均速度和距离。
图示为实时流计算服务的IoT算子轻松实现电子围栏检测
3. CEP on SQL
IoT大量业务场景需要实时检测无尽数据流中的复杂模式,例如车辆异常行为检测、工业设备异常运行状态检测。CloudStream扩展了Flink SQL,提供了非常高效的CEP on SQL的能力,提供了基于Match Recognize的模式匹配检测,可以帮助业务人员使用SQL实现基于复杂事件规则的异常检测业务,无需开发Flink PATTERN API自定义业务,只需要一行SQL查询语句搞定,大大降低此类业务开发难度。
CloudTable时序/时空数据库,为IoT数据而生
CloudTable是华为云上毫秒级的NoSQL数据库,提供了HBase、OpenTSDB、GeoMesa接口,其中OpenTSDB和GeoMesa作为时序和时空数据库为IoT行业而生,为时序和时空数据的高吞吐量的写入和查询提供了解决方案。
高性能时序数据库
基于对分布式架构系统的良好支持和完善的生态,CloudTable选择了OpenTSDB作为时序数据库内核,并做了软硬件的垂直性能优化,可以支持千万级别的写入吞吐量和百万数据点3秒之内的读取性能,很好的解决物联网领域海量数据写入和读取性能的问题。
同时,时序数据库还提供了三种常用计算:插值、降精度和聚合。
对于每秒都上报的数据,其中某一秒的数据因为某些原因丢失了,则可以通过插值进行补齐。如下图红色框内的点(图a),对绿色线条和红色线条的值进行求和聚合计算,如果没有插值,则会出现结果突变的情况,如果进行了插值则是比较好的效果(图b)
图a 无插值求和结果 图b 插值求和结果
降精度有助于提升查询效率,同时可以提供更加清晰的曲线信息给在线应用。
图a 原始时序数据 图b 降精度之后数据
时序数据库中的聚合和传统数据库的聚合还有一些差异。时序数据库中聚合是将多个独立的时间线聚合成一个数据时间序列,类似于SQL里面的group by,但是此处的aggregation是按照每个时间戳和分组进行聚合。降精度计算中也可以使用不同的聚合函数进行降精度,而每个聚合函数中不仅会包含聚合的函数,也会包含插值的函数,对于缺失的数据,可以采用插值后的数据进行聚合。
时空数据库
华为云CloudTable引入了地理大数据处理套件GeoMesa,可以帮助物联网存储和分析海量时空(spatio-temporal)数据,提供轨迹查询、区域分布统计、区域查询、密度分析、聚合、OD分析等功能。
GeoMesa基于Geohash编码以及空间填充曲线的理论基础,做到了将二维经纬度转换成一维字符串,将三维时空(经纬度和时间)转换成一维字符串,为高性能查询打下了基础。
通过CloudTable中GeoMesa,对于物联网中时空维度的查询简单有效,举个例子,比如
1) 早上7点-9点,有哪些人/车出现在深圳市龙岗区坂田?
2) 早上7点-9点,从深圳市南山区到深圳市龙岗区坂田的人/车的轨迹是怎么样的?
3) 晚上5:30-7:30,深圳市龙岗区坂田的人/车的轨迹是怎么样的?
图示为基于时空数据库服务用CQL实现区域分析
通过以上的一些查询,可以分析出行人/车的出行规律,进而进行附近的健身房、餐馆、娱乐设施的推荐;分析出住宅区、工作区的聚集地;分析出同行的人的数量,抽象出公共巴士的路线,优化公共交通路线等等。通过时空数据的查询和分析可以进一步挖掘出时空数据背后的价值。
Cloud2.0时代,越来越多的企业关注如何提升应用上云效率的同时,也在聚焦新技术给现行业务带来的创新与改变。华为云实时流计算和时空数据库帮助行业伙伴与客户轻松实现IoT场景下时空时序数据的实时计算、存储和查询,为IoT海量数据和业务应用之间架起一道桥梁。除此之外,IoT场景还有很多即有趣又丰富的业务,华为云EI企业智能提供了丰富的大数据和AI服务,比如机器学习服务、图引擎服务、深度学习服务等,将携手与行业伙伴共同扩展更多能力,丰富更多算法和模型,从而打开IoT无限可能。