全球行业数字化转型的浪潮孕育兴起,掀起了新一轮行业变革浪潮。这一波浪潮的显著特点是将“物”纳入智能互联,触发技术服务模式创新,并对价值链、供应链和行业生态产生深远影响。然而,物联网是一个庞大而复杂的系统,行业不同,应用场景及其应用诉求各异。如何解决海量终端的联接和管理、海量数据的实时分析和处理,是实现“万物互联”的现实难题。
2016 年,腾讯云基于自身丰富的开发经验,整合内部技术,开始布局行业物联网解决方案,历经两年探索,逐步迭代发布了物联网基础套件和一站式物联网开发平台,并在消费、工业、城市等不同领域输出了较为完整的物联方案体系。
5 月 23 日的腾讯云云 + 未来峰会上,腾讯云正式发布其基于边缘计算的物联网平台 IoT Suite,本文通过对腾讯云物联网云平台介绍及其边缘计算的实现原理,深入浅出腾讯云“两端一云”的物联网解决方案。
边缘计算,是一种分散式运算的架构,它将应用程序、数据资料与服务的运算,由网络中心节点,移往网络逻辑上的边缘节点来处理。边缘运算将原本完全由中心节点处理大型服务加以分解,切割成更小与更容易管理的部分,分散到边缘节点去处理。
基于边缘计算物联网解决方案,从架构上可以分为:传感控制层、网络层、敏捷控制器和应用层。
- 传感控制层:包含大量的传感器、控制部件(比如开关等)和测量部件(比如电表等),另外还有通信部件。这些通信部件可能是独立的,也可能是和其它部件结合在一起的。
- 网络层:主要实现融合和互联,它的功能除了网络联接和管理之外,还包括边缘计算,进行现场处理,同时保障业务在本地的存活。本地存活和现场处理对物联网尤其是工业和民用大型设施是非常重要的。此外,协议转换也是这一层的重要功能。在 IoT 领域有特别多的协议,这些协议来自于各个行业历史上的积累,所以需要在网关上做协议的转换,将数据统一承载在 IP 网络上向外传输。
- 敏捷控制器:将网关送上来的数据进行统一的处理,向上送给应用层。并对下层的网络、传感器、控制部件、测量部件、计算资源进行管理,提供网络布署、配置的自动化工具。
- 业务应用层:集成各种行业应用。
万物互联的蓬勃发展,互联网接入的用户和设备越来越多,无论是个人用户,还是物联网接入设备,每时每刻都在产生大量的数据。数据量不断增多的情况下,同时要求对于设备的响应、本身的计算能力越来越强。基于传统设备连接中央服务器,网络延迟和带宽会产生巨大成本,设备无法通过网络即时连接到云和中央服务器。
为了解决上述问题,腾讯云提出了“两端一云”的物联网解决方案 IoT Suite,帮助实现设备的快速物联网化。同时,平台提供标准 TLS1.2、双向认证保护设备与云端通道安全,对于计算能力偏弱的设备,采用动态令牌,实现一机一钥的能力,完成设备端 - 云 - 应用端的双向安全通信。
如上图所示,腾讯云物联网平台整体包括三层架构,包括平台核心处理层,设备连接层以及应用连接层。平台核心处理层提供统一的云端中控管理平台,提供包括数据模版,日志存储,影子服务,规则引擎等功能。设备连接层和应用连接层通过开放的 APIs 提供封装的固件 SDK 和应用 SDK,向上集成不同行业应用,向下连接各种传感器、终端和中控网关设备,完成跨硬件设备接入。
整个平台提供的开发支持,包括设备端的嵌入式固件 SDK,云端开放式 API 接口,以及用户应用端的集成式 SDK 等。设备与云之间的通讯平台封装了标准的 MQTT、CoAP、HTTP 等不同的通讯协议,支持 2G/4G/NB/lora/wifi 等连接方式。同时,应用端提供 MQTT、WebSocket、HTTP 协议及中间件,方便企业应用、手机应用等不同应用的接入。
设备端固件 SDK
提供基于 Linux、Android 及主流 Rtos 的设备接入 SDK,支持各种包括 2/3/4G、WIFI、LORA、NB-IoT 通讯模式的通讯模组, SOC 开发板、SIP 开发板,封装了与云端鉴权、通信的全套接口,支持 MQTT/ CoAP/ WebSocket 等多种协议,可移植至不同硬件环境运行。
应用端 SDK
封装了 APP 应用端与腾讯云物联网开发中心的通讯过程, 包括设备的配置入网、发现、连接、控制、状态上报、告警和故障通知等。使用 SDK,可以使得用户快速完成 APP 开发,从而降低对复杂的协议与错误处理等事项。
开放式通讯云 API
提供从设备接入,账号管理,设备绑定,远程监控 & 升级等设备高级数据服务,并提供对应的云端 API 调用接口给到用户进行访问使用,同时打通腾讯云大数据,AI 等各种云产品的接口,满足客户根据自身业务对数据的使用。
整个框架从产品创建,设备功能设置,数据指令的上传下发,数据的存储到发布环境的应用,基本上实现了设备物联网化所需要的所有组件。总体而言,基于“两端一云”的腾讯云 IoT Suite 物联网云平台,能够实现包含设备接入、设备管理、数据分析处理、数据可视化、终端智能在内的多项功能。
腾讯云 IoT 边缘计算架构
基于物联网的边缘计算实现,主流的主要为两条路径,一是微服务的升级模式,简单理解就是允许用户在边缘平台运行应用程序,且提供开放的编程环境,与近年来来软件定义的路径相似;二是边缘向云的渗透,利用边缘能力渗透进云领域的核心产品及服务,如数据库、计算、存储、安全的边缘化。
腾讯云物联网边缘计算解决方案,主要为物联边缘设备提供一套本地服务,解决物联网应用场景下的高可用、实时性、带宽限制、私密性等问题。 腾讯云 IoT 边缘计算提供设备管理、消息收发、本地计算、缓存及同步能力,可以在边缘设备完成本地化的物联设备管理和通讯。
同时结合腾讯云 SCF 无服务函数 agent,用户只需在云端完成业务逻辑代码编写,运行方式配置,消息规则配置,下发至在网设备。在设备上,系统将自动完成代码和配置同步,云函数运行,并在设备上提供消息收发、缓存、与云端进行消息同步等能力。当数据产生时,底层的物联网设备将数据上报至智能网关设备,触发云函数的运行,将数据进行离线处理,通过本地的 IoT 网关,再将离线处理的数据下发至物联网底层设备。整个数据最主要的计算处理部分运行主要是在云函数中进行。
未来,我们会将更多的智能化服务如图像识别,包装为 SCF 云函数,逐步替换目前的 SDK 模式,通过调用云函数的方式就可以完成智能化应用的开发。
执行环境:无服务器云函数 SCF
无服务器云函数(Serverless Cloud Function)是腾讯云提供的无服务器(Serverless)执行环境,通过托管用户代码,使用用户配置的触发器,根据触发器的触发事件,能够自动执行用户应用。SCF 云函数由事件触发执行,事件来源即触发器,通常是由其他产品资源对象作为触发器,例如 COS Bucket, CMQ Topic 队列,定时器, IoT 设备等。
云函数更多是对用户的计算进行托管,用户将代码和配置提交到云函数平台上,此处的代码是指用户的一份代码或者代码包。配置,一个是指本身对于函数运行环境的配置,包括使用的是哪种环境、所需的内存、超时时间等;另一个是指触发器的配置。
因为整个函数即服务的运行方式是触发式运行,触发就需要有一个事件来源,而事件来源是和腾讯云其他产品进行关联后而产生。例如 COS 对象存储产品,它的关联就在 COS 的存储桶中,当用户上传一张图片或者删除一张图片时,就会产生一个事件,这个事件会触发云函数的运行。
例如和 API 网关的对接,也可以作为事件来源,在用户的 HTTP 请求到达网关之后,API 网关会把该请求作为事件转发给云函数,触发云函数的运行,云函数拿到请求之后进行处理,生成响应给到用户。
上图为云函数的计算过程,用户先代码和配置提交到云函数平台进行保存,真正事件产生后,针对每一个事件都会拉起一个函数实例,实现触发式运行。真正事件来临时,用户函数才会运行,用户代码运行时才有云函数代码的数据运算和费用计算。
因为函数本身是托管型的,用户本身无法感知到实例在哪里运行。云函数平台背后有个大的计算资源池,用户实例触发之后,从资源池中随机选取可运行的位置,把用户的函数实例在对应位置上运营起来。因此整个调度过程,或者事件来临之后的函数扩缩容过程,都是由平台进行的。云函数带来的价值主要包括四点:
-
简化架构:函数粒度的微服务架构,使得系统的各个功能天然解耦,能像搭积木一样组合自有及外部服务,实现所看即所得的后台服务;
-
简化开发:无需关注底层硬件配置、OS,服务启停、网络收发,故障容灾,服务扩缩容等,只需写最核心的业务逻辑,实现真正的代码即服务;
-
简化运维:无须关注服务部署,服务器运维,安全管控,扩缩容配置等,且应用能无缝升级,实现无痛切换到 DevOps 模式。
-
减少支出:无闲置成本,仅对函数资源大小,执行时间,执行次数按需计费,相对云主机平均 5%~15% 的使用率,价格优势明显,实现了最彻底的按需计费。
物联网主要是和设备打交道,云函数交由平台托管的调度,可以把云函数调度到用户设备上去。通过云函数,用户能够在边缘平台运行应用程序,帮助实现设备上的边缘计算。开发者只需通过编写核心代码并设置代码运行的条件,即可进行实时文件处理和数据处理。
接入 IoT Suit
因为主要功能集成在 Iot Suite 中,因此硬件设备的接入比较简单,只需获取 SDK、配置开发环境、将相关文件进行移植即可。
- SDK 获取
腾讯云 iotsuite C 语言版 SDK 的下载地址: tencent-cloud-iotsuite-embedded-c.git
git clone https://github.com/tencentyun/tencent-cloud-iotsuite-embedded-c.git
- 开发环境
SDK 在 Linux 环境下的测试和验证,主要基于 Ubuntu 16.04 版本,gcc-5.4 (建议至少 gcc-4.7+),Python 2.7.12+(代码生成及控制台命令行脚本)。安装 cmake 工具 http://www.cmake.org/download/
- 编译及运行
a. 执行命令,编译示例程序
cd tencent-cloud-iotsuite-embedded-c mkdir -p build cd build cmake ../ make
b. 编译后,build 目录下的关键输出及说明如下:
bin |-- demo_mqtt # MQTT 连接云服务演示程序 |-- demo_shadow # Shadow 影子设备操作演示程序 |-- iotsuite_app # 通用数据模板演示程序 |-- light # 基于数据模板的 RGB LED Light 演示程序 lib |-- libtc_iot_suite.a # SDK 的核心层, libtc_iot_hal、libtc_iot_common 提供连接云服务的能力 |-- libtc_iot_common.a # SDK 基础工具库,负责 http、json、base64 等解析和编解码功能 |-- libtc_iot_hal.a # SDK 的硬件及操作系统抽象,负责内存、定时器、网络交互等功能
c. 执行示例程序
cd bin # 运行 demo 程序 ./demo_mqtt # or ./iotsuite_app
- 移植说明
SDK 抽象定义了硬件及操作系统平台抽象层(HAL 层),将所依赖的内存、定时器、网络传输交互等功能, 都封装在 HAL 层(对应库 libtc_iot_hal)中,进行跨平台移植时,首先都需要根据对应平台的硬件及操作系统情况, 对应适配或实现相关的功能。
平台移植相关的头文件及源文件代码结构如下:
include/platform/ |-- linux # 不同的平台或系统,单独建立独立的目录 | |-- tc_iot_platform.h # 引入对应平台相关的定义或系统头文件 |-- tc_iot_hal_network.h # 网络相关定义 |-- tc_iot_hal_os.h # 操作系统内存、时间戳等相关定义 |-- tc_iot_hal_timer.h # 定时器相关定义 src/platform/ |-- CMakeLists.txt |-- linux |-- CMakeLists.txt |-- tc_iot_hal_net.c # TCP 非加密直连方式网络接口实现 |-- tc_iot_hal_os.c # 内存及时间戳实现 |-- tc_iot_hal_timer.c # 定时器相关实现 |-- tc_iot_hal_tls.c # TLS 加密网络接口实现
C-SDK 中提供的 HAL 层是基于 Linux 等 POSIX 体系系统的参考实现,但并不强耦合要求实现按照 POSIX 接口方式,移植时可根据目标系统的情况,灵活调整。所有 HAL 层函数都在 include/platform/tc_iot_hal*.h 中进行声明,函数都以 tc_iot_hal 为前缀。
使用 IoT S****uit 和 SCF 完成边缘计算
以搭建一个电子围栏应用为例,用户只需配置简单五步即可快速开发:
-
在云端创建设备,云端将为设备分配设备标识,分配通讯通道,分配配置认证信息;
-
编写电子围栏消息处理函数,配置消息转发规则;
-
绑定设备与函数,绑定设备与规则;
-
在设备中安装边缘计算 agent,配置设备标识,认证信息,配置通讯通道信息;
-
启动 agent,云端将电子围栏函数下发至本地,验证函数与规则在边缘端生效。
详细操作请参考文档: https://cloud.tencent.com/document/product/568
腾讯云物联网平台主要应用于 4 大领域,一是为创客提供一站式的物联网开发环境,从云到端的开发工具;二是为制造业企业提供可以快速设备物联网的平台,打通端到云的产品能力;三是提供满足传统企业物联网升级的需要,实现数字化转型;四是为大型企业或政府提供智慧化解决方案,行业解决方案包括智能零售,智能酒店公寓,智慧楼宇,智慧园区,智慧农业、工业物联网等。
据了解,腾讯云物联网平台和边缘计算已经在 2018 腾讯云云 + 未来峰会上正式版发布,现已开放合作伙伴申请入口。
作者简介:
王琰,腾讯云加速产品总监,高级产品经理, 负责腾讯云 CDN 加速、 IoT Suite 等产品。曾多年从事腾讯 QQ、旋风下载、电脑管家等产品的后台技术研发工作,对互联网技术、云计算、CDN 和物联网都有深入的研究和理解。
评论