【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

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

关注

评论

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

《认识产品经理》课后总结

DB

产品经理训练营

区块链交易所软件开发|区块链交易所APP系统开发

系统开发

中金数据集团与腾讯云合力拓展信息安全、区块链业务领域

CECBC

区块链产业

Soul网关源码阅读(十)自定义简单插件编写

Java 源码阅读 网关

认识产品经理(第一章上)

让我思考一会儿

联发科推出天玑1200,新一年的头道“5G甜点”究竟滋味如何?

脑极体

nodejs中使用worker_threads来创建新的线程

程序那些事

多线程 nodejs 并发控制 程序那些事 子线程

HTML(五)——建立表格

程序员的时光

程序员 大前端 七日更 28天写作

关于Dapper实现读写分离的个人思考

yi念之间

35+的测试人都去哪儿了?所谓“青春饭”真的只是在贩卖焦虑吗?

程序员阿沐

编程 程序员 软件测试 教程 测试工程师

云原生的理解

JiangX

容器 云原生 数字化转型 数字化 28天写作

讨论:Service层的接口是不是多此一举?

xcbeyond

Java 接口管理 28天写作

听了微信创始人张小龙的演讲,更加坚定Filecoin的光辉未来

时空云

分布式存储 IPFS Filecoin

亲历者说 | 完整记录一年多考拉海购的云原生之路

阿里巴巴云原生

阿里云 容器 微服务 云原生 dubbo

Seata RPC 模块的重构之路

阿里巴巴云原生

阿里云 开源 云原生 RPC seata

阿里用5大核心技术+10大高级框架+200个经典案例全面解答了并发网络编程

996小迁

编程 架构 面试 笔记 亿级流量

干货|更通用的P2P网络协议栈——Libp2p

QTech

IPFS Libp2p

区块链高水平专业人才稀缺成发展掣肘

CECBC

区块链人才

数字人民币带来更好支付体验 没有网络时也能使用

CECBC

数字人民币

Nginx实现在局域网内真正的ip_hash负载均衡​

会飞的猪

虚言妙诀终虚见,面试躬行是致知,Python技术面试策略与技巧实战记录

刘悦的技术博客

Python 面试

Dubbo源码解析(1)-整体框架介绍

冰三郎

源码分析 dubbo RPC

TARS 染色日志|收集记录特定日志

TARS基金会

微服务 运维 日志 日志分析 TARS

Spring Boot 中集成Redis

武哥聊编程

Java redis springboot SpringBoot 2 28天写作

重学JS | 玩转File API

梁龙先森

面试 大前端 编程语言 28天写作

朋友问他是否该跳槽了?我是这么跟他说的

田维常

面试

数字货币交易所APP开发|数字货币交易所软件系统开发

系统开发

大数据知识专栏 - MapReduce 的 Reduce端Join

小马哥

大数据 hadoop mapreduce 七日更

2020出行之变(一):自动驾驶的“跃渊”时刻

脑极体

1121212

熙羽1

认识产品经理(下)

让我思考一会儿

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