写点什么

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:002987
用户头像

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

关注

评论

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

Google官方关闭binary后,Android工程师怎么办?

Changing Lin

5月日更

华云大咖说 | 安超DCM给数据中心“做主”

华云数据

架构实战营模块三作业

日照时间长

架构实战营

高并发系列:架构优化之从BAT实际案例看消息中间件的妙用

Coder的技术之路

高并发 高并发系统设计 消息队列 消息中间件

哑面爽滑肤感胶浆

C13713145387

哑面爽滑肤感胶浆

水性硅胶防滑透明浆

C13713145387

水性硅胶防滑透明浆

聊聊我的编程时如何入门的

C语言与CPP编程

c++ 编程 程序人生 C语言 数据结构与算法

Flink on Zeppelin 系列之:Yarn Application 模式支持

Apache Flink

flink

Spring-技术专题-设计模式和研究分析

码界西柚

spring 设计模式 原理分析 5月日更

采取有效云网络安全策略的5个基本步骤

云计算

Java中用户线程和守护线程区别这么大?

王磊

Java 并发编程 多线程 5月日更

立体水性石头拉浆

C13713145387

不反粘水性台板胶Waterborne table glue

C13713145387

不反粘水性台板胶

OAuth 2.0 与 OIDC

Zhang

OAuth 2.0 OIDC

融云亮相 CDEC2021 上海站 全场景通信能力赋能企业数字升级

融云 RongCloud

爽面弹力胶浆、哑面弹力胶浆

C13713145387

爽面弹力胶浆

INNOVATE 2021 圆满落幕,一起盘点那些 AI 前沿实例!

亚马逊云科技 (Amazon Web Services)

展开说说,Spring Bean IOC、AOP 循环依赖

小傅哥

Java spring 小傅哥 ioc 循环依赖

MySQL数据迁移那些事儿

Simon

MySQL 数据迁移

一次过透气浆、印一次透气浆

C13713145387

透气胶浆 一次过透气浆

夏季不塞网胶浆、夏季不堵网胶浆

C13713145387

夏季不塞网胶浆

LiteOS内核源码分析:静态内存Static Memory

华为云开发者联盟

内存管理 LiteOS 静态内存 Static Memory Membox

NumPy之:结构化数组详解

程序那些事

Python 数据分析 Numpy 程序那些事

牛仔底色保护浆(喷砂工艺)

C13713145387

牛仔底色保护浆

一文抽丝剥茧带你掌握复杂Gremlin查询的调试方法

华为云开发者联盟

调试 图数据库 Gremlin 遍历源 图遍历

百分点大数据技术团队:政务数据安全管理实践

百分点大数据团队

弹力抗刮硅油布胶浆

C13713145387

弹力抗刮硅油布胶浆

【案例】新基建下星环科技城轨智能视频分析系统建设

星环科技

postgresql数据库 timescaledb 时序库 超级表 块的压缩(compress_chunk()的应用)

Yang

数据库 postgresql

哑面防水尼龙胶浆Nylon printing paste

C13713145387

哑面防水尼龙胶浆

负载均衡续:万亿流量场景下的负载均衡实践

Coder的技术之路

负载均衡 架构 高并发 负载均衡架构

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