分享⼀个物联⽹⼤数据平台软件开发架构案例
物联⽹⼤数据平台软件开发架构案例解析
有⼈说物联⽹是引领信息技术的第三次浪潮。
第⼀次浪潮是个⼈电脑的出现,开创了信息时代的第⼀次⾰命,此次浪潮成就了微软、IBM等巨头。
第⼆次浪潮是以信息传输为特征的互联⽹及移动互联⽹,实现了计算机与⼈的联通,此次浪潮成就了Google、Facebook,以及国内的BAT 等巨头。
第三次浪潮是以信息感知为特征的物联⽹,实现了物与物、⼈与物的全⾯联通,这次浪潮还没有形成寡头,但是随着传感技术、通信技术以及⼤数据处理技术的发展,物联⽹已经在公共事务管理、公共社会服务和经济发展建设等领域中遍地开花,涉及到的⾏业也越来越多,如交通管理、节能环保、物流零售等。
2
背景
万物互联的时代正逐步到来,据权威报告预测,2020年全球物联⽹连接的终端数将达到500亿,数据呈现爆发式增长。这个数据究竟有多⼤呢?举个典型的例⼦:
某个⼯程机械集团,拥有10万台⼯程机械设备,
每台设备上的采集终端每隔10秒上传⼀次数据,每条数据⼤⼩1K,
⼀年的数据量为365天*8.6亿=3000亿,
⼀年占⽤的存储为3000亿*1K=300TB。
我们通常为了保证⾼可⽤,会对数据做3份冗余存储,也就是说,这样⼀个企业⼀年的数据存储量就可以达到1PB,⽽1PB就相当于50个国家图书馆的总信息量。
物联⽹的数据中蕴含的价值也是⾮常⾼的,⽐如:利⽤车载终端上传的数据,可以提前预测体出⾏的时间、⽅式和路线,可以为城市车辆调度提供决策帮助;在⼯业设备上安装的传感器,实时收集⼯业设备的使⽤状况,可以进⾏设备诊断、能耗分析、质量事故分析等;通过各种环保传感器采集的数据,可以辅助空⽓质量改善、⽔污染控制等。
3
传统架构的瓶颈
⾯对如此海量的物联⽹数据,传统技术架构已经难以应对。
⾸先,传统架构都严重依赖于关系型数据库,⽽关系型数据库的索引结构基本上都是类B+树,随着终端数量增⼤,数据库读写压⼒剧增,读写延迟增⼤,数据库⾯临崩溃。其次,难以⽀持海量数据的存储,传统数据库⽆法⽔平扩展,所以扩容成本⾮常⾼,难以满⾜PB/EB级数据的读取和写⼊。最后,难以进⾏⼤规模数据处理,传统情况下依赖数据库的SQL或者存储过程来进⾏数据分析的模式,⽆法对数据做分布式处理,经常⼀个SQL能把整个数据库拖垮。
为了能够把众多⾏业的物联⽹⼤数据价值发挥出来,天泽信息推出了⼀个企业级的物联⽹⼤数据平台(TIZA STAR)。
4
TIZA STAR架构解析
那么TIZA STAR到底是什么呢?它是⼀个⾯向物联⽹的开放的数据处理平台,涵盖了数据接⼊、计算、存储、交换和管理。⽤户基于这个平台,可以很轻松地打造⾃⼰的物联⽹解决⽅案。下图可以展现出TIZA STAR的定位:
图1 TIZA STAR的定位
TIZA STAR主要是为了解决什么问题呢?下⾯的这⼏个都是典型的物联⽹应⽤场景:
物联⽹安全,解决了从数据接⼊到最终展现给⽤户的每个环节的安全防护;
实时接⼊,解决了百万级别的物联⽹终端,以很⾼的频率发送的数据能够实时的接⼊到系统中;
当前状态,解决了在百万级别的物联⽹终端中,快速地获取到某个终端的当前的状态;
历史状态,解决了在百万级别的物联⽹终端中,快速地获取到某个终端在过去的某个时间段内的状态参数;
下发指令,解决了如何给⼀个或者多个物联⽹终端下发指令,从⽽可以实现远程控制和参数调校等。
4.1架构图
图2 TIZA STAR架构图
最底层是设备层,可以全部采⽤X86通⽤服务器,⽆需采购⼩型机等昂贵的计算设备和⾼端存储设备,从整体上可以⼤幅拉低成本。
最上层是业务层,主要是物联⽹的各种应⽤和第三⽅系统。业务层⽆需对数据进⾏处理和分析,只是通过查询接⼝获取到平台层中已经处理过的数据并在界⾯进⾏展⽰。
中间的这⼀层就是TIZA STAR, 包含了数据接⼊服务、数据存储服务、数据计算服务(包括实时计算和离线计算)、监控报警服务、平台管理服务、数据交换服务。下⾯会对每个模块详细介绍。
4.2数据接⼊
数据接⼊时,传感器或者采集终端通过⽆线或者有线的⽅式发送到平台端,平台端通过软负载均衡(LVS)或者硬负载均衡(F5等)将流量均匀的负载到各个可⽔平扩展的⽹关,每个⽹关都是基于netty实现的⾼性能的⽹络接⼊程序。
数据接⼊协议分两个层次,在通讯层次上,⽀持TCP、UDP、HTTP和WEBSOCKET等通讯协议;在数据协议层次上,⽀持MQTT、JSON、SOAP和⾃定义⼆进制协议。通过这两个层次的互相搭配,可以轻松实现任何物联⽹终端、任何协议的数据接⼊。
图3 TIZA STAR数据接⼊协议
⽹关接收到数据,并完成解包之后,将数据包发送到消息中间件中,可以有效地应对“井喷流量”和下游服务短暂不可⽤的问题。在消息中间件的选择上,我们⽐较了Kafka、RabbitMQ和ActiveMQ,最后选择了Kafka,因为在分布式环境下Kafka的吞吐性能⾮常优秀,并且其持久化和订阅/发布的功能与物联⽹的场景⾮常匹配。
4.3数据存储
TIZA STAR综合使⽤了多种存储引擎,包括HDFS、HBase、RDBMS和Redis。其中HDFS⾮常适合于⾮结构化数据的存储,⽀持数据的备份、恢复和迁移,在系统中主要⽤于存储原始数据和需要进⾏离线分析的数据。
HBase适合于存储半结构化的数据,可以很好的⽀持海量物联⽹终端的历史数据的查询,在系统中主要⽤于存储终端的历史轨迹和状态等体量⽐较⼤的数据。
RDBMS适合于存储结构化的数据,通常根据具体的数据库采⽤不同的⾼可⽤部署⽅案,在系统中主要⽤来存储终端基础数据、字典数据和数据分析的结果等。
Redis是基于内存的KV数据库,在系统中通常⽤来缓存需要频繁更新和访问的数据,⽐如物联⽹终端的
当前状态等。在多种KV数据库中我们最后选择了Redis,主要是看重Redis为多种数据类型以及多种数据操作提供了很好的内嵌⽀持。
4.4数据处理
数据处理包括实时计算和离线计算两种。
实时计算我们⽐较了Storm和Spark-streaming,最后选择了Storm,主要考虑两点:⼀⽅⾯是因为Storm的实时性更好⼀些,另⼀⽅⾯是因为在物联⽹的场景中需要⽀持对终端数据的全局分组,⽽Spark-streaming只能在每个RDD中做分组。所以最后我们选择了Storm作为我们的实时处理引擎,在它的基础上我们包装了⾃⼰的实时计算服务,可以⽀持应⽤层的调度和管理。基于实时计算服务可以很容易实现对物联⽹数据的清洗、解析、报警等实时的处理。
离线计算⽬前⽀持MapReduce和Hive,对Spark的⽀持也正在进⾏中,主要⽤于对物联⽹数据做⽇/周/⽉/年等多个时间维度做报表分析和数据挖掘,并将结果输出到关系数据库中。
4.5数据交换接⼝
数据交换接⼝主要是为了简化应⽤层与平台层之间的数据访问⽽抽象了⼀层访问接⼝,有了这层接⼝,应⽤层就不需要直接调⽤Hadoop、HBase等原⽣API,可以快速地进⾏应⽤开发。
⽬前数据交换接⼝⽀持:SQL、Restful、Thrift和Java API,⽤户可以根据实际情况灵活选择数据交换的⽅式。
数据交换的内容包括:物联⽹终端的当前状态、物联⽹终端的历史状态/轨迹、指令下发、数据订阅与发布等等。
4.6平台管理
平台管理包括监控报警和管理UI。
监控报警我们是⽤Ganglia和Nagios配合来做的,从三个级别来做:硬件级别(服务器、cpu、内存、磁盘等)、进程级别(进程不存在、端⼝监听异常等)、关键业务指标(中间队列的元素数、⽹关建⽴的tcp连接数等)
管理UI包括界⾯化安装部署、⽤户管理、终端管理、集管理、数据接⼊管理、实时和离线计算任务界⾯化管理。
4.7平台SDK
平台SDK是为了⽅便企业⽤户基于TIZA STAR定制⾃⼰的物联⽹应⽤,我们提供了三个SDK:GW-sdk、RP-sdk、OP-sdk。
其中基于GW-sdk可以快速新增⼀种新的物联⽹终端协议的接⼊。
基于RP-sdk可以快速开发⼀整条实时处理链,也可以快速开发处理链中的某个模块。
基于OP-sdk可以快速开发⼀个可周期性调度的MapReduce/Spark任务。
4.8平台安全
物联⽹安全也⽇益重要,前段时间发⽣的私家车被恶意远程控制的事件就体现出了物联⽹安全的重要性。TIZA STAR从链路安全、接⼊安全、⽹络安全、存储安全和数据防篡改这⼏个⽅⾯来保证物联⽹安全。
开发一个平台需要多少钱通过SSL和TLS保证链路安全;
通过秘钥鉴权对数据的访问有效进⾏控制;
通过防⽕墙等硬件设备防⽌⽹络攻击;
通过副本冗余保证数据的存储安全;
通过每512字节进⾏CRC校验的机制保证数据的防篡改。
5
应⽤案例
5.1数据流
接下来我们以车联⽹为例,看⼀下TIZA STAR的数据流。
图4 车联⽹数据流
如图4所⽰,物联⽹终端通过⽆线/有线⽹络发送到TIZA STAR平台,经过⼀系列的处理后存⼊到各种存储引擎中,业务可以通过数据交换接⼝来访问处理后的数据。具体流程如下:
1. 车载设备或者传感器设备通过⽹络经过LVS/F5负载均衡将数据发送⾄⽹关;
2. ⽹关接收到数据后进⾏公共协议解析,然后把解析后的数据发给Kafka,存放在原始数据Topic;
3. 实时计算任务从原始数据Topic中读取数据经过数据清洗后发送⾄原始数据解析模块;
4. 原始数据解析模块将解析出来的车辆的参数发送⾄Kafka解析数据Topic。然后将解析后的数据发送⾄报警判断模块;
5. 报警判断模块根据已有规则进⾏预警,并将产⽣的结果分别发送⾄Kafka的报警数据Topic,同时把解析后的数据发送⾄当前状态分析
模块;
6. 当前状态分析模块对车辆当前状态进⾏分析,如果状态有变化则更新⾄Redis;
7. 数据导⼊模块异步的将Kafka中的数据分别导⼊HBase和HDFS;
8. 离线计算则周期性地从HDFS中读取数据进⾏各种报表分析和数据挖掘;
9. ⽤户业务平台和管理平台可通过数据交换接⼝访问TIZA STAR平台数据。
5.2性能对⽐
表1是天泽信息为某个⼤型⼯程机械集团做的平台升级前后的性能指标对⽐情况,其中⽼平台是传统的基于IOE的解决⽅案,硬件环境包括IBM的⼩型机、EMC的存储和Oracle RAC,新平台是基于TIZA STAR的解决⽅案,使⽤的硬件是30台左右X86架构服务器,服务器中⾃带存储。
该⼯程机械集团注册终端数接近15万,每个终端分布在全国各地,每隔30秒发送⼀条数据到平台,上传的数据包含⼯程机械设备的位置、⼯况等信息,该企业会对上报的数据进⾏分析,⽤于⽣产、经营的改善。
表1 性能指标对⽐
6
结束语
从研发到正式商⽤,耗时⼀年半, TIZA STAR经历了三个阶段:
第⼀个阶段是封闭研发阶段。TIZA STAR平台最初的研发缘于公司⼀个客户的迫切需求,原有的数据平台随着业务量扩⼤,性能捉襟见肘,经常出现宕机的情况,已经⽆法⽀撑正常的业务需求。为了更好的为客户服务,我们决定对⽼平台进⾏升级,⽬标是⽤业界最新的⼤数据技术来解决⽼平台的性能问题。经过半年多的时间,我们发布了新平台,为了不影响客户业务的正常开展,决定新⽼平台同时运⾏。⼏个⽉后,经过对⽐,新平台在性能、⾼可⽤性、可运维性等⽅⾯都完胜⽼平台。
第⼆个阶段是拓展阶段。TIZA STAR平台在第⼀个客户成功上线后,公司开始在物联⽹的诸多领域推⼴这个产品,但推⼴的过程不是很顺利。⼀⽅⾯,由于⽬前物联⽹领域还没有⼀个统⼀的标准,不同企业、不同物联⽹终端都有⾃⼰的⾮标协议,我们在数据接⼊、协议解析、存储⽅⾯都要进⾏不同程度的定制。另⼀⽅⾯,随着上线的案例越来越多,我们原来的平台架构也暴露出很多问题,针对这些问题,我们做了很多调整,⽐如将⽹络通讯组件由Mina替换成Netty,引⼊了KV数据库,对Hadoop、Hbase和
Kafka等进⾏了⼤版本的升级。在这个阶段,虽然TIZA STAR平台在不同的⾏业都有成功案例,但团队做的还是很⾟苦。于是把物联⽹平台进⾏封装以满⾜⼤多数场景的需求就显得迫在眉睫,TIZA STAR的产品化就此应需⽽⽣。
第三个阶段是产品化阶段。在此阶段,我们对数据接⼊、计算、存储、交换等各个环节进⾏了封装;累计开发了超过100种⾏业协议;抽象出了3个SDK,便于⽤户基于平台定制⾃⼰的新协议和业务处理模块;完善了监控和报警,形成⼀个完整的运维闭环;实现了安装部署、管理和运维的界⾯化操作;提供了标准版和简化版来满⾜不同规模的客户需求。经历了半年多努⼒,TIZA STAR平台终于实现了产品化。
在产品迭代的过程中,我们经历过产品初次上线成功的喜悦,也经历过产品拓展过程中的迷茫。项⽬组也从最初的五六⼈,到⼏⼗个⼈初具规模的研发团队。⽬前,TIZA STAR平台正式注册了商标,申请了软件著作权和四项物联⽹⼤数据领域的发明专利,产品在各个⽅⾯都有⾮常⼤的提升,希望今后可以给更多的企业提供物联⽹平台端解决⽅案。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论