`

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,现在不确定是否可用

相关推荐

Global site tag (gtag.js) - Google Analytics