IoT亿级设备接入层建设实践

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 互联网的产品基本都需要解决终端的接入问题,每个接入层会因为终端数量、终端能力、网络环境等不同的因素有各自的设计特性。物联网场景下由于IoT设备的特点,不同的"物"特性催生了不同的IoT接入层。本文详细介绍了阿里云IoT在接入层的一些关键策略和设计。

一、前言

不同的接入层

互联网的产品基本都需要解决终端的接入问题,每个接入层会因为终端数量、终端能力、网络环境等不同的因素有各自的设计特性,比如:淘宝网需要解决海量短连接问题、微信需要解决海量长连接问题,同时大家都要解决移动网络问题,那么阿里云IoT物联网接入层需要解决的是什么?在回答这个问题之前,先来看看物联网的特性


物的特性

既然要解决"物"的问题,那么首先需要了解"物",先来看看这些"物"包括哪些,这些物有什么特性?

  • 居家类:电视机、音箱、开关、灯泡,空调、洗衣机等
  • 基础设施类:水表、电表、燃气表等
  • 工业场景:产品信息、质量信息、设备能耗信息等
  • 安防类:摄像头、门磁、烟感等
  • 其他:汽车、手表、眼镜、单车、门锁、充电宝、起搏器等

"物"的种类非常多,应用场景、成本各不同,比如水表一般安装在户外,一般采用电池供电,这种设备对能耗的要求非常苛刻,比如基站铁塔的后备电源,一般安装在荒野,这种设备对网络的要求非常苛刻,比如开关,这种设备对存储、内存、cpu的要求非常苛刻,不同的"物"特性催生了不同的IoT接入层,下面来看看IoT接入层需要做什么?

二、IoT接入层需要解决什么问题?

2.1 接入层关键问题


通用接入层需要解决的问题

  • 安全性:通道安全、身份安全、数据安全
  • 连接方式:采用TCP、UDP,使用长连接还是短连接?
  • 协议选择:http协议、protobuf协议、mqtt、coap、私有协议等
  • 网络问题:就近接入/就快接入、系统及TCP/IP协议内核参数的调优等
  • 海量连接问题:当海量连接在线时,怎么保障系统的可用性?


IoT接入层有什么不同

特性:多样性、碎片化

针对这些设备特性,IoT接入层需要怎么来解决?

2.3 相同的问题,不同的解法

  • 安全性:各种设备都联网后,设备将在我们的生活中更加根深蒂固,给安全带来更大的挑战,比如:汽车、门锁、起搏器等收到安全攻击,那么用户的隐私、财产、生命都会带来严重的威胁。IoT场景下很多设备对存储、内存、cpu、网络都有要求,那么在设计安全时,就不能简单的通过加强加密的安全方法来解决这个问题,因为它们执行复杂加密和解密的速度不足以让它们实时安全地传输数据。IoT接入层既要考虑安全性,又要对受限设备做妥协,需要怎么去平衡两者的需求?


  • 网络问题:IoT场景下的网络更加复杂,通信层面包括有广域网技术:GPRS/4G/5G/Lora/NB-IoT等,有局域网技术:Ble、ZigBee等,不同的通信模组会有不同的网络质量,怎么来保障网络稳定性,网络RT是非常关键的点。IoT场景下很多设备只能采用局域网通信技术,这类设备不能直接上网,需要边缘网关来代理上网,针对边缘网关的场景,接入层需要怎么设计?一个边缘网关下面可能挂了几万个设备,如果一个通道来处理的话,怎么解决单通道的拥塞问题以及单通道的热点问题?如果多通道来处理,这些通道之间怎么建立网络拓扑模型?    


  • 协议选择:一般的接入层只会选择一种协议(比如淘宝的http、钉钉的lwp、微信的私有协议),但是IoT不同,它需要支持多种协议,支持这么多协议,就是为了解决不同的业务场景,比如业务场景会主动给设备推送消息(共享充电宝、共享自行车等),那么需要使用tcp长连接来解决,这种情况下采用mqtt+tcp协议会比较合理。比如业务只需要设备上报消息(水表、电表等),不需要发控制指令给设备,那么采用coap的udp短连接就比较合适,既能省能耗,又能省流量。比如业务需要在浏览器上使用,那么http的tcp短连接就比较合适,天然的适配。比如业务已经有大量存量设备,同时采用了私有协议,连接了自建的平台,但是现在又想要接入阿里云IoT平台,使用平台各种能力(数据分析、监控、生态等),那么采用泛发接入是比较合理的做法,通过泛发协议把私有协议转成标准协议,设备不需要改动,只要在自建平台做个适配层就可以了。


