4

【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议

 2 years ago
source link: https://blog.51cto.com/harmonyos/5113507
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议

推荐 原创

【FFH】OpenHarmony啃论文成长计划---Flatbuffers作为MQTT协议数据传输格式的性能分析

大家好! 我是深圳技术大学FSR实验室的同学,在OpenHarmony成长计划啃论文俱乐部,学习研究JSON相关的技术,并且我是第二组的成员。

①. 【FFH】OpenHarmony啃论文成长计划—为什么JSON将逐渐取代XML?
②. 【FFH】OpenHarmony啃论文成长计划—几种常见的JSON解析器比较
③. 【FFH】OpenHarmony啃论文成长计划—JSON-RPC
④. 【FFH】OpenHarmony啃论文成长计划—浅谈序列化规范

Flatbuffers:Flatbuffers作为MQTT协议数据传输格式的性能分析

JSON作为MQTT协议数据交换格式有很多缺点,比如处理的时间长等,而Google最近引入了一种名为Flatbuffers的新数据格式,与其他数据格式相比,Flatbuffers具有更好的数据格传输性能。

本文将引用文献讨论通过 MQTT 发布/订阅通信模型测试 Flatbuffers 与其他数据格式之间的性能差异。

技术发展时间及应用

 https://github.com/google/flatbuffers

我们今天要讲的开源技术Flatbuffers,是在2014年,Google 员工 Wouter van Oortmerssen 为了解决游戏中性能的问题,于是开发出了这个序列化类库。
【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议_FFH
【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议_Flatbuffer_02

Flatbuffers概述

FlatBuffers 是一个开源的、跨平台的、高效的、提供了多种语言接口的序列化类库。目前该类库提供C++, C#, C, Go, Java, JavaScript, PHP, and Python语言接口。

  • 无需解码, FlatBuffers的不同之处在于,它在一个平面二进制缓冲区中表示分层数据,这样就可以直接访问它,而不需要解码。
  • 扩展性灵活性较高,类库中支持的可选字段可以具有很好的前向/后向兼容能力
  • 跨平台,支持C++11、Java,而不需要任何依赖库;在最新的gcc、clang、vs2010等编译器上工作良好。

MQTT协议

MQTT协议是一个基于客户端-服务器的消息发布/订阅传输协议,工作在TCP/IP协议上。

它是一个轻量,简单,开放且易于实现的一个协议,通常应用于机器与机器(M2M)之间通信和物联网(IoT)设备

并且不需要很多带宽,而且开源,所以很多库都支持使用这种协议,MQTT比HTTP 1.1协议轻,当用于实时发送数据时是个不错的选择。

发布/订阅者通信中,MQTT模型充当代理,如图。

【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议_啃论文_03

MQTT具有以下特点:

  • 简易高效,MQTT一般用于处理资源较少的设备通信。
  • 不需要管理员,它可以自动响应一些数据,或者本身不需要的数据
  • 最大限度地减少了数据地发送,保持较小的带宽频率
  • 比较灵活,可以处理所有类型数据
在一个具有许多传感器数据的物联网设备中,使用MQTT协议发送传感器数据到其他终端。

​ 在使用MQTT发送数据之前,需要先进行预处理和数据转换,即将JSON数据的IoT传感器数据转换为其他几种数据格式,通过Flatbuffer类库处理过后存入缓冲区,然后将缓冲区保存到包含BIN数据的文件中,除了具有BIN格式的数据外,还有其他数据格式,例如Json,CSV和XML。

处理过后的文件大小如下:
【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议_Flatbuffer_04

有效负载(Payload)

CSV 数据格式拥有最小有效负载,其值为 0.9955 个字符/字节。而XML有效负载值最大,值为 0.9985。有效负载越大,文件大小就越大,所以有效负载值会影响文件的大小。

计算公式:

【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议_FFH_05

【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议_Flatbuffer_06

等待时间(Latency)

【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议_FFH_07

首先是发送数据的等待时间(Delivery Latency),可以看到Json是发送时间最快的,接着是XML,而 CSV Flatbuffer需要比其他数据格式花费更长的时间。也表明了Flatbuffer序列化过程对传递时的性能相对其他格式较差。如上图:

【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议_啃论文_08

然后是接收数据的等待时间(Processing Latency)。通过上图可以看到,在接收数据的时候出现了相反的结果,Flatbuffer 显示出了最佳性能。其原因也是Flatbuffer 的一个很重要的特点,就是订阅者接收信息时不需要反序列化(即不需要解码)

吞吐量(Throughput)

发送数据的吞吐量(Delivery Throughput)比较如下图:

【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议_FFH_09

接收数据的吞吐量(Processing Throughput)比较如下图:
【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议_啃论文_10

可以看到XML不过是发送还是接收数据都具备很高的吞吐量,原因就是他的文件大小较小低延迟。而Flatbuffer处于中规中矩的位置。

通过以上各项测量指标对比我们可以发现,Flatbuffers 的有效负载值(Payload)非常小,因此效率很高。测量等待时间(Latency)时,接收数据的时候所需要的等待解析时间是非常短的,但是在发送数据序列化的等待时间较长。测量吞吐量(Throughput)`时其表现也是中规中矩。

从结论上来看,Flatbuffers 序列化类库MQTT协议中用在数据存储上会非常优秀,但是用在数据发送上,相比于其他数据格式性能还是不太优秀。

①. Flatbuffers Implementation on MQTT Publish/Subscribe Communication as Data Delivery Format
②. A Survey of JSON-compatible Binary Serialization Specifications

附件链接: https://ost.51cto.com/resource/1780

 想了解更多关于鸿蒙的内容,请访问:

 51CTO和华为官方合作共建的鸿蒙技术社区

 https://ost.51cto.com/#bkwz

【FFH】OpenHarmony啃论文成长计划---Flatbuffers应用于MQTT协议_FFH_11


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK