当前位置:   article > 正文

从 0 开始搭建 IoT 平台

物联网系统开发:从0到1构建iot平台.pdf
课程背景

物联网应用开发,并不像 Web 开发那样有固定的模式和框架可以学习,开发者往往还是需要从协议这一层慢慢往上搭积木,学习曲线比较陡。本课程结合物联网应用开发常用的设计模式以及作者多年的开发经验,带你从 0 开始搭建一个物联网平台,希望本课程所体现的架构和思路能够帮助你少走弯路、少踩坑。

课程亮点

从 0 开始搭建专属物联网平台

  • 大量实战代码,手把手逐行讲解
  • 使用开源组件,掌握大厂设计思路和实现逻辑

“踩坑”经验沉淀,教你快速「搭积木」

  • 优化物联网应用开发学习曲线
  • 覆盖物联网开发中 80% 的场景以及可能遇到的设计和架构问题
你能收获什么?
  • 学习物联网应用的常用架构和设计模式
  • 学会独立设计和开发可以用于支撑多个物联网应用的物联网平台
  • 学会使用和编写 EMQ X 的插件
  • 获得一套完整的、可运行的物联网平台代码,包括服务端和设备端 SDK
前置知识

学习和熟悉 MQTT 协议的基本概念和特性,对阅读本课程有非常大的帮助。

作者介绍

付强,某物联网 Startup 联合创始人兼 CTO,之前就职于趋势科技,诺基亚中国,在物联网领域从业多年,曾经在德国、硅谷的 Startups 工作过。

适宜人群
  • 物联网应用开发者
  • 物联网架构师
  • 物联网平台开发者
课程目录

avatar

课程内容
开篇词:开发物联网应用,光会 MQTT 还不够

导读

大家好,我是付强,我现在是一家物联网 Startup 的联合创始人兼 CTO,在自己创业之前,我曾经在趋势科技和诺基亚工作过。从 2011 年我在硅谷参与的第一个物联网项目开始算起,到 2015 年开始在物联网方向创业并运营到现在,从 0 到 1,1 到盈利,我在物联网这个行业已经摸爬滚打快 8 年了。

我的上一门课程《MQTT 协议快速入门》详细讲解了 MQTT 协议及其各种特性。在课程的交流群中,读者们也提了很多问题,除了关于 MQTT 协议本身的内容以及特性相关的问题之外,还有很多问题是关于物联网软件设计和架构方面的,比如:

  • 我应该如何管理我的设备和设备的状态?
  • 业务服务端应该怎么接收、处理和存储来自设备的数据?
  • 我的设备数量很多, Broker 端应该怎么架设来确保性能和扩展性?
  • 我的设备处理能力有限,除了使用 MQTT 协议以外,还有没有其他的选择?
  • ……

这让我意识到,单单学会和熟悉 MQTT 协议,离开发和架构一个成熟的物联网产品还是有一段不小的距离,其实仔细想想,这也没有什么不对的:拿 Web 开发做一个类比,我们只学习 HTTP 协议,就能够开发一个成熟的网站或者基于 Web 的服务吗? 答案也是否定的。

回想一下我们是怎么学习 Web 开发的。首先我们会了解一下 HTTP 协议,然后选择一个框架,比如 Java 的Spring Boot、 Python 的 Django、Ruby 的 Rails 等。这些框架提供固定的模式,对软件进行了高度的抽象和分层,比如集成了一些 Web 开发的 Good Practice; 你会知道在 Model 层处理业务的逻辑,用 ORM 来进行数据库操作,在 Controller 层处理输入输出和跳转,在 View 层渲染 HTML 页面,这样一个网站和 Web 服务就能够很快被开发出来,除了性能优化的时候,你几乎不用去想 HTTP 协议的细节。

回到物联网开发,抛开设备端的异构性,单说服务端的架构这块,并不像 Web 开发这块有一个 Well Known 的模式、架构或者开发框架。开发者往往还是需要从协议这一层慢慢往上搭积木,学习曲线还是比较陡的。

我的经历

2015 年中的时候我开始在物联网方向创业,我的第一个决定就是先实现一个供业务系统和设备使用的物联网平台。当时阿里云的 IoT 平台已经上线,由于功能性和定制性方面暂时满足不了我们的需求,最后还是决定自行开发。

我们自行开发的物联网平台实现了设备的管理和接入,设备数据的存储和处理,并抽象和封装了基于 MQTT 协议的数据传输,比如设备的数据上报和服务端的指令下发等,提供了业务服务端使用的服务端 API,和设备端使用的设备端 SDK, 业务服务器和设备不再需要处理数据传输和接入等方面的细节,它们甚至不知道数据是通过 MQTT 协议传输的,这一切对业务服务器和设备都是透明的。

