写点什么

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

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

关注

评论

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

Flutter自适应瀑布流,深入浅出安卓开发

android 程序员 移动开发

Flutter这么火为什么不了解一下呢?(下,2020-2021京东Android面试真题解析

android 程序员 移动开发

Google又更新了:实战-MergeAdapter,hashmap底层原理

android 程序员 移动开发

pygame 读取一大堆图片进来,再获取一张图片上的那么一小块区域

梦想橡皮擦

11月日更

HarmonyOS-Service&Android-Service,android开发零基础教学

android 程序员 移动开发

HMS Core 5,Android开发教程

android 程序员 移动开发

Google大佬自述:天才程序员竟也有不为人知的秘密,看完真的学到了

android 程序员 移动开发

Handler-post和View-post的区别,android的开发语言

android 程序员 移动开发

IGG:Android内存回收机制原理是什么,flutterlistview滚动卡顿

android 程序员 移动开发

Fragment新功能,setMaxLifecycle了解一下,一文详解

android 程序员 移动开发

Fragment的使用,为什么有人说Android开发不再吃香

android 程序员 移动开发

Fragment的通信,flutter通知推送

android 程序员 移动开发

Glide加载Gif的卡顿优化思路分析,android开发项目实例记事本

android 程序员 移动开发

Glide源码难看懂?用这个角度让你事半功倍!,移动端h5页面加载慢

android 程序员 移动开发

用技术变革传统康养行业,智慧养老的正确打开方式

华为云开发者联盟

IoT 华为云 康养 智慧养老 智慧康养物联网加速器

HashMap 源码解析一、构造函数,kotlin插件

android 程序员 移动开发

Flutter的原理及美团的实践(中),直击优秀开源框架灵魂

android 程序员 移动开发

Gradle 提速:每天为你省下一杯喝咖啡的时间,移动app开发公司

android 程序员 移动开发

Gradle指南之从Groovy迁移到Kotlin,2021国内知名大厂Android岗面经

android 程序员 移动开发

Framework掌握不熟?字节跳动大牛带你系统化学习,成功定级腾讯T3-2

android 程序员 移动开发

GitHub标星8-3k的学习习惯,未来的Android高级架构师:别让这几个点毁了你

android 程序员 移动开发

GooglePlay强推的Appbundle究竟是什么?aab?不优化代码直接减少安装包大小(1)

android 程序员 移动开发

Flutter提升开发效率的一些方法和工具,零基础入门学习android

android 程序员 移动开发

GitHub标星5-3K【字节跳动大牛】手把手讲解-Android-Hook入门Demo

android 程序员 移动开发

GitHub标星9,handler机制

android 程序员 移动开发

模块二作业

@

IOC架构设计之控制反转和依赖注入(一),原理讲解

android 程序员 移动开发

Flutter混合开发(三):Android与Flutter之间通信详细指南

android 程序员 移动开发

Google 为什么以 Flutter 作为原生突破口,正式加入阿里巴巴

android 程序员 移动开发

Gradle 庖丁解牛(构建生命周期核心委托对象创建源码浅析)

android 程序员 移动开发

HarmonyOS-Service&Android-Service(1),程序员中年危机

android 程序员 移动开发

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