比较跨语言通信框架:Apache Thrift和Google Protobuf

    前两天想在微博上发表一个观点:在如今的技术体系中,能用于描述通信协议的方式不少,xml,json,protobuf,thrift,若是在有如此众多选择的基础上,在设计系统时,还自造协议,本身设计协议类型和解析方式,那么我只能说,您真的落后了,不是技术上,而是思想上。对于xml,和json咱们不作过多描述了,参考相关文档就能够了。特别是json,现在在 web系统,页游系统的先后台通信中,应用很是普遍。本文将重点介绍两种目前在大型系统中,应用比较广泛的两种通信框架,thrift和Protobuf,为何叫通信框架,而不叫通信协议?由于这两种技术,若是仅仅看成协议解析用,对于其强大的功能,就大打了折扣。java

    对于两种利器而言,首推的应该是thrift,由于其不只有对于协议封装和解析的处理,并且有完备的通信框架的实现,彻底封装了底层通信,对于使用者,只要在框架的客户端和服务器接口回调中,处理逻辑就能够了。对于其确切的描述,咱们仍是引用官方的说法吧,这样更准确些,以避免因为我本身的想法,影响了你们的理解。python

    Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift经过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,而后经过一个编译器生成不一样语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。c++

    Thrift其实是实现了C/S模式,经过代码生成工具将接口定义文件生成服务器端和客户端代码(能够为不一样语言),从而实现服务端和客户端跨语言的支持。用户在Thirft描述文件中声明本身的服务,这些服务通过编译后会生成相应语言的代码文件,而后用户实现服务(客户端调用服务,服务器端提服务)即可以了。其中protocol(协议层, 定义数据传输格式,能够为二进制或者XML等)和transport(传输层,定义数据传输方式,能够为TCP/IP传输,内存共享或者文件共享等)被用做运行时库。程序员

    Thrift支持二进制,压缩格式,以及json格式数据的序列化和反序列化。这让用户能够更加灵活的选择协议的具体形式。更完美的是,协议是可自由扩展的,新版本的协议,彻底兼容老的版本web

    那么thrift有没有缺点呢,有,并且很严重!但不影响使用,由于此框架的缺点不在于其程序自己,而在于其文档的缺失!包括中文的,及英语的相关文档。要完全的理解和熟练的把握thrift只有一个办法,读thrift的代码,通读!我很乐于作这样的事,由于读代码,并且是高质量的代码,是一件很是有乐趣的事情,这对于一个程序员来说,没有什么。固然,本着普及的须要,文档的完善化,确实须要大大的增强。固然,我也相信,thrift的文档,会日渐完善,由于如今国内的热心程序开发者,开源软件的爱好者愈来愈多,使用的同时,着手thrift文档的补充工做,是不少人愿意作的,并且也是颇有成就感的事情。json

    相比于,thrift文档的匮乏,protobuf的文档可称很是完备。这一点,我认为google开源出来的东西,确实要比facebook,在使用指南和文档完备上高出一个档次。服务器

    protobuf是google提供的一个开源序列化框架,相似于XML,JSON这样的数据表示语言,其最大的特色是基于二进制,所以比传统的 XML表示高效短小得多。虽然是二进制数据格式,但并无所以变得复杂,能够很方便的对其基于二进制的协议进行扩展,而且很方便的能让新版本的协议兼容老的版本。若是说xml太臃肿,json易解析,比xml更高效,易扩展,那么protobuf能够说,相对于json更高效,更易扩展,并且协议的保密性更强。而且protobuf是跨语言的,能够支持c(c++),java,python等主流语言,很是方便大系统的设计。protobuf号称也有service,能够基于其service的接口和回调,来完成客户端和服务器的逻辑。可是,目前版本service还仅仅停留在接口层,其底层的通信,还须要本身实现,这点确实远不如thrift完备。框架

    protobuf在google中是一个比较核心的基础库,承担着google海量服务器间的通信协议设计。在多功能,跨语言的海量系统中,如此高效,简洁,可自由扩展的通信框架,可谓经典。工具

    说了归齐,有如此好利器,咱们再设计大系统时,真的应该尽可能避免造轮子了,给一个建议,在您设计大系统以前,不妨先关注一下google code上,以及互联网上诸多的开源项目,不少时候,又快又好的设计,不少同行已经作好了,拿来用就能够了。google

相关文章
相关标签/搜索