2018 年伊始,我们的朋友圈就被人工智能、区块链刷屏,但是朋友,不要忘记,下一个风口,物联网必不可少。在这个万物互联、万物智能的新时代,智能物联网通过网络赋予万物感知,在云端形成大量数据,并通过智能化落地应用。
2018 年 1 月 18 日,百度云天工发布国内首款边缘计算产品「智能边缘」,融合百度 ABC(AI、Big Data、Cloud),打造“一站式、全托管”的智能物联网平台,提供从数据采集、传输、计算、存储、展现到分析全系列物联网基础云端服务,赋能合作伙伴与开发者构建各类智能物联网应用。
4 月 21 日,由百度开发者中心、百度云智学院主办、极客邦科技承办的第 78 期百度技术沙龙邀请了来自百度资深架构师百度云物联网部 TC 主席李乐丁,百度云物联网部高级产品经理黄淼,百度云物联网部前端开发工程师钟姿艳三位讲师,从端到云,为大家解读百度云边缘计算和百度云物可视,探讨 IoT 的应用场景和发展趋势。
1 边缘计算——物联网的下一个主战场
百度资深架构师、百度云物联网部 TC 主席李乐丁做了开场演讲。他强调,百度云物联网部一直致力于让互联网使万物互联,让云使万物赋予智能,让复杂的生产生活变得更加简单的理想。在过去的一年中,他们与各行各业进行深入合作和探索,积极提升企业的运行效率。
物联网发展的新浪潮
物联网在各个领域蓬勃发展,万物互联的时代渐行渐近。但是随着业务的发展,逐渐发现基于公有云中央数据中心的方式无法满足很多场景的实际需求。例如,基于传统设备连接中央服务器,网络延迟和带宽会产生巨大成本;隐私保护和合规性越来越重要;以及今天所用的很多设备在功率和网络条件上受到限制,而这些带来的基本问题就是你的设备很可能无法通过网络即时连接到云和中央服务器。
云上的物联网解决方案
为了解决上述问题,百度云提出了云上的物联网解决方案。上图为百度云天工整体架构,支持通过多种协议,将设备连接至云端,使用天工智能物联网平台的“一站式全托管”的平台服务。百度云天工传送门:
https://cloud.baidu.com/solution/iot/index.html
在端云一体的时代,能不能提供新一代物联网的方式在本地得到福利呢?百度云就此进行了新的探索:边缘计算——IntelliEdge。
IntelliEdge,智能边缘计算服务
IntelliEdge,智能边缘计算服务,以软件的形式呈现。如上图所示,设备分为两个类型,一种类型称之为是核心设备,安装了 IntelliEdge 软件,充当整个本地物联网的中心;另一种类型为关联设备,无论是车、生活设备、还是工业设备,都可以将消息传递到上面,实现消息的出发,并进行一系列的计算,发现设备的智能所在。但是这样的 IntelliEdge 也不可能完全将云和一些设备的隔离,于是百度云将核心设备与云进行连通,经过连通使边缘产品无缝介入设备,将云端的能力、设备的能力进行同步。
感兴趣可以去这里看看产品详细内容:
https://cloud.baidu.com/solution/iot/intelligent_edge.html
我们一起往下看看百度云天工的边缘计算,一探究竟~
边缘计算核心功能
「智能边缘核心」主要负责本地计算、消息收发、安全认证、云端交互等工作,具体功能如下所示:
- 本地消息收发
- 关联设备使用 MQTT 协议连接至核心设备
- Pub/Sub 消息模式,支持至多一次和至少一次两级 QoS
- 面对应用的场景支持,支持会话保留,掉线不丢消息
- 保持云同步能力,支撑百度无穷的运力和存储
- 支持消息 Pub 到云端,支持 Sub 云端消息
- 强制使用 TLS,保证数据安全
- 本地提供函数计算引擎
- 深度集成百度云函数计算(CFC),云开发测试,本地执行
- 内置 SQL 和 Python 运行时,支持自定义扩展,轻松写出高速录处理能力
- 本地规则引擎
- 通用的 source->target 转发模式
- Source 和 target 均支持消息主题、云主题和函数
端云一体化
在百度云来看,私有云虽然对很多场景和企业非常有用,但是私有云把企业的 IT 设施与公有云之间的关系进行隔离。我们都知道人类对于计算的需求是无穷无尽的,如果与云脱离连接,企业将会失去云带来成本节省的特性,所以私有云不是唯一的解决方案。真正的解决方案是将私有条件、私有环境与公有环境之间恰当连接,进行端云一体化。
在物联网环境当中,我们可以认为设备的增删改查、规则的创建和修改、函数的编写与测试不会严重危害安全,可以交由公有云,于是百度云提供了云端的管理,将边缘计算软件都到共享到同一个百度云,用户只需要在云上进行编写即可。但同时,由于数据隐私的需求、延迟的需求和带宽的限制,所有的计算应当发生在本地。
上图为百度云的端云一体化方案,通过点击进行下发,远程获得配置,保证用户数据安全。也正是经由端云的一体化,实现设备离线工作,在连接的瞬间设备自动与云进行必要的同步,通过规则确定什么样的数据与云同步,什么的样数据进行保留本地,以及升级提醒。
IntelliEdge 特性
第一,IntelliEdge 基于本地计算可以实现即时响应,消息产生可能只需要一毫秒。
第二,超轻量级,今天的物联网设备种类繁多,可能需要采购一台巨大的服务器,也可能是在家里用一个 PAD,但是 IntelliEdge 只需要一个 10mb 内存和磁盘,不会产生任何的外部依赖。
第三,超可移植,软件支持 Linux、Windows、MacOS,硬件支持 X86、arm、还有 mips。IntelliEdge 既可以在数字 PAD 低耗能运行,也可以在大工控机支持数十万的级的运算。
边缘计算的实现和设计
李乐丁在介绍百度智能边缘计算服务之外,还和大家分享百度边缘计算技术方面的问题,对如何做出一款 IntelliEdge 软件及架构的结构等进行了详细解读。
基础拓扑
首先,李乐丁认为架构师应该具备抽象能力,不应该先进入细节,而是要从最高层次审视业务的完成到底需要哪几个层面。在这里,百度云认为边缘计算由三个简单的部分组成,分别是设备、消息中转和应用。边缘计算在消息的中转服务中心完成消息通讯、路由转发,在应用里进行整理分析,进行函数计算。
设备鉴权
有了上面的基础架构,边缘计算就完成了 50%,那么怎么做到另外的 50% 呢?首先第一件事是安全,所有的软件第一步一定是安全。在设备鉴权中百度云采用了 MQTT 内部鉴权的功能,包括 Principal 和 ClientID 两部分,Principal 告诉你允许发布什么信息,收集什么信息,以及管理权限集合,即允许 PUB 和 SUB 的消息主题;ClientID 则代表设备名称,每一个 ClientID 代表一个实实在在的设备,或者是一个应用程序,同一个身份可以拥有不同的 ClientID,但是多个 Client 不能用同一个 ClientID 同时登陆。
消息中转
结果安全之后,下一步就是消息中转。这里需要面对 2×2 的情况,一是发布端负责发布消息,二是订阅端需要订阅消息。无论是发布还是订阅都有 QoS,由于低功耗设备或过载等问题,就会出现 QoS0,QoS0 意味着发消息是有丢弃的;有 QoS0 就有 QoS1,QoS1 表示发布重复,但不一定会丢。熟悉 MQTT 协议的开发者可能知道,MQTT 还有一个 QoS=2,语意是有且只有一次。这里之所以没有提到,是因为实际应用中仅有一次这样应用场景会使成本过高,以至于没有特别的应用使用。因此除了简化架构,更主要的是处理必要的工作,把 QoS2 暂时搁置。但是随着物联网的深入,QoS2 也会不断得到支持。
从架构的方面如何实现 2×2 的表格呢?虚线是消息的 Broker 代理器,当消息发布的时候,首先进入统一内存队列,之所以选择放到统一内存队列中有两个原因,第一降低系统消耗,第二提高性能。之后就是路由,它是一个内存队列,虽然可配但是有限,超出这个长度可直接丢弃,所以这里可以使得订阅段防止过载。另外消息可以写到重试队列,重试队列不断向 QoS1 发消息,直到确认收到消息。当 QoS1 确定消息后,依然进入内存队列,那么这里为什么选择先使用内存队列呢?如果将 QoS1 先分到内存队列,在宕机的时候可能使消息丢失,之所以选择承受这样的风险,是因为物联网设备可能安装在一个性能极低的情况下,这种情况下我们就必须使用内存队列。紧接着批量写入 KV 存储,主要原因也是为了轻量级,一旦进入 KV 存储,就保证数据落盘不会丢。然后进入路由系统,同样分为两个后端,一个是允许丢弃写出队列,另外一个是不允许丢弃的重试队列,通过这样的消息中转架构完成 2×2 的表格。
函数计算
这里引入函数计算的方式。将一个函数计算用 Runtiem 进行连接,发送到运行室,可以是 SQL、Python 或者是 ETC,之所以选择独立就是防止 Runtime 出现问题。然后用 STDIN 将消息反序列化,可以选择任意 OK 的序列化机制,通过反射的方式找到函数的处理器。经过计算之后,将计算结果再序列化,通过 STDOUT 写回消息终端,再传走,这就是函数计算。
资源控制
另外一个必要的事情就是资源控制,因为代码可能不是你写的,而是由第三方或者合作伙伴写的,这个代码可能存在缺陷,也可能占用巨大资源,怎么办呢?如何精确控制一次计算所占用的资源呢?百度利用 Linux Namespace。首先通过 Linux Namespace 进行网络隔离,然后依次通过 AUFS,Croups,经由网络转发大集群进行网络处理。
reload
边缘计算的设计和实现通过 Reload,有可变的过程和不变的过程。不变的是 Listener 可以持续发送消息,同时 Broker 可以继续工作,设备管理也会持续不变。可变的是什么?首先是鉴权,当你的新配置与原来的设备不想连接了,或者是你有新的设备连接,或者权限改变,鉴权也需要做出相应改变,这意味着有一些设备要丢掉。其次函数也会因为新的布局可能发生改变。再有路由的改变,在 App Old 的同时,建一个 APP New,把原来的服务转移到新的设备上,原来的就由 App New 处理,其他的用 App Old 处理,处理完之后再丢掉,通过这个较为平缓的 Reload,企业可以获得稳定的系统。
设计原则
百度云边缘计算有许多新的设计原则,比如:
- 软件不同于互联网产品,质量远重于效率
- 高移植性
- 物联网设备多样性程度很高,硬软件差异巨大
- 选择 Golang,纯静态编译消除外部依赖,内建交叉编译
- 强伸缩性
- 需横跨从树莓派、路由器到工控机和服务器的使用环境
- 响应和吞吐都不是必要的性能指标,可接受 GC,无需零成本抽象
- 利用语言内建的 M:N 线程模型
- 单机化
- 保持无状态性,将状态约束在最小化集合内
- 保留 P2P 形式的分布式扩展,广播同步路由表,互相传递消息
2 解析时序数据库的技术构建和行业应用
万物互联的时代是数据量激增的时代,每天要采集上亿级别的数据点,每月累要积至少百 G 数据量。如何实现 IoT 设备的高并发写入,如何在 TB 级别数据中秒级响应并画出变化曲线等,百度云物联网部高级产品经理黄淼做出了详细解答。
时序数据库
黄淼首先对时间序列数据的概念进行了解读,时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度。
时间序列数据特点
时间序列数据具备很多特点。以上图为例,第一个是写多读少,每 10 秒上载一个数据点,其中 90% 的场景是写的场景。第二个是读写正交,每一个黄点代表一个实时数据,写的时候往往是同一个时间戳将配电柜的电流、电压、功率都写进去,而读的时候最常见的场景是读取一段时间之间电压的值,将这些值做查询出来画一条曲线或者做聚合运算。第三个是新旧有别,分为热数据和冷数据,半年之内的数据一般会比较频繁的进行查询和计算操作,半年之外不会进行查询的数据一般会放到冷处理分析。第四个是极少删除,旧的数据不会删除,因为这个数据即使不做查询操作,也会存下来,对机器学习有很大帮助。第五个是一般以一定条件做聚合分析,比如对配电柜 2 的电流、电压、功率进行分析,会以配电柜 =2 作为条件,查询出来做聚合运算,。第六个是事务性弱,对于传统型关系型数据库来讲,事务性要求比较弱的。
百度云时序数据库(TSDB)
百度云 TSDB 给用户提供的服务分为三个层次。第一个是记录变化,也是数据库最朴素的职责,认认真真把每个数据记录下来,让用户业务产生的海量的数据存储好。不发生变化。这就需要 TSDB 做到高并发的写入、三备份保证可靠性、防 DDOS 攻击、冷热存储分离等。第二个是理解变化,TSDB 有极速的查询能力和每秒对亿级数据点聚合能力,都能帮助客户快速从 TSDB 的得到想要的数据;另外还支持 Web 图表可视化、还有 BI 工具。最后是唤醒变化,也叫赋能变化,进入到 TSDB 中的数据可以无缝对接百度大数据 AI 能力,帮助你在业务发挥更大的价值。
TSDB 技术发力点
作为一个技术产品,百度云 TSDB 给用户可靠性高、性能高的商业化产品,其中几个重要的技术方案如下:
- 存储。存储有两点,一点是采用分布式分片的存储,可以分成片,利用时序数据的特点,基于时间序列对数据进行分片存储。另一点是分级存储,将数据基于业务条件进行分析,比如把最近一天使用的数据放在 Cache 里,最近一年的数据放到 SSD 里,一年以上不是非常频繁查询的数据放到 HDD 里。进入了 Cache 的数据通过写回和写通策略写到 SSD 里面,而 SSD 的数据也可以定期迁移到 HDD 里。
- 压缩。压缩目标有两点,第一是降低成本,第二是无损压缩。数据如果不经过压缩存储的话,只是一个车厂用户每天就会产生上百 G 的数据,机器成本一定是很高的。所以要进行压缩处理,关于压缩要先明确两个前提,第一,不存在一个通用的压缩算法对所有字符串都能压缩;第二,不存在一个公式或者函数,告诉我们某一个字符串压缩到最短是多少个字符。这两个结论有严密的数学公式去论证,在这里不做赘述了,我们只要记住这两个结论。那么基于这两个结论呢,我们来看,对于我们的压缩会有什么挑战。首先,我们无法判断哪一个压缩算法是最优化的;其次在某些场景下一定会有不会被压缩的字符串存在。所以压缩是一件很有挑战的事情,其实越是有技术挑战越适合百度去做这件事情,因为百度在互联网和物联网时代都积累了大量的数据,我们对数据的含义是有深刻理解的。所以才会在不同的场景和数据形式中采用更合适的压缩方式,将压缩和存储效率提高,让我们在压缩这件么有最优解的事情上无限逼近极限。
- 查询。采用分片的方式,分为 ShardA、ShardB、ShardC 及 ShardD,根据分片的结果合成最后的值,可以达到尽可能让计算做到本地化和多并发的效果。
下面介绍几个 TSDB 的特色能力:
- 插值查询。针对网络带宽、计算性能等问题,用户以一定的频率上传值,通常是数据发生变化了才上报,所以 TSDB 提供不同的差值算法,将未上报的值补齐,按照多种算法补齐缺失数据,节省存储和上传的成本,并且不会损害数据价值。
- 预处理。TSDB 针对多种嵌套复杂查询场景,对返回时间提出较高要求,也可提前设置规则,自动聚合历史数据。
TSDB 案例
黄淼在演讲最后以电力服务公司为例,说明 TSDB 的工作流程。如图是一个采集电柜,把数据发到物接入,物接入是我们在云端做的数据接入消息的对外服务,可以接收海量大规模数据,接入以后经过云端的接收的能力,做流式计算,进行数据的过滤、变形、转发,经过规则引擎直接到 TSDB,形成可视化展示、用电分析、能耗管理、节能预测。这个架构解决了仅能查询 2 个月的热数据的问题,现在的时序数据库可以进行实时查询,半年的数据 2 秒以内返回。
3 百度云物可视的数据可视化实践之路
百度云“物可视”无缝对接海量实时数据,零编程设计可视化仪表盘,支持监控大屏展现,更有定制和嵌入功能,简化开发数据可视化应用。百度云物联网部前端开发工程师钟姿艳,现场演示仪表盘的制作、部署,并分享物可视解决方案的数据源与数据表创建。
数据可视化
数据可视化分为科学可视化、信息可视化、可视分析学三个学科方向,涉及信息技术、自然科学、统计分析、图形学等多种学科领域。此次讨论的数据可视化,主要是信息的可视化,即抽象数据的可视化交互表现,通过图形手段清晰传达有效信息。
物可视产品特色
物可视产品将可视化工具和 BI 工具进行结合,做出了一款拥有 PPT 交互和设计体验的数据驱动可视化产品。基于物可视的基本概念,对物可视的产品特色和优势进行详细的介绍:
- 实时展现数据的洞察。物可视支持多种数据接入,比如说静态的数据、数据库的数据、流式数据等,使数据传输具备更省流量和更低延时的特点。支持对基础图表的动态驱动,另外还支持每一种元素像形状、颜色以及文字各种实时展现。
- 丰富的可视化图表。可视化图表分为五种类型,第一类包含了折线图、柱状图、仪表指针、时间序列的图表等;第二类是百度地图,包括了设备的点迹、轨迹等;第三类是通用的组件,包括像图片、标签、副文本、图表等常用组件;第四类是基本的图形,包括了圆形、矩形、箭头等;第五类是组态图,包括阀门、管道、水泵等工业场景下的组态图。
- 应用与可视化的交互。物可视不仅提供了零编程大屏数据的搭建,而且还提供给开发者一个 JavaScript 运行库,以及配套的 JS API,帮助实现不同应用与可视化在同一页面中的各种复杂交互。
- 提高开发效率,10 分钟完成监控类的可视化应用开发,且提供更多功能适用定制场景 。
物可视适用场景
物可视是一款一站式的数据可视化开发工具,基于百度云天工平台,以可视化的形式将数据呈现给用户,那么在物联网中,物可视的数据可视化有哪些应用场景呢?
物可视可以做一些物联网设备的数据监控,例如电力公司,对电量设备进行数据监控;物可视还可以用来管理智能楼宇,比如说可以用来管理当前的温度、湿度、人流量等;在车联网的场景中,物可视可用来监控车辆的轨迹或者是物流的情况;也可以通过物可视做一个控制中心或者智慧社区的大屏展示。
物可视实操
钟姿艳结合实例现场给听众演示物可视的两大使用方法。第一是制作数据大屏,通过使用模板调整一些内容进行快捷的搭建,或者是可以从 0 到 1 在一个空白页面上搭建出一个自己喜爱的定制化数据可视化大屏。第二是通过制作仪表盘、物可视 js 包的引入及实现交互逻辑三个步骤将可视化的组件嵌入到 Web 应用中。
物可视还提供丰富的实例模板,以上图为例,这个模板可以适用于各种监控类的大屏。从左边开始,最上方是公司的 Logo 以及名称,下方用数字翻牌器对电量数据进行了放大的突出,往下是显示完成的进度,再往下是车间温度通过仪表指针检测位置,一旦发现有异常,可以在最下方展示区看到状态灯以及数字会相应变红,进行告警。中间是时间序列的图表,可以看到明显的走势情况。面积图反映了电量购买的一个趋势,下方的时序柱状图体现各个设备之间在同一时间的对比情况。右上角为一个时钟,还有销售数据的四个指标,最下面的图表可以清晰平铺一些重要的数据。
4 在未来
百度云天工作为物联网生态系统中重要的组成部分,对物联网生态系统有着很好的完善。与此同时,百度云天工「智能边缘」将使得云计算与最终用户联系更加紧密。百度云深知未来的趋势将是“大智能”在云中,“小智能”在边缘,逐步推出完整的「智能边缘」一栈式服务,助力客户打造边缘设备智能化。
评论