写点什么

Karma 如何使用 MQTT 应对日益增长的 WiFi 设备

  • 2015-08-25
  • 本文字数:900 字

    阅读完需:约 3 分钟

Karma 是一个生产便携式 WiFi 热点设备的公司,近日,其在官方博客上发布了一篇文章,介绍了它们如何使用MQTT 协议代替HTTP 协议来应对WiFi 设备的增长。

Karma 生产的 WiFi 热点设备因为需要收集信息以及一些功能,每一台设备都需要定期发送一些数据到 Karma 后端。在之前,Karma 使用HTTP+TLS 来传输数据,但随着卖出设备越来越多,它们需要对这一部分进行优化以减轻带宽和后端的压力,于是它们想到了MQTT。

MQTT 是 IBM 提出的一项轻量级消息协议,它针对物联网设计,用于轻量级的 pub/sub 式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。Karma 使用 MQTT 将之前的 JSON 数据包转为二进制 buffer 数据,大大减少了传输数据的体积。

在采用 MQTT 前,它们首先定义了自己的需求,Karma 对于 MQTT 服务端的需求如下:

  • 尽可能的无状态
  • 可扩展的,能够提供连接池
  • 能够与终端设备以 HTTP 交互
  • 希望是开源的,以便深入源码

对于 Karma 这样的高可用和可扩展的需求,截至 2014 年底,并没有一个成熟且合适的 MQTT 服务端解决方案能够满足,Karma 只能自己研发,于是他们推出了 MQTTParty,这个命名是对经典的 Ruby 开源库 HTTParty 致敬。

MQTTParty 使用 Go 语言编写,Go 语言的性能强劲,并且有内建的并发支持,对于消息中间件来说是理想的开发语言。MQTTParty 可以分布式的部署,并且彻底的无状态,单机宕掉对服务无影响,状态使用 Redis 来存储。但这给前面的负载均衡提出了难题,因为 Karma 的设备和后端之间保持一个 TCP 长连接,而一般的负载均衡只需要支持 HTTP 短连接即可,最终 Karma 采用 HAProxy 的最小连接均衡算法解决了这个问题。

最终,Karma 的新后端架构如下图:

MQTTParty 在其中起到接受发送数据,以及转换 MQTT 和 HTTP 数据的作用。当后端需要发送数据到终端设备时,它会检查 Redis 中该设备是否连接到后端,然后接受 HTTP 信息转为 MQTT 数据传送给终端设备。

Karma 在发布该文章时并未将 MQTTParty 开源,因为它与 Karma 其它后端集成过于紧密,后续它们会将它 MQTTParty 剥离出来并开源。对这个项目感兴趣的读者也可看看最近发布的一个类似的开源项目 VerneMQ ,它也适用于 Karma 所面临的问题。

2015-08-25 19:002787
用户头像

发布了 164 篇内容, 共 111.5 次阅读, 收获喜欢 392 次。

关注

评论

发布
暂无评论
发现更多内容

百度沈抖:所有产品将基于大模型重构,要做好三大准备

科技热闻

阿里内部人手一份的Spring Cloud Alibaba手册

小小怪下士

Java 程序员 SpringCloud springcloudAlibaba

INFINI Labs 产品更新 | Easysearch 新增跨集群复制 (CCR)、支持快照生命周期管理 (SLM) 功能等

极限实验室

搜索引擎 console Gateway agent easysearch

android项目问题总结

Studying_swz

6 月 优质更文活动

ChatGPT教我用200行代码写一个简版Vue框架 - OpenTiny

Kagol

vue.js 前端 ChatGPT

限流功能实现原理

互联网架构师小马

Nautilus Chain全球行分享会,上海站圆满举办

股市老人

Java SPI 在 Sentinel 中是如何应用的?

互联网架构师小马

Java sentinel spi

kubernetes 必知必会 1 - 初识

itschenxiang

【坚果派】Flutter环境配置(Mac版)

坚果

flutter 坚果派 6 月 优质更文活动

pytorch实现前馈神经网络实验(手动实现)

Studying_swz

6 月 优质更文活动

责任链模式在 Sentinel 中的应用

互联网架构师小马

Solaris网络从9家知名投资机构获得5000万美元融资

股市老人

C语言编程—强制类型转换

芯动大师

C语言 强制类型转换 6 月 优质更文活动

Sentinel的整体工作流程分析

互联网架构师小马

Sentinel 是如何实现资源指标数据统计的

互联网架构师小马

Java sentinel

Nautilus Chain全球行分享会,上海站圆满举办

鳄鱼视界

精进:如何跳出疯狂的忙碌

老张

个人提升 如何解决问题 思维逻辑

MegaOS重磅亮相新华三领航者峰会,助推百行百业全数字化

新消费日报

Redis数据结构:高频面试题及解析

小万哥

nosql redis 面试 后端 中间件

H5 单双引号问题

Andy

微服务高并发:流量效果控制,经典限流算法

互联网架构师小马

【零售电商系列】走进亚马逊(三)

小诚信驿站

6 月 优质更文活动

Nop平台为什么是一个独一无二的开源软件开发平台

canonical

开源 低代码 开发平台

2023-06-09:什么是Redis事务?原理是什么?

福大大架构师每日一题

redis 福大大

虚拟机安装Ubuntu16并安装Ros(Kinetic)

Studying_swz

6 月 优质更文活动

请解释如何实现算法 PERMUTE-BY-SORTING,以处理两个或更多优先级相同的情形。也就是说,即使有两个或更多优先级相同,你的算法也应该产生一个均匀随机排列。

福大大架构师每日一题

福大大 ChatGPT

STM32读取BH1750光照强度数据打印到串口

DS小龙哥

6 月 优质更文活动

Karma如何使用MQTT应对日益增长的WiFi设备_语言 & 开发_徐川_InfoQ精选文章