三、怎么解决IoT的接入问题,阿里云的优势在哪里?

3.1 安全设计

对于系统设计来说,安全是基础,但又不能因为安全问题影响用户体验,需要在安全性和体验上找到平衡点,同时对于低功耗设备需要有不同的安全考量,那么阿里云IoT接入层是怎么来做的呢?

核心思想:通过三层安全防护机制 + 云端的安全风控模型来保证设备的安全性


三层防护机制

第一层:DDos 防护系统

基于阿里云强大、专业的DDos安全防护体系,防止IoT业务出现重大经济损失、数据泄露等问题,详细参考DDos防护


第二层:通道安全

通过支持TLS、DTLS、X509、ID2 四种方式来解决通道的安全问题,同时针对低功耗设备,做了多个维度的优化

  • 不同传输协议上的TLS:mqtt协议跑在TCP之上,而coap协议跑在UDP之上,针对不同的传输协议,IoT接入层分别实现了TLS、DTLS,用来解决不同协议的通道安全问题
  • 流量维度:TLS认证流程中,需要把服务端证书传给设备端,大概消耗4K左右流量,同时要求设备支持非对称加密算法,对于某些低功耗设备来说,能耗、流量、加密能力都是有要求的,IoT接入层通过PSK技术,解决证书传输带来的流量消耗问题,同时解决非对称加密算法对cpu的性能损耗问题
  • RTT减少1次:TLS的握手需要2次RTT,正常公网的RT 50毫秒,两次RTT需要消耗100毫秒时间,为了减少网络交互次数,IoT接入层实现了sessionTicket技术,利用sessionTicket的复用能力来减少通道建立过程中的RTT次数,同时也去掉了证书传输和非对称加密


注:ID2是阿里云安全团队实现的类TLS协议,能力跟X509的双向TLS对等,同时在双向认证的基础上,减少了设备证书的传输,适用于对安全等级要求较高、同时对设备流量有要求的场景。


第三层:设备身份授权及验证

阿里云IoT的设备身份叫三元组,由平台授权颁发的设备身份信息,每个设备全球唯一,在设备建立连接时,设备通过DeviceSecret加签设备信息,然后有平台对加签信息进行验证,用来完成设备登陆IoT平台,保障设备的安全性。


三元组指的是ProductKeyDeviceNameDeviceSecret的组合。

  • ProductKey:是物联网平台为产品颁发的全局唯一标识。
  • DeviceName:在注册设备时,自定义的或系统生成的设备名称,具备产品维度内的唯一性。
  • DeviceSecret:物联网平台为设备颁发的设备密钥,和DeviceName成对出现。

云端一体的安全风控体系

为了进一步提升设备的安全等级,阿里云IoT建立安全风控模型,针对设备暴力认证、设备恶意连接等行为,采取主动预警,快速阻断等措施,为设备安全保驾护航。比如某个设备不停的来认证,但是每次认证都是因为签名验证而失败,同时设备每次上传的签名又不同,根据这三个条件基本可以判定该设备存在暴力认证的行为。


3.2 网络优化


直连网络

不同的通信模组(GRPS/3G/4G/5G、Ble/ZigBee),不同的部署环境(电梯、地下车库、荒野),会导致各种不同的网络差异,给设备的连接稳定性带来风险,阿里云IoT针对这些问题,是怎么来解决的?核心思路:让设备就近接入,同时提供稳定、高速的网络环境。阿里云IoT接入层通过部署多region(如下图)的方式来为用户提供就近接入的能力,通过BGP网络为设备提供稳定、高速的网络环境。


BGP网络有什么优势?
  • 消除南北访问障碍。由于BGP可以将联通、电信、移动等运营商的线路“合并”,使得中国南北无障碍通讯成为可能。对接入层来说,可使“联通、电信”这类区别消失,更能使一个网站资源无限制的在全国范围内无障碍访问,而不需要在异地部署VPN或者异地加速站来实现异地无障碍访问。
  • 高速互联互通。原来一条线路访问另一线路往往要经过很多层路由,但实现BGP以后就像进入了高速公路。
  • 质量最好的网络:从运营商网络质量来看,BGP带宽是中国内地地域目前最昂贵的、线路质量也是最好的线路。对于延迟要求比较苛刻的业务可以使用BGP线路来解决。


就近接入

