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/

RPC 工具 --Thrift(二) Thrift 异步模式

Thrift异步模式我们广泛使用thrift作为我们内部接口调用的RPC框架,而且基本上都是使用多线程请求等待应答的同步模式 。但是在一些情况下(例如大数据量同步),如果可以使用异步模式,可以优化程序...
  • u201012980
  • u201012980
  • 2016年07月10日 11:15
  • 2519

Thrift服务搭建和调用

有住ERP与有住业务系统、成本预算系统对接,按客户要求使用Thrift协议接口服务,简单学习了一下,搭建Thrift服务只要步骤如下: 一、准备必要的文件(jar包和生成Thrift java类的工具...
  • qq_32553271
  • qq_32553271
  • 2017年04月13日 20:03
  • 1346

Thrift lua example

最近做个项目,想法是nginx+lua+thrift thrift是一个比较流行的rpc框架,很多公司都有大规模使用的经验,不过网上很少有关于thrift-lua的介绍和example apache的...
  • superye1983
  • superye1983
  • 2016年04月19日 16:01
  • 1586

thrift for lua 使用记录

本人精心总结,欢迎转载,转载请注明出处:http://blog.csdn.net/einsteinlike/article/details/43700985 thrift是一个十分节省的数据传输协议,...
  • u013790419
  • u013790419
  • 2015年02月10日 11:30
  • 4195

Openresty/Lua + Thrift + HBase

Openresty/Lua使用Thrift借口访问HBase
  • for_tech
  • for_tech
  • 2016年08月30日 16:32
  • 1181

Thrift官方安装手册(译)

本篇是Thrift官网安装文档的翻译。介绍了Thrift安装的环境要求,以及在centos,Debian/Ubuntu,OS X和Windows的不同系统下的安装过程。并提出了一些安装过程中可能遇到的...
  • qq910894904
  • qq910894904
  • 2014年11月15日 00:30
  • 25815

lua不支持thrift协议

最近项目中,遇到一个需求:上游发送http协议,到我的模块,我的模块解析完之后,要将内容发送到后端模块,但发送后端时要使用thrift协议。 由于我的模块需要快速处理且保证高并发,故准备使用ngin...
  • Neuliudapeng
  • Neuliudapeng
  • 2015年06月09日 10:28
  • 734

thrift框架搭建的php服务端/客户端代码

如何通过thrift框架搭建的php服务端/客户端代码
  • shi_yi_fei
  • shi_yi_fei
  • 2017年03月17日 18:52
  • 3120

PHP通过Thrift操作Hbase

HBase是一个开源的NoSQL产品,它是实现了Google BigTable论文的一个开源产品,和Hadoop和HDFS一起,可用来存储和处理海量column family的数据。官方网址是:htt...
  • hguisu
  • hguisu
  • 2012年02月27日 07:58
  • 26619

php使用thrift操作hdfs

假定主机上已经安装了LAMP环境 1. 安装所需的依赖包 也可以参考thift官网来安装 http://thrift.apache.org/docs/install/centos   #yum in...
  • hujunqi
  • hujunqi
  • 2015年07月23日 17:45
  • 1909
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Thrift可扩展高性能的通信服务框架
举报原因:
原因补充:

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