这个平台很好地支持了业务服务端和设备端的快速迭代,也支撑着业务从 0 到 1,从 1 再到盈利。同时,我也在密切地关注着各大云服务商(比如阿里云、AWS 等)提供的 IoT 平台,在一些功能上,我们的设计思路和实现逻辑是非常相似的,同时我也会把在云 IoT 平台上的新功能或者更好的实现集成到自研的物联网平台上。

avatar

在这个过程中,我踩了很多坑,同时也积累了一些物联网平台在架构和设计模式等方面的经验。在这门课程中,我想把这些物联网平台架构以及设计方面的知识和经验分享给大家,这应该可以覆盖大家在物联网开发中 80% 的场景和可能遇到的设计和架构问题

推荐阅读 ?《从 0 开始搭建 IoT 平台》

如何学习

2019 年的阿里云 IoT 平台功能已经非常强大了,在本门课程中,我们将使用开源的组件,从第一行代码开始,一步步地实现一个具有阿里云 IoT 平台大部分的功能的"物联网平台",在这个过程中穿插讲解在物联网平台开发中可以用到的模式和架构的选择, Pros and Cons,以及一些 Best Practice 等。与《MQTT 协议快速入门》侧重协议内容和理论不同,本门课程包含大量的实战代码,毕竟代码是程序员之间交流的最好语言。

这里给这个"物联网平台"起了一个 Codename: Maque IotHub,简称 IotHub。

本课程属于实战性课程,所以不会再详细地讲解 MQTT 协议的概念和特性了,预先学习和熟悉 MQTT 协议的基本概念和特性,对阅读本课程有非常大的帮助。你可以访问 mqtt.org 查阅协议的文档,也可以通过阅读我的《MQTT 协议快速入门》来进行快速学习。

课程特色

目前物联网开发的的实战课程,特别是成体系的实战课程是很少的,本课程涵盖了从物联网平台到设备端开发的大量场景和设计模式,并不像其他教程那样只是罗列知识点。本课程各节内容之间就像搭积木一样关联性很强,从第一行代码开始搭建一个物联网平台,轻理论而重实战,专注于你无法在互联网上找到参考的实战内容,干货十足。

  • 大量实战代码,从第一行开始手把手讲解
  • 来自实际运营的物联网项目的开发/架构经验
  • 覆盖 80% 物联网开发场景
  • 在互联网其他地方找不到的原创课程

课程介绍

开篇词:开发物联网应用,光会 MQTT 还不够
附录:如何运行 Maque IotHub
第一部分(第 1-1 ~ 1-9 课):设备生命周期管理

作为课程的第一部分,我们会设计和开发 IotHub 的最基础功能,对设备的创建、接入、 上线/下线、 禁用/恢复和删除的整个生命周期进行管理,引入设备的发布订阅权限管理。同时也会把服务端代码和设备端代码的框架搭建起来,便于后续的迭代开发。这部分最后也会讲解如何横向和纵向地扩展 EMQ X

第二部分(第 2-1 ~ 2-6 课):上行数据处理

在课程的第二部分,我们会设计和实现 IotHub 的上行数据处理功能,在这部分我们会学习 EMQ X 的 Hook 机制,以及它如何为 IotHub 的开发带来便利性,同时也会第一次对 IotHub 中的 MQTT 主题名进行规划,把 MQTT 的 Broker-Client 模式转换为 Server-Client 模式。

第三部分(第 3-1 ~ 3-5 课):下行数据处理

在课程的第三部分,我们会设计和实现 IotHub 的指令下发功能,在这部分我们会学习使用 EMQ X 的监控管理 API,并对指令下发的主题进行规划,实现可靠的指令下发流程。

第四部分(第 4-1 ~ 4-15 课):进一步抽象

在第四部分的课程中,我们会利用第二部分和第三部分实现的上行和下行通道,来实现物联网应用中一些常见的功能,比如 OTA 升级、设备分组等。我们会学习如果将这些功能抽象出来放入 IotHub 中,使多个物联网应用可以通过 IotHub 复用这些功能。最后我们还会学习和实现在各大云服务商提供的 IoT 平台中非常常见的设备影子功能。

第五部分(第 5-1 ~ 5-6 课):扩展 EMQ X

在前面的课程中,我们使用大量的 EMQ X 自带插件功能来完善 IotHub, 在这部分课程中,我们将学习如何编写一个 EMQ X 插件。通过这部分的学习,读者将会掌握根据自己的业务逻辑来扩展 EMQ X 的能力。

第六部分(第 6-1 ~ 6-2 课):CoAP