先来看看用户怎么就近接入?分两种情况:

  • 设备使用的区域确定:设备厂商在生产设备时,已经知道设备需要卖到哪些地方,对于这类情况,设备直接写死就近的region接入地址就可以了。
  • 设备使用的区域未定:设备在生产时,并不清楚设备在哪个区域使用?这种情况肯定不能直接写死一个接入地址了,这种情况下,首先需要解决的是设备的区域归属问题,解决这个问题有两种方式:一种方式是让用户指定设备的归属地,这种方式比较普遍,比如买苹果产品时,不管iphone,ipad都会在设备初始化时要求设定一个归属地,还有一种是根据设备IP地址来判定,可以做到无人工干预,完全自动化,但因为IP库存在一定的误差,这种自动化同时也会带来归属地判定的错误。


那么阿里云IoT针对这两种归属地判定场景做了什么优化?

  • 用户指定归属地:用户可以在配网的时候设置归属地到设备里,也可以在阿里云IoT平台提前预置设备的归属地,设备只需要在接入IoT平台之前去设备引导服务获取就近接入点地址就可以了。 这里有个问题:去哪里获取设备接入点地址?阿里云IoT只部署一个中心,然后通过全球设备引导服务中心+加速通道+智能域名来解决这个问题。
  • 自动判定设备归属地:为了减少IP判定带来的误差,阿里云IoT支持产品的多区域指定能力,比如可以指定设备可能会在新加坡,上海、美东等地使用,然后动态的根据IP+设定区域来判定设备归属地,这样的精度就会有明显的提升。


region覆盖不到的区域的网络优化方案

阿里云IoT通过多region部署来满足设备的就近接入,但是region数量有限(部署region的代价较大),不能解决一些偏远地区的网络问题,IoT接入将通过部署前置节点 + 智能动态路由能力来解决这个问题。比如把IoT前置接入点(不需要部署整个region)部署在离偏远地区最近的机房,然后通过该前置接入点代理设备登陆到指定的region中,然后在前置接入点跟指定region部署加速通道,这样就能解决这些偏远地区设备的网络问题。        


边缘网关

针对网关设备,如果子设备较多的情况下,会带来哪些问题?

  • 网关下有10w个子设备,同时每个子设备定时数据上报,需要怎么设计?
  • 网关下的10w个子设备,因为网关下线,全部需要断线重连,需要怎么保障子设备快速上线?

大数据的上报的解决方案

阿里云IoT的网关技术方案核心技术点:

  • 多通道:一个网关有多条物理TCP连接,每个物理连接等价,网关可以往任意一个物理连接发送或者接受数据
  • 子设备虚拟连接:网关代理子设备上线,每个子设备对应一个虚拟连接的session
  • 子设备&自连设备打平:服务器对子设备跟直连设备等同处理,唯一差别就是直连设备有独立channel,子设备是共享物理channel,这样设计便于设备的各种运维操作

通过多通道解决了网关的海量数据上报问题、通道的热点问题,同时解决了通道容灾问题。

通过虚拟连接解决了子设备通道复用的问题,不需要为每个子设备建立一个TCP连接。

通过子设备和直连设备打平解决了各种运维的复杂性,子设备相当于一个直连设备。

子设备的登陆慢的解决方案

核心思想:优化登陆速度、减少离线次数、延迟离线时间+增量同步策略。

业务场景:针对不同的子设备数量,可以采取不同的策略,比如子设备在1000以内,可以只提升登陆速度就可以了,如果子设备在10w以上,建议多种策略配合,同时根据业务对设备的状态敏感度来定义这些策略,比如子设备全部下线了,业务都无所谓,那么建议网关按简单的来处理,串行/并行批量登陆都是可以的。

优化策略:

  • 提升登陆速度:通过并发批量登陆来解决。
  • 减少离线次数:首先需要定义网关离线,只有网关的全部通道都断开了,才认为网关断开,这样可以通过多通道的模式来减少网关的离线次数。
  • 延迟离线时间+增量同步策略:服务端只有在网关离线一段时间后,才会把所有子设备下线,如果网关在这个时间段内重新登陆,那么网关只需要登陆/离线在这个时间内有变动的子设备。


其他优化点

阿里云IoT接入层不尽对应用层做了很多积极的优化,同时对系统内核、CPU、网卡、TCP内存参数都做了优化,连针对防火墙、路由器等中间网络设备都专门做了优化

TCP/IP内核参数优化
  • TCP三次握手的优化:半连接队列、全连接断链、syn重试策略、syn+ack重试策略、fastopen等
  • TCP传输的优化:初始窗口大小优化、tcp内存优化、支持缓冲区的动态调整、快速重传策略等
  • TCP四次挥手的优化:主要是针对time_wait状态的优化、孤儿连接优化
