写点什么

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

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

关注

评论

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

一步一步教你用 Python 的 Requests 库发送 JSON 数据

Apifox

Python json 程序员 后端 API

Dubbo3 服务原生支持 http 访问,兼具高性能与易用性

阿里巴巴云原生

阿里云 微服务 云原生 dubbo

故障排查:PD 的 leader 切换,某 tikv 的 leader 被驱逐

TiDB 社区干货传送门

实践案例 集群管理 管理与运维 故障排查/诊断

一个热点问题的基本分析

TiDB 社区干货传送门

实践案例

揭秘Intel 3:助力新一代产品性能、能效双飞跃!

E科讯

浅谈数据管理架构Data Fabric(数据编织)及关键特征、落地应用

Aloudata

数据管理 数据孤岛 Data Fabric 数据编织

tidb 的成本经

TiDB 社区干货传送门

性能测评

TiDB br备份参数影响分析与最佳实践参考

TiDB 社区干货传送门

备份 & 恢复

你还在用ChatGPT3.5吗?来看看ChatGPT-4o有多强

蓉蓉

openai ChatGPT4 gpt4o

mac苹果电脑硬盘检测工具:SMART Utility for mac 激活版

你的猪会飞吗

Mac 软件 mac软件下载 Mac软件推 苹果电脑软件下载

同事一根烟还没抽完,我部署好了一套 TiDB 集群

TiDB 社区干货传送门

实践案例 8.x 实践

自动化测试框架选型和落地实践路径

老张

自动化测试 测试框架 技术选型

接口性能测试---locust脚本编写(一)

天翼云开发者社区

Python 性能测试 locust 脚本编写

开源大模型在私有云部署的实践方法论-移卡篇

Geek_2d6073

揭秘华为云运维中心,如何守护全球10亿用户的智慧生活体验?

华为云开发者联盟

云计算 华为云 安全运维 华为云开发者联盟 企业号2024年6月PK榜

一文让你清晰了解医疗行业采购堡垒机的必要性

行云管家

网络安全 医疗 数据安全 堡垒机

聚道云软件连接器:打通易快报与保融资金系统,实现高效财务管理

聚道云软件连接器

案例分享

win版JetBrains CLion 2024(C/C++集成开发环境) v2024.1.3 中文特别版

iMac小白

全面掌握统一任务调度监控:TASKCTL平台中Kettle作业的最佳实践与性能优化指南

敏捷调度TASKCTL

运维 kettle ETL任务 ETL系统 TASKCTL

一文简述AI自动化漏洞修复实践

云起无垠

漏洞修复 #人工智能

一文了解 TiDB 的 TTL 功能

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

元数据锁:DML 阻塞 DDL 的问题解读

TiDB 社区干货传送门

TiDB 源码解读

一个慢查询的基本分析

TiDB 社区干货传送门

性能调优 实践案例

心灵解码:数业智能心大陆AI大模型开启数字心理新篇章

心大陆多智能体

MySQL 同步 TiDB 之 kettle 性能优化测试

TiDB 社区干货传送门

性能测评

干货分享!基于 Github Action 的 taosX CI 搭建

TDengine

数据库 #TDengine

Vision Pro国行首发,狼真来了,束戈卷甲or秣马厉兵?

AR玩家

AR Rokid Vision pro 炬目AR

打造新质生产力,国产数据库如何发力?

科技热闻

有点东西,template可以直接使用setup语法糖中的变量原来是因为这个

EquatorCoco

Java Vue

1688跨境寻源通API接口丨1688代采集运系统丨1688自动采购物流发货系统

tbapi

1688 1688代采系统 1688跨境寻源通 1688代采

币安未来上币策略:推动区块链创新,超越空投和交易场景

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

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