写点什么

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

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

关注

评论

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

学习Java的三个阶段(学习目标+知识点),一起努力吧!

Java架构师迁哥

99%的人都能看懂的分布式系统「补偿」机制

华为云开发者联盟

分布式 高可用 系统

阿里架构师不慎泄露内部互联网架构面试题库。你确定不看一下吗?

小Q

Java 学习 架构 面试 阿里

线上医疗未来的发展

anyRTC开发者

ios 音视频 WebRTC RTC 安卓

动图演示:手撸堆栈的两种实现方法!

王磊

Java 数据结构 算法

面试官,ThreadLocal 你要这么问,我就挂了!

小傅哥

Java 面试 小傅哥 ThreadLocal 开放寻址

不一样的面向对象(一)

书旅

php 面向对象

第13周作业

第二周 框架设计学习总结

蓝黑

极客大学架构师训练营

HashMap源码解析

彭阿三

hashmap HashMap底层原理

极客大学 - 架构师训练营 第二周

9527

TensorFlow 篇 | TensorFlow 2.x 基于 Keras 的模型构建

Alex

tensorflow keras model

高难度对话读书笔记—认知篇

wo是一棵草

Java8 之 Lambda 表达式

hepingfly

Lambda java8 新特性

C++的匿名函数(lambda表达式)

良知犹存

c++ 编程开发

聊聊布隆过滤器

大头星

LeetCode题解:83. 删除排序链表中的重复元素,迭代,JavaScript,详细注释

Lee Chen

大前端 LeetCode

【MySQL】面试官:如何添加新数据库到MySQL主从复制环境?

冰河

MySQL 高可用 主从复制

软件开发的 5 条核心原则,让工作事半功倍

沉默王二

程序员 软件开发

滴滴开源AgileTC:敏捷测试用例管理平台

滴滴技术

开源 滴滴技术 滴滴开源

网易伏羲问鼎全球AI文创大赛:用户可零门槛生产音视频动画

核桃Eason

人工智能 AI 动画 网易

免费CA证书安装配置与背后原理浅析

陈德伟

LeetCode题解:83. 删除排序链表中的重复元素,递归,JavaScript,详细注释

Lee Chen

大前端 LeetCode

双亲委派模型与 Flink 的类加载策略

Apache Flink

flink

多端消息推送的设计思考

TaurusCode

Java spring 设计模式 消息推送

架构师训练营第一期-第二周课后-作业一

极客大学架构师训练营

架构师训练营第一期-第二周课后-作业二

极客大学架构师训练营

架构师 0 期 | 大数据相关技术

刁架构

架构师训练

10个常见的软件架构模式

GuoYaxiang

架构模式 软件架构 架构设计

大作业二:总结

zcj

从 LRU Cache 带你看面试的本质

小齐本齐

算法

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