返回
Kevin Riedl

18 min 阅读 · 2026年7月9日

下一篇

智慧城市软件架构最佳实践:MQTT、ChirpStack、LoRaWAN、Kubernetes 与 Terraform

简短结论:智慧城市平台不是一个单一平台。它是一串必须经得起天气、弱网、采购、隐私、供应商退出和设备长期维护考验的工程决策。可靠架构通常分层:边缘设备、LoRaWAN 或蜂窝网络、用于遥测接入的 MQTT、设备注册表和命令通道、用于互操作的统一数据模型、时序存储、事件流、应用 API,以及底层的 Infrastructure as Code。Kubernetes 和 Terraform 在团队具备 DevOps 成熟度时很有用;如果它们变成项目本身,就会拖慢交付。

正在规划智慧城市或 IoT 平台?

 和我们梳理架构

先决定运营模型,再决定技术栈

很多智慧城市项目一开始就讨论 MQTT、Kafka、LoRaWAN、Kubernetes、FIWARE、AWS IoT Core、Azure IoT Hub、ThingsBoard 或自研后端。这些问题都重要,但不是第一个问题。第一个问题是运营模型。我们在 IoT 平台项目里也从这里开始:先确认谁运营它,再决定工具。

一个城市平台至少有五类利益相关方:付费的政府部门,负责事故响应的运维团队,维护设备的供应商,可能被数据间接影响的市民,以及未来复用数据的应用团队。如果只为试点设计,后面会变成集成遗产。如果只为宏大的数据空间设计,第一个试点可能永远上线不了。

所以先问:这是一个单一场景的运营系统,一个跨部门城市数据平台,还是一个联邦式数据空间?第一种可以用 MQTT 加干净的后端。第二种需要身份、元数据、治理、标准 API、长期存储和应用边界。第三种需要语义互操作和明确的数据共享契约。

能够进入生产的参考架构

  1. 设备与现场层。 传感器、网关、控制器、必要时的摄像头、工业资产的 PLC,以及真正的设备身份。设备必须能重连、缓存、轮换凭据、上报固件版本,并在网络消失时可控失败。
  2. 连接层。 LoRaWAN 适合低频、小包、低功耗设备;NB-IoT 或 LTE-M 适合接受运营商覆盖和 SIM 管理的场景;有线以太网或工业网络适合供电稳定、可靠性优先的资产。
  3. 接入层。 MQTT broker 或托管 IoT broker 承接遥测、命令 topic、设备生命周期事件和桥接 topic。在这里执行 TLS、证书、topic 授权、配额和 payload 限制。
  4. LoRaWAN Network Server。 ChirpStack、The Things Stack 或托管服务处理 join、去重、ADR、下行调度、帧计数器和路由。不要把 LoRaWAN MAC 逻辑塞进应用后端。
  5. 标准化与校验。 解码 payload,附加设备元数据,校验单位,拒绝不可能的数值,写入 schema version,并保证幂等。
  6. 上下文与数据模型。 多部门、多供应商或开放数据消费者需要理解同一实体时,考虑 NGSI-LD/FIWARE 或 OGC SensorThings。孤立系统可以用内部模型,但单位、位置、所有权、保留策略和质量标记必须明确。
  7. 存储层。 时序数据库存观测值,object storage 存原始 payload,关系型数据库存注册表和配置,地理空间索引用于地图,不可变日志用于审计动作。
  8. 事件与集成层。 校验后的事件进入分析、告警、仪表盘、工单系统、开放数据门户和 AI 系统。MQTT 常适合边缘接入;校验之后 Kafka、NATS、Redpanda、Pulsar 或云队列通常更合适。
  9. 应用层。 仪表盘、市民服务、运营控制台、异常检测、维护规划和 API。应用应该可替换,平台不应被某个仪表盘供应商绑定。
  10. 运维层。 Terraform 管基础设施,Kubernetes 或托管服务跑 workload,GitOps 管部署,配合 metrics、traces、logs、backups、恢复演练、SBOM、漏洞管理和 runbook。

