BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Karma如何使用MQTT应对日益增长的WiFi设备

| 作者 徐川 关注 10 他的粉丝 发布于 2015年8月26日. 估计阅读时间: 3 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

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所面临的问题。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT