1. 课程导论与平台全景
1.1 物联网数据采集的现实挑战
在工业4.0与智慧城市快速落地的今天,物联网设备数量呈指数级增长。一个典型的物联网采集平台每天需要处理来自数千个传感器的数据流,这些数据具有高并发、小数据包、时序性强的特点。传统单体架构往往在设备接入层出现性能瓶颈,而数据库选型不当则会导致存储成本飙升或查询延迟过高。
课程背景: 本课程基于一个真实的智能楼宇温湿度采集项目提炼而成,覆盖从设备模拟、HTTP API 开发到数据库持久化的完整链路。你将学会如何构建一个可支撑 10 万+ 设备接入的生产级采集平台。
1.2 平台整体架构
物联网采集平台采用分层解耦设计,从上到下依次为设备接入层、API 服务层、数据持久化层与监控运维层。各层职责清晰,便于独立扩展与维护。
1.3 技术栈选型对比
本课程围绕Python 生态构建,在 Web 框架与数据库两个核心维度上提供对比选型方案。你将同时掌握两种主流技术栈的搭建方法。
| 维度 | 方案 A(轻量快速) | 方案 B(企业级) | 选型依据 |
|---|---|---|---|
| Web 框架 | Flask 2.x | FastAPI 0.100+ | Flask 生态成熟,FastAPI 原生异步与自动文档 |
| 关系数据库 | MySQL 8.0 | PostgreSQL 15+ | MySQL 运维简单,PG 支持 JSONB 与时序扩展 |
| ORM | SQLAlchemy 2.0 | SQLAlchemy 2.0 | 统一 ORM,降低切换成本 |
| 数据校验 | Marshmallow | Pydantic v2 | Pydantic 性能更优,与 FastAPI 深度集成 |
| 部署方式 | Gunicorn + Nginx | Uvicorn + Nginx | ASGI 在高并发场景优势明显 |
课程选择策略: 前 5 章使用 Flask + MySQL 快速搭建原型,第 6 章起迁移至 FastAPI + PostgreSQL,体验技术栈升级带来的性能与开发效率提升。所有代码均提供双版本对照。
1.4 核心数据流设计
一条传感器数据从设备发出到最终存储,需要经过6 个关键处理阶段。理解这个数据流是搭建采集平台的基础。
- 设备采集: 传感器按固定周期(如 10s)通过 HTTP POST 上报 JSON 数据包。
- 协议解析: API 网关解析设备标识、时间戳、测量值等字段,进行格式校验。
- 数据清洗: 过滤异常值(如温度超过 -40~85°C 范围)、去重、补全缺失时间戳。
- 业务转换: 将设备原始值转换为标准单位(如电压信号 → 实际温度)。
- 持久化写入: 批量写入关系数据库,支持事务回滚与主键冲突处理。
- 异步通知: 通过消息队列触发后续分析任务或实时告警。
1.5 课程目标与学习路径
本课程共 30 章,分为四大阶段,从零开始构建一个可运行的物联网采集平台。每个阶段都配有可验证的里程碑成果。
| 阶段 | 章节范围 | 核心目标 | 里程碑产出 |
|---|---|---|---|
| 基础搭建 | 第 1-8 章 | 掌握 Flask + MySQL 基础架构,实现单设备数据采集与存储 | 可运行的采集 API + 数据库表结构 |
| 能力增强 | 第 9-16 章 | 引入 FastAPI 异步特性,实现批量采集、数据校验与错误处理 | 高性能异步 API + Pydantic 模型 |
| 存储优化 | 第 17-24 章 | PostgreSQL 高级特性应用,时序数据分区与查询优化 | 分区表 + 索引优化方案 |
| 生产部署 | 第 25-30 章 | 容器化部署、监控告警、性能压测与文档生成 | Docker Compose 部署 + 压测报告 |
前置要求: 你需要具备 Python 基础语法知识,了解 HTTP 协议基本概念。如果熟悉 SQL 基础操作会更轻松,但非必需——课程会从建表语句开始逐步讲解。
1.6 开发环境速览
课程所有代码在以下环境中验证通过,建议你保持版本一致以避免兼容性问题。
# 推荐开发环境
操作系统:Ubuntu 22.04 / macOS Ventura / Windows 11 (WSL2)
Python 版本:3.10+
包管理:pip 23+ / poetry 1.5+
数据库:MySQL 8.0 或 PostgreSQL 15+
IDE:VS Code + Python 插件 / PyCharm Professional
# 核心依赖(初始版本)
Flask==2.3.3
SQLAlchemy==2.0.20
mysqlclient==2.2.0
python-dotenv==1.0.0
gunicorn==21.2.0
学习建议: 每章结束后,尝试在不看参考代码的情况下独立实现核心功能。遇到数据库报错时,优先检查连接字符串、表结构和字段类型——这是 80% 问题的根源。