Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。
RPC
RPC是远程过程调用(Remote Procedure Call),通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
比如:比如两个不同的服务 A、B 部署在两台不同的机器上,那么服务 A 如果想要调用服务 B 中的某个方法该怎么办呢?使用 HTTP请求 当然可以,但是可能会比较慢而且一些优化做的并不好。 RPC 的出现就是为了解决这个问题。
目前的 RPC 框架大致有两种不同的侧重方向,一种偏重于服务治理,有Dubbo、Motan 等。适用于大型服务的微服务化拆分以及管理。
另一种偏重于跨语言调用。有 Thrift、gRPC 等,这一类的 RPC 框架重点关注于服务的跨语言调用。
总结来说,Thrift是一种RPC框架。
Thrift重定义
Thrift源于大名鼎鼎的facebook之手,对于当时的facebook来说创造thrift是为了解决facebook系统中各系统间大数据量的传输通信以及系统之间语言环境不同需要跨平台的特性。所以thrift可以支持多种程序语言,例如: C++, C#等等。在多种不同的语言之间通信thrift可以作为二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务。Thrift是一个轻量级、跨语言的RPC框架,主要用于各个服务之间的RPC通信。它通过自身的IDL中间语言, 并借助代码生成引擎生成各种主流语言的RPC服务端/客户端模板代码。
Thrift的优缺点
优点:
开发速度快:通过编写RPC接口Thrift IDL文件,利用编译生成器自动生成服务端骨架 (Skeletons和客户端桩(Stubs)。从而省去开发者自定义和维护接口编解码、消 息传输、服务器多线程模型等基础工作。
接口维护简单:通过维护Thrift格式的IDL (接口描述语言)文件(注意写好注释),即可作为给 Client使用的接口文档使用,也自动生成接口代码,保持代码文档的一致
学习成本低:容易学,代码简单
多语言/跨语言支持:支持多种语言
稳定广泛使用:Thift在很多开源项目中已经被验证是稳定和高效的,例如 Cassandra, Hadoop. HBase等; 国外在Facebook中有广 泛使用,国内包括百 度、美团小米,和饿 了么等公司。
缺点:
1.基本没有官方文档
2.RPC在 0.6.1 升级到 0.7.0 是不兼容的
Thrift框架:
Thrift软件栈分层从下向上分别为:传输层、、协议层、处理层和服务层。
- 传输层(Transport Layer):传输层负责直接从网络中读取和写入数据,它定义了具体的网络传输协议;比如说TCP/IP传输等。
- 协议层(Protocol Layer):协议层定义了数据传输格式,负责网络传输数据的序列化和反序列化;比如说JSON、XML、二进制数据等。
- 处理层(Processor Layer):处理层是由具体的IDL(接口描述语言)生成的,封装了具体的底层网络传输和序列化方式,并委托给用户实现的Handler进行处理。
- 服务层(Server Layer):整合上述组件,提供具体的网络线程/IO服务模型,形成最终的服务。
官网不能访问,可以参考这个博主的下载,但是也需要翻墙的软件。下载
在该文章里由讲述安装的步骤。可以参考。
Thrift为什么能跨语言Thrift采用IDL(Interface Definition Language)来定义通用的服务接口,然后通过Thrift提供烦人编译器,可以将服务接口编译成不同语言编写的代码,通过这个方式来实现跨语言的功能。
Thrift的使用
请见这个链接里使用教程