系统优化
  • 网卡队列大小优化
  • 利用reuseport来提升TCP建连性能
针对防火墙的优化
  • 对于mqtt的1883端口,有些防火墙可能会阻断连接,阿里云IoT通过支持443端口来绕过这个问题
针对路由器的优化
  • 对于一些非标的路由器,可能不支持分片,因为MSS报文太大而被这些中间路由器丢弃,导致设备连接不上或发送数据异常,阿里云IoT通过优化MTU大小来解决这个问题


3.3 架构设计

对于协议的选择,阿里云IoT采取的是标准化策略,通过标准化来解决设备之间的互通问题,通过标准化来解决设备接入平台的理解成本,标准的好处很多,不一一列举。这里主要讲讲多种标准协议和接入层怎么适配?怎么在系统发布时,设备做到无感?怎么让每个设备在连接层、协议层都做到连接高可用?


协议层和接入层适配

核心思想:接入层、协议层分离,让接入层更纯粹、让协议层支持更多的能力。接入层更纯粹指的是什么、协议层支持更多的能力是什么意思?


  • 接入层更纯粹:让接入层只做接入的事情,包括:基础网络优化、智能路由、TLS卸载、证书管理、限流等,这样做的好处很明显,接入层只有基础能力,不支持任何业务特性,没有业务特性也意味着减少系统变更,减少了系统变更意味着更加稳定(据统计80%以上的故障都是变更引起的),同时为了解决接入层发布带来的设备批量断连问题,阿里云IoT接入层支持二进制热更新能力,在接入层发布过程中,可以不断开设备连接,同时为了让设备更快的体验新能力,可控的触发设备重连(比如针对连接一直稳定的设备,在发布新功能后,让设备在低峰期慢慢的重连),通过不同的组合策略,让设备连接更稳定。


  • 标准协议层支持更多的能力:这里的能力指的是在协议层上做的各种业务特性,同时也包括协议本身的扩充能力。业务特性包括实例逻辑隔离、实例规格能力限制等,协议的扩充:比如mqtt 3.1通过pub、sub来模拟通用的RPC能力(解决用户控制设备的能力,比如用户通过手机借用共享充电宝的业务),通过clientId字段打标来支持payload的解压缩能力,通过压缩能力减少设备的流量,通过智能心跳机制减少心跳报的发送。


通过两层分离机制,让接入更稳定,同时让业务更快的迭代发展。

3.4 连接高可用

通用的高可用策略:副本、隔离、failover机制。副本是最常用的做法,对于连接来说,副本就是每个设备建立多通道,如果同一个设备有多个通信模组(比如:4G+wifi),还可以根据不同的模组建通道,这个成本对于设备端和服务端来说都会比较高,想做成通用比较麻烦,但是对于边缘网关设备确实可能会有这种业务场景,后续我们会支持起来,那么阿里云IoT现在的策略是什么?隔离 + failover

  • 连接型实例的物理隔离(隔离):提供连接型实例,让设备可以独占物理资源,在物理上做到实例的连接完全隔离。
  • 设备端重试(failover):提供SDK支持设备快速重连能力,同时支持重连的指数退避策略,防止因为服务本身问题而不停的重连,导致设备资源的消耗。
  • 每个设备独享一条通道(隔离+failover):设备<-->接入层<-->协议层,这三者之间一一对应,这样做的目的是每个设备的连接不会相互影响,在该连接通道上的消息上下行全部隔离。接入层<-->协议层之间也支持了failover能力,比如当协议层应用发布时,接入层会自动把该通道1-1恢复到另一台协议层上,做到了设备无感知。


四、结尾