MQTT:设备遥测的好默认值,但不是完整架构

MQTT.org 将 MQTT 描述为 面向 IoT 连接的 OASIS 标准:publish/subscribe、轻量、适合受限设备和不可靠网络。这正是它适合智慧城市遥测的原因。设备发布到 topic;应用订阅,不需要设备知道谁在消费。broker 负责解耦。

  • Topic 设计就是 API 设计。 city/{tenant}/{site}/{device}/telemetry 不只是命名,它会变成契约。
  • QoS 要有意识选择。 高频环境数据可用 QoS 0;状态变化和告警更适合 QoS 1,但后端必须能处理重复。
  • Retained message 不是历史库。 它适合最新状态,不是时序数据库。
  • 不要把真相放在 broker。 真相属于 registry、上下文模型和存储层。broker 负责传输。
  • 默认会乱序。 使用设备时间、服务端接收时间、序号、计数器和单调校验。

LoRaWAN 与 ChirpStack 的位置

LoRaWAN 对城市很有吸引力:远距离、低功耗、小带宽、设备成本低,而且可以通过自建网关拥有私有网络。LoRaWAN 规范描述了 star-of-stars 拓扑:网关把终端消息转发给中心 Network Server,再路由给 Application Server。

ChirpStack 是我们在私有 LoRaWAN 场景下会优先评估的开源 Network Server。它提供网关、设备、tenant 和集成管理,以及 gRPC API。它的配置展示了真实运维要求:PostgreSQL、Redis、MQTT 集成、区域、设备类别、去重延迟、下行时序和监控 endpoint。

需要控制权时用 ChirpStack:自己的网关、自己的租户结构、自己的集成路径。没有团队运维无线网络时用托管 LoRaWAN。需要运营商覆盖、移动性或更高吞吐时考虑 NB-IoT 或 LTE-M。无线技术的成本模型可参考我们的 LoRaWAN vs NB-IoT vs Sigfox 试点成本指南

FIWARE、NGSI-LD 与 SensorThings

如果每个供应商都带来自己的数据模型,智慧城市平台会慢慢失败。一个停车位在某家系统里是 device,在另一家里是 asset;占用状态有人写 occupied: true,有人写 status: 1。第一年仪表盘会掩盖差异。第三年要做开放数据、跨部门分析或重新招标时,代价就出现了。

FIWARE catalogue 围绕 context data management 和统一 NGSI API。NGSI-LD 是基于 JSON-LD 的互操作方式,适合联邦和数据空间。FIWARE 教程的实用建议是:简单孤立系统用 NGSI-v2;data space 或 system of systems 用 NGSI-LD。

OGC SensorThings 适合以观测为核心的系统:things、sensors、datastreams、observed properties、features of interest 和 observations。OGC SensorThings API 还定义了 MQTT extension。如果城市已有强 GIS 和传感器数据体系,SensorThings 很干净;如果要建更广的资产、组织和关系上下文,NGSI-LD/FIWARE 通常更合适。

Terraform 与 Kubernetes

Terraform 用代码定义和版本化基础设施。智慧城市项目的环境会长期存在、需要审计、经常重复,适合用 Terraform 管网络、DNS、数据库、bucket、IAM、集群、队列和监控。State 必须远程、加锁、加密且不进 git;HashiCorp 文档也提醒本地 state 和不安全 state storage 会带来协作和泄密风险。

Kubernetes 是 workload control plane。它适合多个服务、多个环境、autoscaling、GitOps,以及懂 probes、resource limits、secrets、network policies 和 recovery 的团队。20 个设备的试点用 Kubernetes 可能只是仪式感;多部门、多服务平台则可能非常合适。如果内部缺少这种运维经验,采购前做一次 fractional CTO 架构评审,通常比上线后重建便宜。

主要方案对比

