一、前言
不同的接入层
互联网的产品基本都需要解决终端的接入问题,每个接入层会因为终端数量、终端能力、网络环境等不同的因素有各自的设计特性,比如:淘宝网需要解决海量短连接问题、微信需要解决海量长连接问题,同时大家都要解决移动网络问题,那么阿里云IoT物联网接入层需要解决的是什么?在回答这个问题之前,先来看看物联网的特性
物的特性不同
"物"的种类非常多,应用场景、成本各不同,比如水表一般安装在户外,一般采用电池供电,这种设备对能耗的要求非常苛刻,比如基站铁塔的后备电源,一般安装在荒野,这种设备对网络的要求非常苛刻,比如开关,这种设备对存储、内存、cpu的要求非常苛刻,不同的"物"特性催生了不同的IoT接入层,下面来看看IoT接入层需要做什么?
二、IoT接入层需要解决什么问题?
2.1 接入层关键问题
针对这些设备特性,IoT接入层需要怎么来解决?
2.2 相同的问题,不同的解法

三、怎么解决这些问题,阿里云优势在哪里?
3.1 安全设计
对于系统设计来说,安全是基础,但又不能因为安全问题影响用户体验,需要在安全性和体验上找到平衡点,同时对于低功耗设备需要有不同的安全考量,那么阿里云IoT接入层是怎么来做的呢?
核心思想:通过三层安全防护机制 + 云端的安全风控模型来保证设备的安全性
三层防护机制
第一层:DDos 防护系统
基于阿里云强大、专业的DDos安全防护体系,防止IoT业务出现重大经济损失、数据泄露等问题,详细参考DDos防护。
第二层:通道安全
通过支持TLS、DTLS、X509、ID2 四种方式来解决通道的安全问题,同时针对低功耗设备,做了多个维度的优化
-
不同传输协议上的TLS:mqtt协议跑在TCP之上,而coap协议跑在UDP之上,针对不同的传输协议,IoT接入层分别实现了TLS、DTLS,用来解决不同协议的通道安全问题
-
流量维度:TLS认证流程中,需要把服务端证书传给设备端,大概消耗4K左右流量,同时要求设备支持非对称加密算法,对于某些低功耗设备来说,能耗、流量、加密能力都是有要求的,IoT接入层通过PSK技术,解决证书传输带来的流量消耗问题,同时解决非对称加密算法对cpu的性能损耗问题
注:ID2是阿里云安全团队实现的类TLS协议,能力跟X509的双向TLS对等,同时在双向认证的基础上,减少了设备证书的传输,适用于对安全等级要求较高、同时对设备流量有要求的场景。
第三层:设备身份授权及验证
阿里云IoT的设备身份叫三元组,由平台授权颁发的设备身份信息,每个设备全球唯一,在设备建立连接时,设备通过DeviceSecret加签设备信息,然后有平台对加签信息进行验证,用来完成设备登陆IoT平台,保障设备的安全性。
三元组指的是ProductKey、DeviceName、DeviceSecret的组合。
云端一体的安全风控体系
为了进一步提升设备的安全等级,阿里云IoT建立安全风控模型,针对设备暴力认证、设备恶意连接等行为,采取主动预警,快速阻断等措施,为设备安全保驾护航。比如某个设备不停的来认证,但是每次认证都是因为签名验证而失败,同时设备每次上传的签名又不同,根据这三个条件基本可以判定该设备存在暴力认证的行为。
3.2 网络优化
直连网络
不同的通信模组、不同的部署环境(电梯、地下车库、荒野),会导致各种不同的网络差异,给设备的连接稳定性带来风险,阿里云IoT针对这些问题是怎么来解决的?核心思路:让设备就近接入,同时提供稳定、高速的网络环境。阿里云IoT接入层通过部署多region(如下图)的方式来为用户提供就近接入的能力,通过BGP网络为设备提供稳定、高速的网络环境。
BGP网络有什么优势?

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

边缘网关
针对网关设备,如果子设备较多的情况下,会带来哪些问题?
大数据的上报的解决方案

阿里云IoT的网关技术方案核心技术点:
通过多通道解决了网关的海量数据上报问题、通道的热点问题,同时解决了通道容灾问题。
通过虚拟连接解决了子设备通道复用的问题,不需要为每个子设备建立一个TCP连接。
通过子设备和直连设备打平解决了各种运维的复杂性,子设备相当于一个直连设备。
子设备的登陆慢的解决方案
核心思想:优化登陆速度、减少离线次数、延迟离线时间+增量同步策略。
业务场景:针对不同的子设备数量,可以采取不同的策略,比如子设备在1000以内,可以只提升登陆速度就可以了,如果子设备在10w以上,建议多种策略配合,同时根据业务对设备的状态敏感度来定义这些策略,比如子设备全部下线了,业务都无所谓,那么建议网关按简单的来处理,串行/并行批量登陆都是可以的。
优化策略:
其他优化点
阿里云IoT接入层不尽对应用层做了很多积极的优化,同时对系统内核、CPU、网卡、TCP内存参数都做了优化,连针对防火墙、路由器等中间网络设备都专门做了优化。
3.3 架构设计
对于协议的选择,阿里云IoT采取的是标准化策略,通过标准化来解决设备之间的互通问题,通过标准化来解决设备接入平台的理解成本,标准的好处很多,不一一列举。这里主要讲讲多种标准协议和接入层怎么适配?怎么在系统发布时,设备做到无感?怎么让每个设备在连接层、协议层都做到连接高可用?
协议层和接入层适配
核心思想:接入层、协议层分离,让接入层更纯粹、让协议层支持更多的能力。接入层更纯粹指的是什么、协议层支持更多的能力是什么意思?
通过两层分离机制,让接入更稳定,同时让业务更快的迭代发展。
3.4 连接高可用
通用的高可用策略:副本、隔离、failover机制。副本是最常用的做法,对于连接来说,副本就是每个设备建立多通道,如果同一个设备有多个通信模组(比如:4G+wifi),阿里云IoT现在的策略是什么?隔离 + failover:
四、结尾
IoT接入层涉及的技术点非常多,上面只是针对3个核心的问题做了简单的介绍,后续会陆续展开介绍其关键点。比如:设备SDK是怎么设计的?统一接入层技术细节有哪些?整个接入层的高可用是怎么保障的等等。