IoT接入层涉及的技术点非常多,上面只是针对3个核心的问题做了简单的介绍,后续会陆续展开介绍其关键点。 比如:设备SDK是怎么设计的?统一接入层技术细节有哪些?整个接入层的高可用是怎么保障的等等,

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
1月前
|
存储 JSON 运维
智能物联网平台:Azure IoT Hub在设备管理中的实践
【10月更文挑战第26天】随着物联网技术的发展,Azure IoT Hub成为企业管理和连接数百万台设备的强大平台。本文介绍Azure IoT Hub的设备管理功能,包括设备注册、设备孪生、直接方法和监控诊断,并通过示例代码展示其应用。
69 4
|
2月前
|
人工智能 安全 物联网
|
4月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
当今社会,物联网技术的发展带来了许多繁琐的挑战,尤其是在数据库管理系统领域,比如实时整合海量数据、处理流中的事件以及处理数据的安全性。例如,应用于智能城市的基于物联网的交通传感器可以实时生成大量的交通数据。据估计,未来5年,物联网设备的数量将达数万亿。物联网产生大量的数据,包括流数据、时间序列数据、RFID数据、传感数据等。要有效地管理这些数据,就需要使用数据库。数据库在充分处理物联网数据方面扮演着非常重要的角色。因此,适当的数据库与适当的平台同等重要。由于物联网在世界上不同的环境中运行,选择合适的数据库变得非常重要。 原创文字,IoTDB 社区可进行使用与传播 一、什么是IoTDB 我
189 9
Apache IoTDB进行IoT相关开发实践
|
4月前
|
存储 监控 安全
使用IoT设备优化家庭生活的技术探索
【8月更文挑战第4天】IoT设备以其智能化、便捷性和高效性,正逐步成为现代家庭不可或缺的一部分。从智能照明到智能安防,从智能恒温器到智能厨房,再到智能语音助手,这些设备不仅优化了我们的家庭生活,还提升了我们的生活质量和幸福感。随着技术的不断进步和应用场景的不断拓展,我们有理由相信,未来的智能家居将会更加智能、更加人性化,为我们的生活带来更多惊喜和便利。
|
3月前
|
机器学习/深度学习 人工智能 算法
物联网(IoT)就像是一个大型派对,无数的设备都在欢快地交流着信息
【9月更文挑战第4天】在这个万物互联的时代,物联网(IoT)犹如一场盛大的派对,各类设备欢聚一堂。然而,如何让这些设备互相理解并协同工作呢?这就需要机器学习与人工智能的助力。例如,智能空调通过学习你的使用习惯来调节温度,使你更加舒适;智能安防系统则能识别异常行为并及时报警,保障家庭安全。此外,智能农业、交通等领域也因机器学习和人工智能的应用变得更加高效。下面通过一个简单的温度预测代码示例,展示机器学习在物联网中的实际应用,让我们一起感受其强大潜力。
69 0
|
5月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
IoTDB是专为物联网(IoT)设计的开源时间序列数据库,提供数据收集、存储、管理和分析。它支持高效的数据写入、查询,适用于处理大规模物联网数据,包括流数据、时间序列等。IoTDB采用轻量级架构,可与Hadoop和Spark集成,支持多种存储策略,确保数据安全和高可用性。此外,它还具有InfluxDB协议适配器,允许无缝迁移和兼容InfluxDB的API和查询语法,简化物联网项目的数据管理。随着物联网设备数量的快速增长,选择适合的数据库如IoTDB对于数据管理和分析至关重要。
262 12
|
5月前
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
The article introduces IoTDB, an open-source time-series database designed for efficient management of IoT-generated data. It addresses challenges like real-time integration of massive datasets and security. IoTDB supports high-performance storage,
152 0
Apache IoTDB进行IoT相关开发实践
|
4月前
|
存储 SQL JSON
【Azure IoT Hub】从设备端如何向IOT发送海量数据,可以使用从设备到IoT连接的直接传输吗?如何把IoT Hub中的数据存储到Azure Storage中?
【Azure IoT Hub】从设备端如何向IOT发送海量数据,可以使用从设备到IoT连接的直接传输吗?如何把IoT Hub中的数据存储到Azure Storage中?
|
5月前
|
分布式计算 NoSQL 物联网
麻省理工IOT教授撰写的1058页Python程序设计人工智能实践手册!
Python是世界上最流行的语言之一,也是编程语言中使用人数增长最快的一种。 开发者经常会很快地发现自己喜欢Python。他们会欣赏Python的表达力、可读性、简洁性和交互性,也会喜欢开源软件开发环境,这个开源环境正在为广泛的应用领域提供快速增长的可重用软件基础。 几十年来,一些趋势已经强有力地显现出来。计算机硬件已经迅速变得更快、更便宜、更小;互联网带宽已经迅速变得越来越大,同时也越来越便宜;优质的计算机软件已经变得越来越丰富,并且通过“开源”方式免费或几乎免费;很快,“物联网”将连接数以百亿计的各种可想象的设备。这将导致以快速增长的速度和数量生成大量数据。 在今天的计算技术中,最新的创新
|
5月前
|
分布式计算 NoSQL 物联网
麻省理工IOT教授撰写的1058页Python程序设计人工智能实践手册!
Python是世界上最流行的语言之一,也是编程语言中使用人数增长最快的一种。 开发者经常会很快地发现自己喜欢Python。他们会欣赏Python的表达力、可读性、简洁性和交互性,也会喜欢开源软件开发环境,这个开源环境正在为广泛的应用领域提供快速增长的可重用软件基础。