方案适合场景优势风险
托管 IoT 云追求速度并接受云锁定的团队设备认证、MQTT、规则、shadow/twin、云集成成本、区域限制、供应商特定架构
ChirpStack + MQTT私有 LoRaWAN 网络控制权、透明运维、无按设备云依赖无线和网络运维由你承担
FIWARE/NGSI-LD跨部门上下文数据和数据空间统一上下文模型、联邦、智慧城市生态第一个仪表盘前需要更多建模纪律
OGC SensorThings观测数据和 GIS 重的系统传感器与观测模型清晰不太适合广泛业务上下文
自定义事件平台工程能力强且需求特殊的团队高度贴合、成本可控registry、auth、rules、模型、UI 和运维都要自己做
IoT 套件快速仪表盘和规则引擎演示速度快、UI 集成业务逻辑容易锁在套件里

避免重建的最佳实践

  • 分离遥测、状态和命令。 遥测是事件流,状态是最后已知视图,命令是带 ack、timeout、授权和审计的意图。
  • 所有写入都要幂等。 LoRaWAN 去重、MQTT QoS 1、重试和云规则都可能制造重复。
  • 版本化 payload 和 codec。 解码器是生产代码。保存固件、codec 版本、设备 profile 和单位假设。
  • 接受迟到和缺失数据。 现场网络不是办公室网络。
  • 认真建模设备身份。 LoRaWAN keys、X.509 证书、SIM、API keys 和用户是不同身份。
  • 保存原始 payload 用于 replay。 解码器出错时,replay 比解释半年错误数据便宜。
  • 把位置数据当敏感数据。 交通、占用、摄像头和移动数据组合后可能涉及个人隐私。
  • 采购前写好退出计划。 数据导出、API 文档、凭据交接、schema 文档、infra code 和固件流程都应写入要求。

安全、治理与路线图

智慧城市系统接近公共基础设施。它不需要恐慌,但需要纪律:least privilege、凭据轮换、命令日志、下行审计、tenant 隔离、TLS、敏感存储加密、证书过期监控和恢复演练。可以用 NIST Cybersecurity Framework 作为治理、识别、保护、检测、响应和恢复的共同语言。类似问题也会出现在 technical due diligence 中:没有 owner、没有 runbook、没有数据契约。

健康路线图很简单:先做最小可信试点,一个场景、一个区域、一类设备、一个成功指标,更接近 minimum credible product,而不是漂亮 demo;然后生产加固,补齐设备生命周期、固件、监控、备份、replay、schema registry 和 API 文档,直到它达到 production-ready;最后再做平台化,开放数据契约、工单集成、分析和 AI 场景。

资料来源与架构说明

智慧城市系统会运行很多年,但供应商产品和托管云功能变化很快。请把架构原则视为稳定,把具体工具细节视为 2026 年 7 月快照。采购或预算确认前,请重新核对 MQTT.orgMQTT specificationLoRaWAN 1.1 specificationChirpStackFIWAREOGC SensorThingsTerraformTerraform stateKubernetes object managementAWS IoT protocolsAWS IoT rulesAzure IoT Hub device twins

Kevin Riedl

"优秀的智慧城市架构在每一层都朴素,在每个边界都明确。传感器可以混乱,契约不可以。"

最终思考

不要按工具名购买智慧城市平台。先确定运营模型:孤立场景、城市数据平台,还是联邦式数据空间。用 MQTT 做遥测,但不要把 broker 当成存储、治理或分析。低功耗、小 payload、网络所有权重要时用 LoRaWAN;要自运维私有 LoRaWAN 时评估 ChirpStack。在互操作边界使用 FIWARE/NGSI-LD 或 OGC SensorThings。尽早使用 Terraform。只有当团队能运维时才使用 Kubernetes。从第一天就设计重复数据、迟到数据、固件漂移、凭据轮换、原始数据 replay、安全 state 和供应商退出。这是试点和城市基础设施之间的差别。

需要中立的架构评审?

 预约架构电话
返回
Kevin Riedl

18 min 阅读 · 2026年7月9日

下一篇

能变成产品的 IoT 试点

如果你正在规划 IoT 试点,并担心硬件、连接、后端或现场可靠性,Wavect 会把传感器想法变成可用的软件产品。

相关服务: