说起软件架构总是一个很经典的话题,软件行业发展了很多年,从最早说的C/S,B/S,到IOC,AOP,设计模式这些概念,再到最近几年的大数据,CAP理论,微服务化,容器化。可以说近十多年来,随着软件行业,尤其是互联网行业的发展,软件架构在变得越来越复杂,从单机软件架构,逐渐发展到了一个大规模分布式的架构,整个过程可以说是非常的精彩。
今天,软件行业最火的三个概念毫无疑问是物联网、AI和区块链。相比互联网行业,这三个行业的发展起步较晚,因此软件架构思想相对还不是那么成熟,也正因为此,给了从业技术人员一次探索和创造新技术的机会。我3年前有幸加入G7,随着公司的快速发展也一起建设了G7的物联网平台架构体系,一路走来心得体会不少,借此也做一次梳理。
物联网技术和互联网技术有什么不同?
百度百科对于物联网的词条里有一段话,说的比较精炼,我在此引用下:「物联网是指通过各种信息传感设备,实时采集任何需要监控、连接、互动的物体或过程等各种需要的信息,与互联网结合形成的一个巨大网络。其目的是实现物与物、物与人,所有的物品与网络的连接,方便识别、管理和控制。」
可以看出,物联网的主要场景是对通过各种传感器对物体进行监控,识别和控制。在物联网之前,技术发展最成熟的无疑是互联网,我自己也是从互联网行业出来的,因此在对物联网技术的探索过程中,少不了和互联网的技术去做比较,在我看来,由于业务场景的不同,二者的技术关注点还是不太一样的。
首先,传统互联网面对的是人,而物联网面对的是物。这是本质的不同,人有人的特点,比如人的时间大多数是在看(获取数据),而不是在写(创造数据),这就决定了传统互联网是一个相对读多写少的场景。此外人白天得上班,晚上得睡觉,这就决定了互联网的流量波动会出现明显的周期特征。
而物联网呢,我们要做的是对物体的监控和控制,那么对这个物体的当前状态,变化情况,都要变成数据传输到服务器,相比之下,人去看这些数据倒成了一个低频行为。与此同时,这些物体产生的每个数据都和物体本身所在的时间和空间紧密相关,所以我们称这些数据具备明显的时空属性。
其次,相比传统互联网,物联网开发是一个更长链条的协作过程。做一个传统互联网软件,我们通常是先基于业务设计数据库结构,然后开发对数据库操作的代码和界面,整个过程是很容易在一个小团队里闭环的。而做一个物联网平台,需要从设备研发做起,通过各种传感器来将周边的现实状态转化为数据,再通过网络将数据传输到平台,平台再这些数据进行加工处理,变成业务所需要的结构化数据,最终再来开发对这些数据的展示,或者我们要操作一个现实中的物体,也是要完成从界面到平台到设备,最后再到控制系统的协作过程。
物联网技术都包含什么东西?
上面是之前画的一个物联网技术体系的简图,从下往上有5个层次,分别是感知层、接入层、数据层、业务层和展现层,我下面简单说下这5层分别需要什么能力。
感知层
感知层能力就是硬件能力,是物联网最基础的一层,是真正在创造原始数据的层面。如果没有好的原始数据,意味着我们的数据基础是不可靠的。在一个不牢靠的基础上,进行的业务应用和数据分析也是不可靠的。因此,如何保证稳定准确的数据感知和上报,是这一层的重中之重。这其实是一个挺多维度的问题,包括采用的感知方案是否合理,安装实施工艺是否简易,信号接收是否稳定,功耗情况是否合理等。硬件本身,从芯片选择到主板设计,每一个领域都需要精雕细琢。同时,硬件之上的软件设计,如何快速,稳定的在一个相对局限的资源里进行计算,进行数据的过滤,都是需要考虑的事情。
接入层
接入层能力是架构和适配能力,关注的重点首先是可用性。接入层要连接大量的设备,这些设备每时每刻都在上报数据,而且如前文谈到的,设备是不会休息的,因此这种场景是24小时高强度的写入。这就对接入层的稳定性提出很大的挑战,需要通过很好的架构和实现,去支撑这种海量的数据上传场景。
另一个需要关注的重点是适配能力。我们会接入很多不同种类的设备,很多设备的功能是类似的。这个适配就要分为两个问题去看:一个问题是如何快速的适配这些设备的协议,让设备进入我们的平台;另一个问题是,要如何把不同的设备协议,基于业务转换成标准的数据结构,为后面的分析和挖掘工作打好数据基础。
数据层
如果说感知层和接入层是在创造标准化的数据,那么到这一层的重点,就变成了要存储和应用这些数据。因此我们首先要考虑,如何存储如此海量而且在不断增加的数据量。我们的存储架构要考虑可扩展性,数据安全性,数据的易用性,以及存储这些数据的成本。同时,我们如何对海量数据进行计算,是一个典型的大数据问题。因此我们需要通过大数据架构来支撑这些计算。对数据的分析,如果要变成对未来的预言和决策,机器学习算法也是必不可少的。换句话说,数据层是物联网公司的技术核心层。这一层的技术积累深度,决定了我们能够把数据价值发挥出多少。
业务层
业务层的主要工作是考虑如何利用数据和算法,解决具体的业务问题。业务层和数据层应该是一个相互驱动的关系。业务会基于用户的需求,对数据层的技术提出更高的要求。技术也需要不断提升,反向为业务去提供更好的架构基础、算法能力。因此,单纯的技术驱动和产品驱动都是不够的,只有技术和产品相结合才能发挥最大的价值。
如果从技术层面看,业务层面对的技术压力是来自于直接的用户访问。因此,传统互联网公司的微服务化,缓存策略,消息订阅等技术在这一层是很适用的。同时,物联网的业务还是很有自身的特点:比如会有大量的实时计算需求,去快速的给客户反映当前的情况。我们生成的各种事件报警,都离不开要设计实时流式处理的算法,需要不断对一段时间的数据进行统计,也是一大特点。物联网的数据有明显的时间序列性和位置相关性。因此,基于这两个特点的业务会特别多,都需要用专门的技术方案来支持。
展现层
展现层就是用户界面。在G7这一层会更加偏重于数据的展现。回到刚才说到的物联网数据两大特性:时间序列性和位置相关性。实际上这两个特性在从数据层开始,再到业务层和展现层,都在影响着我们的设计。因此,展现层需要去考虑:如何针对两个特点去进行数据UI组件的设计。另外,物联网中有很多大数据分析,对大数据的直观展现,也是展现层需要考虑的问题。
如何支持业务快速创新
如上文所说,物联网领域的技术开发是一个长链条,高复杂度的过程,而G7又是一家不断的在进行业务创新的公司,如何通过良好的架构设计来支持快速的业务创新,是我们必须要去深入思考的问题。
我们也在这个问题上经过一段时间的探索,并得到了两个基本认知:
小团队自包含是支持快速创新的唯一保证
需要通过一个强大的平台来提供小团队自包含所需要的各项能力
第一点很容易理解,无论有多好的过程管理,跨团队协作也比不上一只自包含的团队,我们需要思考的是如何让这个团队真正的能做到自包含,需要为这个小团队提供什么能力来提高他们的速度。
我们给出的答案是IoT PaaS平台和IoT业务中台,下面分别解释一下这两个平台的作用。
IoT PaaS PaaS不是新的概念,但基于IoT的PaaS应该如何打造,我们认为IoT的PaaS应该具备5个能力: 设备接入能力:通过可自动伸缩的容器化技术,提供统一的的连接管理和监控能力,仅仅把协议解析的核心代码部分暴露出来给到业务方自行开发。 数据获取能力:通过一个统一的消息队列来让业务方能够自行获取数据,业务可按照自己需要的方式来进行处理。 数据存储能力:提供统一的数据库存储方案,集中为业务解决物联网的海量时序数据存储问题。 实时计算能力:提供统一的流式计算平台,让业务方可以在此之上自行进行实时计算,不用考虑资源问题。 离线计算能力:提供统一的离线计算平台,使大数据处理和任务调度也变得容易。 为此,我们提供了5个平台来提供上面所说的5个能力,分别是Eacoon, GMQ, CubeDB , GLink和GStove。 所有平台提供统一的运维保障,而业务可以基于这一套平台实现从接入到处理到存储的一站式处理,真正实现小团队自包含。 IoT业务中台 上一节中的IoT PaaS体系实现了创新业务的自包含开发,但与此同时,我们还要去抽取这些业务的共性部分,进一步简化业务开发的工作量,IoT业务中台因此应运而生。 IoT业务中台是对IoT业务的高度抽象,从抽象程度的由低到高包含三层即:设备抽象,车辆抽象和物流业务抽象。 设备抽象:目的是把远程的设备变成在平台上的一个设备实体,可以简单的对其进行操控和数据的获取。 车辆抽象:在这个层面上我们开始忽略设备本身,设备只是去获取车辆数据的方式,通过这个抽象我们能够以车辆的维度来控制和获取数据,而无需关心上面装了什么设备。 物流业务抽象:在这个层面上我们通过对车上数据的理解,把其转换成物流业务的维度,包括当前站点,任务状态,司机状态,道路偏离等。 因此,G7的IOT业务中台,就是要把这几层抽象不断的完善,做到极致,通过这几个层面的抽象,也能够使得业务在开发的时候,能够很多的现有的抽象可以使用,而不需要从头做起,从而极大的提高业务开发的效率。 总结: 本文总体介绍了物联网平台的技术特点,也简单阐述了一个成熟的物联网架构的基本思想和架构方法,希望能够使大家更加清楚一个合理的物联网架构的形态,里面的细节我们后续再展开讨论。 作者简介:赵云涛,从事软件技术十多年,经历了企业开发、互联网、移动互联网、物联网+AI多个技术大潮。曾任职于搜狐,联想,阿里巴巴,现为G7技术合伙人,负责G7 IoT平台和管车软件平台研发。 - THE END -
G7受邀出席2018全球智慧物流峰会 翟学魂畅谈AI物流的如今与未来
物联网+人工智能,
正在让物流行业发生一场效率革命