0 前言
近年来,物联网技术正以指数级的速度日渐成熟,并潜移默化的改变着人们的生活。根据国际数据公司IDC的预测估计,到2025年,将有416亿台联网的IoT设备或“物”,生成79.4 ZB的数据。同时IDC中国研究数据显示,2020年全球物联网支出达到6904.7亿美元,其中中国市场占比23.6%。IDC预测,到2025年全球物联网市场将达到1.1万亿美元,年均复合增长11.4%,其中中国市场占比将提升到25.9%,物联网市场规模全球第一。
阿里云企业物联网平台是基于阿里云的基础架构,提供设备接入、设备管理、监控运维、数据流转、数据管理、处理分析等物联网构建能力,协助企业在数字化转型时拥有更完整的生产资料。而对于第一步设备如何快速上云并且实现全球就近接入尤其重要,下面笔者将详细介绍阿里云物联网平台的设备分发服务是如何实现设备全球快速就近接入的。
1 名词解释
物联网平台:是阿里云的一个物联网管理平台,为设备提供安全可靠的连接通信能力和管理能力,支持设备数据采集上云,规则引擎流转数据和云端数据下发设备端。
Alink通信协议:Alink协议是阿里云物联网平台的通信协议,该协议使设备与云端拥有上下行指令接受与下发的能力,并且为设备端与云端提供上下行通信的信道。
设备三元组:每台设备拥有productKey(产品标识),pruductSecret(产品秘钥),deviceName(设备名称标识),deviceSecret(设备秘钥),productKey和deviceName唯一标识一台设备,即一个产品下可以有多台设备。我们通常称productKey、deviceName和deviceSecret为设备的三元组信息。
设备接入点:设备连云需要指定接入点,接入点包含实例id信息${instanceId}.mqtt.iothub.aliyuncs.com
实例:物联网平台的产品模式,用户以实例的形式购买,可以分为独享实例(独享的计算资源)和公共实例(和其它租户共享的计算资源)
Bootstrap:设备引导服务
IHV(Independent Hardware Vendor):独立硬件开发商
ISV(Independent Software Vendors):独立软件开发商
SI(Service Integrator):服务集成商
2 当前面临的问题
物联网平台的设备分发服务要解决什么问题?先来看如下两个典型的业务场景:
场景一
用户软硬分离,IHV需要将设备交付给SI/ISV管理:IHV对设备进行建模和开发,并线下量产设备;ISV/SI在阿里云物联网平台批量生成设备三元组信息;ISV/SI线下向IHV购买设备,同时把自己实例下创建的三元组信息和设备接入接入点信息提供给IHV;IHV用上一步骤的三元组和实例信息烧录设备,并交付设备给ISV/SI;ISV/SI集成软件并部署使用设备。当前的场景存在的问题:
- 由于设备开发者和设备使用者(ISV/SI)在不同的实例下,而设备接入又要烧录目标的实例id接入点,导致设备开发者无法提前备货提前将三元组和连接点信息进行烧录,需要用户下单后才能拿到设备真正要接入的实例信息;
- 由于设备要交付给最终的使用者(ISV/SI)所在的实例进行管理,所以设备使用者需要在自己的实例内生成设备三元组并提供实例id信息给设备开发者烧录,最终设备数据才能在所在实例进行管理,操作繁琐;
场景二
厂商是软硬一体的开发者,可以自己开发设备并集成软件。厂商在自己的实例内生成的设备三元组信息,同时产线烧录三元组信息和实例接入点信息,然后将设备卖给C类用户,设备可能被用户带到不同的国家进行使用。当前的场景也存在一些问题:
- 厂商的三元组信息是在指定的实例下生成的,也就是这一批设备烧录的是一个固定的实例接入点,如果用户把设备带到不同的国家,那么设备只能接入烧录的指定接入点,无法就近选择机房,就会导致设备和云端通信延迟增加;
- 由于设备会被用户带到不同的国家使用,但是设备连接的始终是一个实例的数据中心,所以也可能存在数据合规问题;
3 如何解决这些问题
抽象一下我们要解决的三个问题:
- 解决设备跨实例跨region跨租户的归属:由于物联网的复杂场景,设备的开发者和使用者往往不是同一个用户,需要提供一种方式解决跨实例跨region的设备归属问题;
- 设备可以提前烧录备货:无需在设备出厂时对不同region和不同实例的连接信息进行硬编码,设备统一烧录全球统一接入点信息即可(无region信息),解决设备提前备货;
- 设备可以全球就近低延时的接入:由于设备可能被用户带到任意region,希望设备可以连接到就近region的阿里云物联网平台的用户实例下,避免数据合规和连接指定烧录实例接入点造成的高延时问题。
针对于以上三个问题,阿里云物联网平台提出了设备分发的概念:物联网平台通过设备分发实现设备跨地域、跨实例或跨账号的分发。分发后,云端下发新的连接地址给设备,设备本地固化收到的信息之后,直接连接新的地址,免去二次烧录设备信息。设备分发主要解决的就是两个问题:设备的全球接入,设备的归属关系。
先来看一下设备分发服务的整体架构:
物联网平台在全球8个region部有中心机房,设备分发服务整体上是分为两个阶段的:
- 配置阶段:用户通过开放接口或者控制台对要分发的设备进行信息配置;
- 接入阶段:设备通过Bootstrap引导服务上云,触发配置,完成接入;
下面将具体看一下上述提出的三个问题是如何解决的:
- 设备跨实例跨region跨租户的归属问题
而设备分发服务的第一个任务就是打通了阿里云内部的所有网络环境,对用户只暴露实例间的操作屏蔽底层复杂的网络和隔离策略。对于跨账号的操作,分发服务采用短信鉴权,并打通了国内站和国际站间账号的操作,用户只需要关心要分发到哪个账号下的哪个实例即可。
网络打通后就是如何在这个链路上实现数据高可靠的传输,由于跨region和跨库的数据访问可能会遭遇网络抖动或中间件访问超时等异常流;针对这些问题,系统除了有异常自动重试策略外还在业务上做了跨库的事务回滚,最大程度上保证业务数据的一致性。
由于设备数据的分发操作都是采用长任务进行处理,所以为了防止服务器宕机或者重启导致的任务中断,系统内置了故障转移机制,来保证任务一定会走到状态机终态,其核心思路就是采用心跳包和单机定时检测(quartz)来实现服务器的故障转移。下图演示了server1接收请求并,如果出现故障,是如何转移到server2当中的。
- 设备提前烧录备货问题
由于上云需要指定实例的接入点,所以对于设备不确定交由给哪个企业实例用户连接哪个企业实例的场景就没有办法提前烧录接入点,提前备货。
所以对于设备端通过烧录的global域名可以去中心环境请求分发服务,设备通过请求分发中心的bootstrap服务,该服务会返回设备引导信息,包含设备真正要接入的物联网平台实例的接入点信息,设备拿到目标接入点通过mqtt直连即可连接到目标用户的实例即可。
考虑设备还可能发生重配的情况,即设备已经连接在目标实例,但是用户在控制台重新配置了设备的目标实例接入点,这时候如果设备已经连云处于在线状态,服务端会推送一条mqtt消息给设备,告诉设备的接入信息发生变化请重新连接。如果设备不在线用户重配后,设备建连仍然走下面的流程依旧可以连接到目标实例。
- 设备全球就近低延时的接入问题
对于分发设备的接入策略服务端提供两种:指定地域和就近接入。这两种有各自的使用场景,对于指定地域策略如果用户明确设备要分发到哪个实例下使用可以选择指定地域策略,设备可以选择配置到指定实例进行接入,典型的场景是设备开发商在自己的实例下量产设备,然后将设备分发到渠道商的实例下,设备的目标实例是固定的,而且希望只连接在固定的实例下。
对于就近接入策略,例如设备厂商是软硬一体的,在指定的实例开发并量产了设备,但是设备售卖到C端用户手中会被用户带到全球任意region使用,这时设备厂商可以在物联网平台支持的每一个region购买一个实例,并配置就近接入策略,这样设备在移动到特定region请求bootstrap服务的时候,分发服务会根据设备的出口ip信息,动态的将设备身份分发到就近region用户的实例下进行连接。
设备只需要烧录一个全球域名iot-auth-global.aliyuncs.com,在解决了就近接入的同时,分发服务配置了ADNS智能域名解析。实现了全球就近低延时接入目标实例。
4 产品特性
- 万级设备可以实现跨账号、跨实例、跨region在阿里云各物联网平台任意的分发;同时平台对分发的设备提供了多种数据高可靠的保障策略;
- 提供多种分发策略,满足不同业务场景的需求;
- 设备bootstrap服务接入无额外鉴权,简化了设备接入流程;
- 一次配置,设备就可以实现低延时的全球就近接入;