Thrift可扩展高性能的通信服务框架

转载 2015年07月07日 15:34:40
Thrift可扩展高性能的通信服务框架
The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.

thrift是Facebook开源出来的项目,现在交给了Apache来管理。thrift是用来针对不同语言系统之间数据调用的。thrift支持c,c++,Erlang,java,python,ruby,php等语言。thrift允许定义一个简单的定义文件中的数据类型和服务接口,这个文件就是IDL(Interface Definition Language),以作为输入文件,编译器生成代码。简单的说就是thrift定义了统一的文件(对象或者结构体,服务接口),使用thrift的编译器能够生成对应语言的代码文件。thrft之所以是跨语言的原意就是他通过语言无关的自定义语言来生成语言相关的代码。
 
优点:
1. One-stop shop,相对于protobuf,序列化和RPC支持一站式解决,如果是pb的话,还需要考虑选择RPC框架,现在Google是开源了gRpc,但是几年以前是没有第一方的标准解决方案的
2. 特性丰富,idl层面支持map,protobuf应该是最近才支持的,map的key支持任意类型,avro只支持string,序列化支持自定义protocol, rpc支持thread pool, hsha, no blocking 多种形式,必有一款适合你,对于多语言的支持也非常丰富
3. RPC和序列化性能都不错,这个到处都有benchmark,并不是性能最好的,但是基本上不会成为瓶颈或者短板
4. 有很多开源项目的周边支持都是thrift的,hbase提供thrift服务,hive,spark sql,cassandra等一系列对外的标准服务接口都是thrift的以支持多语言。
5. Column Storage的话,parquet支持直接通过thrift idl转换,如果在Hadoop集群上存储数据,elephant-bird 支持得很好,你可以很方便地针对thrift的数据通过pig写dsl,如果你希望在rpc服务外做一系列工作,可以用finagle包装一层。不过,这部分对于protobuf和avro支持一般也不错
用的公司比较多,支持各大语言跨语言通讯。
erlang c c++ java php js ruby 等等。用起来简单。它已经把数据的通信跟数据格式压缩、解析做好了。是一个功能完备的rpc方案。
根据性能需求,server端可以有多线程的blocking server和noblocking server,也提供httpservice。
在生产环境中,ThriftServer的选择是很重要的。建议在TThreadPoolServer和 TThreadedSelectorServer中进行相应的选择。个人建议选择TThreadedSelectorServer,因为其支持网络NIO,在一个业务的处理过程中,很大一部分时间会阻塞在网络通信上,并且TThreadedSelectorServer能吞吐更多的网络连接,而ThreadPoolServer吞吐的网络连接数和其启动的线程数量有关,如果存在客户端调用代码未正常关闭Transport时,其网络连接只有在时间超时时才会正常释放掉,造成服务的无法正常提供。

缺点么,和其他facebook开源的项目都有类似的问题,只管拉不管擦
1. 基本没有官方文档,使用参考可以看看有人专门写的这个 Thrift: The Missing Guide
2. RPC在 0.6.1 升级到 0.7.0 是不兼容的!这个对于早于 0.6.1 开始使用的用户来说是个大坑
3. bug fix和更新不积极,好在序列化和RPC服务都不是太复杂的问题,需要考量的设计问题不多,自己维护patch的成本不高,如果我没有记错的话,0.6.1的java的ThreadPool Server是会有Thread死亡之后的Thread泄露问题的
4. Facebook今年说,我们开源了一个新的performance更好的 fbthrift,你说你该用apache thrift还是fbthrift呢?


我们公司用的thrift实现客户端和服务器通讯,用norbert实现负载均衡。用thrift的优点是省流量,跨语言,开发简便。用norbert的优点是能快速地搭建可靠,实用,灵活的集群。thrift的缺点是完全静态化,即使用到的数据结构都必须事先定义,中途不能更改。若数据结构发生变化,必须重新定义,编译。



Thrift简单入门: http://my.oschina.net/u/2250599/blog/466156

thrift下C++服务器和客户端开发: http://blog.sina.com.cn/s/blog_59c4c2ed01010pwe.html

Thrift的使用与优化:   http://autumnrain-zgq.iteye.com/blog/1772943

Thrift Servers性能对比:    http://liyonghui160com.iteye.com/blog/2088945

thrift快速入门实例:  http://www.54chen.com/java-ee/thrift-quick-start.html

http://daoexception.iteye.com/blog/1869822

http://www.oschina.net/p/thrift

http://thrift.apache.org/

相关文章推荐

Thrift连接池优化

背景        众所周知,thrift是一款很优秀的rpc框架,公司今年在部门间推行thrift框架来提高部门间的通信效率,作者本人的工作内容主要是作为客户端(本人所在组为服务端,对于提供服务的其...

thrift的TTransport连接池注意事项[Java版本说明]

使用thrift进行通信,如果采用长连接模式,那么一般做法是基于TTransport的连接池做法。 1.预先对要通信的服务端,创建足够的TTransport实例。 2.在进行通过通信过程中,再从中获取...

thrift性能测试并分析

一、测试结果分析: 经过测试发现,在性能方面thrift远远高于http协议 简单比较一下: 1、http协议简单,可以通过json(xml数据格式,数据比较臃肿,解析麻烦,不建议使用)的方式传送...

VB 串口编程 开发心得

接触vb的串口控件也有一段时间了 经常被它弄得晕头转向 最重要的是死机  死机  死机   其實關鍵在於 寫好接收函數 现将自己的经验写下来供大家参考 1,使用串口   ...

开源界面库Duilib

开源界面库Duilib who1753资源分享围观1550次2条评论 简介 国内首个开源 的directui 界面库,开放,共享,惠众,共赢,遵循bsd协议,可以...
  • anlun
  • anlun
  • 2014-12-28 10:29
  • 633

HDU - 5723 E - Abandoned country——最小生成树+dfs求任意两点距离的和

题意:有n个村庄,m条道路,要求寻找n个村庄的最小生成树,并且求出最小生成树中任意两点距离的期望 思路:最小生成树用模板生成,因为选中任意一对点的概率都是相同的,所以期望就是任意两点距离的和除以总情...

VC 界面库 皮肤库

CJLib(mfc扩展开发包,是xtreme toolkit的前生,但xtreme toolkit收费了)http://www.codejock.com/BCGControlBar(收费,mfc扩展开...

编写串口通信的要注意的地方

今天编了个串口通信的程序,监控一直接收不到数据,搞了半天终于解决了,给大家分享下。 编写监控一定要注意帧头的判断。 假设你的帧头是0xbb,0x65, char buff[1024];是存储缓存的地方...

【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

新建项目 打开VS2015,找到菜单项[文件->新建->项目],打开向导对话框: 注意我们的选择项: 1.     运行平台:.NET FrameWork 4.5 2.     ...

RingSDK技术文档:如何实现ListView列的隐藏

想实现ListView在详细资料视图下列的隐藏,网上搜了一下实现方法,发现不外乎两种方法,一种是删除列,这是真正的隐藏,但是得记录删除的每一个单元格的内容,以备该列再次需要显示时把内容回填。相当于把L...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)