直接回答

通过复现你的工作负载、失败模式、安全模型和运维约束来选择 MQTT 代理。如果没有报文速率、订阅扇出、会话持久化、队列深度、负载大小、TLS 开销和恢复行为,标题中的连接数没有可比性。合适的代理是团队能在产品服务目标内运维和恢复的那个,且锁定风险可接受、退出路径已经过测试。

范围与边界

本指南覆盖 MQTT 协议行为、连接和会话处理、路由、持久化、授权集成、集群、可观测性和运维。它不选择完整的 IoT 平台,也不假设代理应提供注册表、规则引擎、分析和存储。即使打包销售,也应将这些作为独立能力评估。

在候选名单之前先定义工作负载

将稳态和恢复描述为分布而非单一设备数。记录并发连接数、每秒新建连接数、每秒发布数、负载分位数、QoS 混合、每客户端订阅数、通配符扇出、保留消息、持久会话、离线队列限制和地理部署。包括 TLS 握手、认证延迟和授权查询。

建模关联事件:移动网络恢复、证书服务降速、代理节点丢失、滚动升级或下游中断。这些通常在稳态路由达到极限之前就给准入、会话恢复、存储和消费者队列带来压力。

选型准则

协议正确性优先。测试实际使用的版本和功能,包括会话过期、消息过期、接收最大值、reason code、共享订阅、保留消息和遗嘱。验证极限条件和跨升级版本的行为。

了解会话和保留状态存储在哪里、如何复制、哪些故障导致重分布,以及一致性权衡是否匹配产品语义。“集群化”不能说明恢复时间或未确认消息会怎样。

安全必须与信任链集成。确认 TLS 策略、客户端证书验证、令牌支持、ACL 表达能力、吊销、密钥轮换、管理授权和审计日志。避免在每个报文上执行同步远程授权调用,除非有有限的失败策略。

运维决定长期成本。要求提供连接数、认证失败、在途消息、队列时长、丢弃或过期消息、路由速率、存储压力和节点恢复的指标。审查升级流程、备份范围、容量控制、事件工具、支持边界和版本生命周期。

最后评估可移植性。标准 MQTT 减少了客户端锁定,但专有规则、网桥语义、管理 API、会话格式和监控仍可能使迁移成本高昂。

评估流程

  1. 分别编写通过/失败要求和加权偏好。
  2. 使用生产 SDK 和 TLS 设置构建代表性客户端测试工具。
  3. 在性能测试之前验证协议语义。
  4. 运行稳态负载足够长时间以暴露队列或存储增长。
  5. 注入节点丢失、分区、认证延迟、存储压力和下游积压。
  6. 测量稳定恢复时间,而非仅测量集群报告健康的时间。
  7. 在活跃会话下执行升级和回滚。
  8. 导出配置、ACL、指标和示例工作负载以证明可移植性。

不要发布通用基准数字。记录硬件、拓扑、版本、生成器、客户端、负载、TLS、会话设置和阈值,使结果可复现。

失败模式

代理可能维持大量空闲连接但在重连握手时崩溃。持久会话可能使节点替换变慢,因为存储的订阅和队列需要迁移。过于宽松的 ACL 可能使本来强大的平台失效。磁盘队列可以在下游故障时保护消息但也耗尽存储。自动扩缩可以增加路由容量但也会放大状态重分布。托管服务可以减少维护但限制网络部署、扩展或事件可见性。

实施清单

  • 工作负载和恢复分布已文档化。
  • 协议和安全要求有通过/失败测试。
  • 持久状态归属和恢复已理解。
  • 测试使用生产客户端、TLS、认证和负载大小。
  • 失败测试测量稳定恢复和丢失或重复结果。
  • 队列、存储和准入限制明确。
  • 升级、回滚、备份和支持流程已演练。
  • 专有依赖和迁移成本已记录。

决策记录

最终建议应保留被淘汰的备选方案和证据,而非仅保留评分。记录工作负载假设、硬性失败、运维优势、商业约束以及哪些声明仍未验证。明确在托管和自建两种方案下,谁负责升级、容量、安全响应和 24 小时事件。当设备规模、地理部署、持久化要求或团队能力发生变化时重新评审决策。基准不是永久的产品真相。保持测试工具和验收阈值可运行,比保留一个输入已不匹配生产的精美对比表格更有价值。

归属问题

在最终确认前,明确负责调优客户端准入、排查会话损坏、轮换代理凭据、批准升级和沟通协议事件的团队。对于托管服务,确定提供商暴露哪些指标和产物,哪些故障仍由客户承担。对于自建,包括值班人员配备、安全补丁、容量采购和灾难恢复,而非仅比较许可成本。

要求进行一次使用故意模糊故障的支持演练。衡量工程师能否在没有厂商特权介入的情况下,从设备症状追踪到连接、认证、会话、路由和下游证据。审查数据驻留、维护窗口、服务配额和导出格式。基准表现最好的代理在其失败边界或支持模型与运维组织冲突时,仍可能是错误的生产选择。

主要参考来源

使用 OASIS MQTT 5.0 规范进行协议验收,使用 NISTIR 8259A将设备网络安全能力映射到平台服务。代理架构、持久化、集群和运维声明必须在每个候选者的官方文档中验证,并在目标环境中复现。