Thrift框架详解(原理架构及使用流程)

Thrift框架详解(原理架构及使用流程)-mikechen

Thrift框架

Thriftt是一个RPC框架(RPC是远程过程调用),与Dubbo类似,最初由Facebook开发,后面进入Apache开源项目,其主要特点是可以跨语言使用。

 

Thrift架构

Thrift架构,如下图所示:

Thrift框架详解(原理架构及使用流程)-mikechen

Thrift的整体架构,分为如下部分:

  • You Code:你的业务逻辑实现,属于业务逻辑层;
  • Service :客户端和服务端对应的服务 ;
  • TProtocol:传输协议规范,属于协议层;
  • TTransports :传输数据标准,负责以字节流的方式接收和发送消息体,属于传输层 ;
  • I/O通信:负责实际的数据传输,包括socket,文件和压缩数据流等;

 

Thrift原理

要理解Thrift的原理,主要是要理解RPC的实现原理,因为本质上Thrift也只是RPC框架的一种实现而已。

RPC的实现原理,分为下图所示:

Thrift框架详解(原理架构及使用流程)-mikechen

比如说,A服务器想调用B服务器上的一个方法。

Employee getEmployeeByName(String fullName)

整个调用过程,主要经历如下几个步骤:

1、建立通信

首先要解决通讯的问题:即A机器想要调用B机器,首先得建立起通信连接。

2、服务寻址

可靠的寻址方式,提供服务的注册与发现是RPC框架的实现基石。

比如:可以采用Zookeeper来注册服务,如下图所示:

Thrift框架详解(原理架构及使用流程)-mikechen

关系调用说明:

  •  服务生产者启动时,向服务注册中心注册自己提供的服务;
  •  服务消费者启动时,在服务注册中心订阅自己所需要的服务;
  •  注册中心返回服务提供者的地址信息个消费者;
  •  消费者从提供者中调用服务;

3、网络传输

3.1、序列化

当A机器上的应用发起一个RPC调用时,调用方法和其入参等信息,需要通过底层的网络协议如TCP传输到B机器。

由于网络协议是基于二进制的,所有我们传输的参数数据都需要先进行序列化Serialize,然后通过寻址操作,网络传输将序列化的二进制数据发送给B机器。

3.2、反序列化

当B机器接收到A机器的应用发来的请求之后,又需要对接收到的参数等信息进行反序列化操作(序列化的逆操作),即将二进制信息恢复为内存中的表达方式。

然后再进行本地调用,一般是通过生成代理Proxy去调用,通常会涉及到Java动态代理CGLIB动态代理Java字节码技术等。

4、服务调用

B机器进行本地调用之后得到了返回值,此时还需要再把返回值发送回A机器。

通常,经过以上四个步骤之后,一次完整的RPC调用算是完成了。

 

Thrift使用

1.添加thrift依赖

<dependencies>
        <dependency>
            <groupId>org.apache.thrift</groupId>
            <artifactId>libthrift</artifactId>
            <version>0.13.0</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>


    </dependencies>

2.定义接口

定义一个thrift文件,里面写上client想要调用server端的方法,如下所示:

service hello{
   string sayHello()
}

生成client/server接口文件,如下所示:

thrift --gen java hello.thrift

3.方法实现

在项目中引入接口文件,并对方法进行实现,如下所示:

Thrift框架详解(原理架构及使用流程)-mikechen

4.服务监控

服务端调用thrift中的方法对某一端口进行监控,如下所示:

Thrift框架详解(原理架构及使用流程)-mikechen

5.客户端调用

Thrift框架详解(原理架构及使用流程)-mikechen

6.执行结果

启动服务端,再启动客户端,最后执行结果,如下图所示:

Thrift框架详解(原理架构及使用流程)-mikechen

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法