`

protobuf厂内通讯模块的设计的思考

 
阅读更多

一直以来比较关心高性能通讯模块的设计,最近看到两篇好文,由此想到曾经参与的几个通讯模块的设计和实现,跟大家分享思路。

 

首先来分享好文:

http://agapple.iteye.com/blog/859052

这一篇讲得是google protobuf协议和其他序列化的性能测试。朋友们看了一定会砰然心动,protobuf如此之高的通讯效率当然是求之不得。新浪微博IM各模块之间也采用protobuf作为通讯协议,TimYang写过文章比较google protobuf和facebook Thrift之间的性能。也证实了protobuf还是好东东。加之MINA可以很好的和此类通讯协议结合,无非是编解码嘛,一行伪代码搞定:

 

mySocketAcceptor.getFilterChain().addFirst("protobuf", new ProtocolCodecFilter(ProtobufCodecFactory.newInstance(MyProBufPacket.getDefaultInstance())));

 

http://www.wuzesheng.com/?p=1258

第二篇是讲解为什么protobuf有如此效率,大家慢慢品味吧。

 

优点:

使用protobuf二进制协议高效的传输,在通讯压力大得场合非常合适。

 

缺点:

私有协议,如果是基于公共协议的中间件。想推广使用,有一定阻力。

 

还是那句话:场景和应用决定构架,技术只是手段,客户的需求才是根本。

引用TimYang的话作为结尾

 

一个构架师的经验主要在于经历了多少场景,即解决了特定场景下的要求的经验
以及试错过程中积累的经验和对各种主流技术的掌握

1
0
分享到:
评论
4 楼 johnzhou 2012-05-28  
maoyidao 写道
背靠Google这棵大树,不用太担心了。protobuf自08年开源以来得到了业内积极的评价,且Google开源产品的质量向来是可信的。参考protobuf官网:https://developers.google.com/protocol-buffers/docs/overview,protobuf相比XML,速度快20到100倍,大小缩小3-10倍;因此protobuf不仅仅可以用来做数据传输,还可以用来压测存储。

也可以考虑Facebook的thrift,网上有朋友测过,两者性能差不多。但因Facebook风头正劲,根据程序猿的兴趣,使用thrift也无不可。

国内的案例,新浪微博大量使用了protobuf。

谢谢lz的补充介绍,十分感谢!
3 楼 maoyidao 2012-05-26  
protobuf的典型使用场景,我想还是要从解析速度快和压缩率高这两个方面入手。

1,如果是服务器间大规模的数据通信,我想节省带宽,好protobuf提供高效压缩。
2,如果是DB或者数据存储磁盘空间不够。好,protobut提供了高效压缩。
3,如果想提高服务器吞吐能力。好,protobuf解析速度比XML快20到100倍,可以高效的处理请求。

但是更重要的是,考虑哪些场景不适合protobuf?

1,想做一个通用协议?也XML/json更合适些。
2,C/S模式?每个Client发到Server的数据有限,此时带宽和服务器吞吐能力主要瓶颈在连接数上,一般通过扩大集群规模的分布式方式解决,可能前置一个LB更合适些。
2 楼 maoyidao 2012-05-26  
背靠Google这棵大树,不用太担心了。protobuf自08年开源以来得到了业内积极的评价,且Google开源产品的质量向来是可信的。参考protobuf官网:https://developers.google.com/protocol-buffers/docs/overview,protobuf相比XML,速度快20到100倍,大小缩小3-10倍;因此protobuf不仅仅可以用来做数据传输,还可以用来压测存储。

也可以考虑Facebook的thrift,网上有朋友测过,两者性能差不多。但因Facebook风头正劲,根据程序猿的兴趣,使用thrift也无不可。

国内的案例,新浪微博大量使用了protobuf。
1 楼 johnzhou 2012-05-16  
hi,你好,请教,现在市场上有那些大的产品是在使用protobuf的典型案例?我们在做移动互联网的产品,想使用protobuf,现在不确定是否可用

相关推荐

    Redis+protobuf开发的即时通讯服务器.zip

    Redis+protobuf开发的即时通讯服务器.zipRedis+protobuf开发的即时通讯服务器.zipRedis+protobuf开发的即时通讯服务器.zipRedis+protobuf开发的即时通讯服务器.zipRedis+protobuf开发的即时通讯服务器.zipRedis+...

    用于读取和写入 Protobuf 消息的 Redis 模块.zip

    redis-protobuf加载 redis-protobuf入门redis-cliC++ 客户端Python 客户端命令小路PB设置PB网PB.DEL附加PB莱恩PB清除PB合并PB类型PB架构作者概述这是一个用于读写protobuf消息的Redis模块syntax="proto3";...

    DesignModel-master_设计模式_raysits_protobuf_zip_

    在"DesignModel-master"项目中,可能包含了一些示例,展示了如何在C++中结合设计模式和protobuf进行开发。例如,可能会有一个工厂模式的例子,用于创建protobuf消息的不同类型;或者使用观察者模式来处理protobuf...

    protobufprotobufprotobufprotobuf

    Protocol Buffers的设计目标是提供一种更高效、更灵活的数据序列化方法,相比XML、JSON等格式,它在数据传输和存储时能占用更小的体积,且解析速度更快。 在protobuf的使用过程中,主要包括以下步骤: 1. 定义数据...

    compile_protobuf_protobuf:compile_protobuf_

    在标签"protobuf:compile protobuf"中,"protobuf"是指protobuf库本身,而"compile protobuf"是指执行protobuf编译器`protoc`来生成目标语言的代码。这个过程通常分为以下几个步骤: 1. **定义消息类型**:在.proto...

    protobuf中文学习文档

    3. **API设计**: 在RESTful API中,protobuf作为消息格式可以提供高效的序列化和反序列化。 **六、protobuf工具链** 1. **protoc编译器**: 主要用于将.proto文件转换为目标语言的源代码。 2. **protobuf库**: 提供...

    protobuf source v3.21.12

    protobuf是Protocol Buffers的缩写,它是一种高效的数据序列化协议,由Google开发并开源。Protocol Buffers允许开发者定义数据结构的模式(schema),然后生成相应的语言绑定(如C++、Java、Python),使得应用程序...

    google protobuf 最新源代码

    google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf 最新源代码google protobuf ...

    protobuf-lua

    protobuf-lua是一个专门为Lua语言设计的Google Protocol Buffers(protobuf)实现。Protocol Buffers是一种高效的数据序列化协议,由Google开发,用于结构化数据的序列化和反序列化。它与XML、JSON等格式相比,更小...

    protobuf3.20.1-windows64

    总的来说,protobuf3.20.1-windows64是Google Protocol Buffers的一个发行版,专为Windows 64位系统设计,是开发高效、跨平台应用程序的重要工具,尤其在处理大量结构化数据的场景下,它的优势尤为明显。无论是在...

    protobufDemo.rar

    protobufDemo protobuf例程protobufDemo protobuf例程protobufDemo protobuf例程protobufDemo protobuf例程protobufDemo protobuf例程protobufDemo protobuf例程protobufDemo protobuf例程

    protobuf-3.5-src

    **protobuf-3.5-src** 是一个包含 Google Protocol Buffers(简称protobuf)版本3.5.0源代码的压缩包。Protocol Buffers 是一种高效、灵活且自动化的数据序列化机制,由 Google 开发,广泛应用于分布式系统和跨平台...

    protobuf-for-with-python

    Python的protobuf库提供了`protobuf`模块,其中包含`Message`类和其他辅助函数,用于在Python程序中操作这些序列化的数据。 在使用protobuf与Python时,以下是一些关键知识点: 1. **.proto文件**:这是定义...

    Protobuf2.6 SourceCode

    4. **doc目录**:包含Protobuf的文档,包括API参考、教程和设计文档,对于理解和使用Protobuf非常有帮助。 5. **Makefile和configure脚本**:用于构建和安装protobuf库及工具,这些脚本在Unix-like系统上使用,而在...

    protobuf.js 6.8.8 下载

    5. **模块化设计**:6.8.8版本可能采用了模块化设计,便于开发者按需加载和组合protobuf定义,降低内存占用。 6. **兼容性**:protobuf.js 6.8.8 应该保持与较新版本的protobuf兼容,同时可能修复了之前版本的一些...

    Protobuf-master包

    **protobuf-master** 是一个包含 Protocol Buffers(简称 Protobuf)源代码和资源的项目,主要服务于 Android、Java 开发者。Protocol Buffers 是 Google 推出的一种数据序列化协议,它提供了一种高效、灵活且自动化...

    protobuf3.10.0.rar

    3. **版本兼容**:protobuf的设计考虑了版本升级的问题。即使新旧版本的protobuf数据结构发生变化,也能保证向前和向后的兼容性,使得系统升级更加平滑。 4. **API生成**:通过.proto文件,protobuf编译器可以自动...

    protobuf2.6.1

    protobuf2.6.1是一个流行的开源数据序列化协议,由Google开发,用于高效地存储和传输结构化数据。Protocol Buffers(简称protobuf)是比XML、JSON等格式更小巧、更快、更简单的一种序列化机制。它允许你定义数据结构...

    protobuf 3.11版本,静态编译

    protobuf是Protocol Buffers的简称,它是Google开发的一种数据序列化协议,用于结构化数据的序列化,类似于XML、JSON,但更小、更快、更简单。protobuf 3.11版本是一个稳定且广泛使用的版本,提供了许多改进和新特性...

    protobuf-2.5.0下载

    protobuf,全称Protocol Buffers,是由Google开发的一种数据序列化协议,它允许开发者定义数据结构,然后生成能够读写这些结构的代码,适用于多种编程语言,包括C++, Java, Python等。protobuf-2.5.0是该协议的一个...

Global site tag (gtag.js) - Google Analytics