在课程的最后一部分,我们会将目光暂时从 MQTT 上移开,讨论 MQTT 在某些场景下的缺陷,并学习另外一种物联网协议 CoAP。最后我们会将 CoAP 无缝地接入现有 IotHub 的设备体系。

适合阅读的人群

本课程适合以下人群阅读:

  • 物联网应用开发者
  • 物联网架构师
  • 物联网平台开发者

推荐阅读 ?《从 0 开始搭建 IoT 平台》

课程寄语

在我的另一篇达人课《MQTT 协议快速入门》,我尝试着用一门课来解答大家在物联网应用设计和开发上遇到的问题,在交流中发现,大家的问题不只局限在协议上。这是也促成我编写这篇课程的原因之一。

物联网应用开发不像 Web 开发那样有固定的模式和框架可以学习,本课程实现阿里云 Iothub 的部分功能,并结合我在设计和实现一个已上线运行多年的物联网平台的经验,来阐述在物联网应用中常用的设计模式和思路,目的也是希望大家在学习本课程之后,可以少走点弯路、少踩点坑。如果你不需要实现一个物联网平台(比如直接使用云服务商提供的物联网平台)也没关系,这门课所体现的架构和思路也能帮助你更好地设计物联网应用

我希望读者在学习完本课的内容后,能够将学到的设计思路和模式运用到实际工作中去,希望本课程能够解答你在物联网应用开发中能遇到大部分设计和实现的问题。毕竟 5G 时代已经来临,物联网的发展势头会越来越快。

学完后的收获

  • 熟悉物联网应用的常用架构和设计模式
  • 学会独立设计和开发可以用于支撑多个物联网应用的物联网平台
  • 学会使用和编写 EMQ X 的插件
  • 获得一套完整的、可运行的物联网平台代码,包括服务端和设备端 SDK
第 1-1 课:准备工作台

在本课中,我们将安装开发物联网平台时使用到的组件,并把物联网平台的开发环境搭建起来。

安装组件

首先在开发机上面安装开发需要的组件。

MongoDB

MongDB 是一个基于分布式文件存储的数据库,我们会把 MongoDB 作为物联网平台主要的数据存储工具。

可以在这里找到 MongoDB 的安装文档,根据文档在对应的系统上安装和运行 MongoDB。

Redis

Redis 是一个高效的内存数据库,物联网平台会使用 Redis 来实现缓存和简单的队列功能。

请根据这里的文档,在对应的系统上安装和运行 Redis。

Node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,我们会使用 Node.js 来开发物联网平台的主要功能。

请根据这里的文档在对应的系统上面安装 Node.js。

RabbitMQ

RabbitMQ 是使用 Erlang 编写的 AMQP Broker,物联网平台使用 RabbitMQ 作为队列系统实现物联网平台内部以及物联网平台到业务系统的异步通信。

请根据这里在对应的系统上按照和运行 RabbitMQ。

EMQ X

EMQ X 是一个使用 Erlang 编写的 MQTT Broker,物联网平台使用 EMQ X 来实现 MQTT/CoAP 协议接入,并使用 EMQ X 的一些高级功能来简化和加速开发。

可以在这里找到 EMQ X 的安装文档,安装完毕之后,在控制台运行:

<EMQ X 安装目录>/bin/emqx start

如果命令行输出为 emqx 3.2.0 is started successfully! 那说明 EMQ X 已经成功安装并运行了。

本课程在编写时,使用的版本为EMQ X Broker V 3.2.0。 EMQ X Enterprise为 EMQ X 的付费版本,注意不要安装错了。

那么开发物联网平台需要的组件就安装完了,接下来我们简单介绍一下物联网平台的各个组成部分。

首先给这个物联网平台取一个代号,就叫它 Maque IotHub 吧,寓意麻雀虽小,五脏俱全。 接下来我们把后续课程中会出现的实体都定义一下:

  • Maque IotHub:我们将要开发的物联网平台,简称 IotHub。
  • Maque IotHub Server API:Maque IotHub 的服务端 API,以 Restful API 的形式将功能提供给外部业务系统调用,简称 Server API。
  • Maque IotHub Server:Maque IotHub 的服务端,包含了 Server API 和主要的 IotHub 服务端功能代码,简称为 IotHub Server。
  • 业务系统:指实现特定物联网应用服务端的业务逻辑系统,它通过调用 Maque IotHub Server API 的方式来控制设备/使用设备上报的数据,Maque IotHub 为它屏蔽了和设备交互的细节。
  • Maque IotHub DeviceSDK: M
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/570717
推荐阅读
相关标签
  

闽ICP备14008679号