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官网安装文档的翻译。介绍了Thrift安装的环境要求,以及在centos,Debian/Ubuntu,OS X和Windows的不同系统下的安装过程。并提出了一些安装过程中可能遇到的...

开源RPC(gRPC/Thrift)框架性能评测

海量互联网业务系统只能依赖分布式架构来解决,而分布式开发的基石则是RPC;本文主要针对两个开源的RPC框架(gRPC、 Apache Thrift),以及配合GoLang、C++两个开发语言进行性能对...

《分布式服务框架原理与实践》读书笔记之第三章 通信框架

感谢作者,受益匪浅,根据读书过程,进行的整理以便日后再来看。 1.技术点 1.1 长连接还是短连接? 长连接更加省资源,长连接只有在首次创建或者链路重连才会创建链路,实现多消息复...

thrift介绍及应用(一)—介绍

一、概述         Thrift是Apache下的一个子项目,最早是Facebook的项目,后来Facebook提供给Apache作为开源项目,在官网上,Thrift被描述为“Scalable ...
  • guxch
  • guxch
  • 2013年09月29日 14:30
  • 12588

微服务框架Finagle介绍 Part3: 在Finagle中开发基于Thrift协议的应用

原文地址:http://skaka.me/blog/2016/05/02/finagle3/ 在上篇文章中我们开发了一个基于Http协议的echo服务端和客户端. 这篇文章我们将开发一个基于Thr...

分布式服务框架学习笔记7 Thrift入门试用

Thrift是facebook开发,08年进入apache孵化器 官网地址 : https://thrift.apache.org使用过程下载配置新建Maven项目pom.xml...
  • xundh
  • xundh
  • 2017年03月09日 10:40
  • 652

iqiyi Thrift服务框架整体介绍

爱奇艺服务框基础–Thrift Thrift整体结构 爱奇艺服务框架的整体结构基于thrift RPC机制实现。Thrift于2007年由Facebook提交Apache基金会正式开源,是一款RP...

Thrift:可扩展的跨语言服务实现

  • Andy_YF
  • Andy_YF
  • 2012年03月26日 20:48
  • 1027

轻量级微服务框架的通信架构

关于微服务通信基础知识可先行参考文章: 中文连接:http://dockone.io/article/549 英文连接:https://www.nginx.com/blog/buildin...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Thrift可扩展高性能的通信服务框架
举报原因:
原因补充:

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