thrift初窥
最近转到了大数据项目组,在研究sentry组件,其中client和server的通信大量使用到了thrift,因此花了点时间研究一下thrift相关的东西。 现整理内容如下。
概述
Thrift 是一种接口描述语言,主要用于实现异构服务的调用,底层的数据传输采用二进制的方式,相较于传统的json或者XML,体积更小、效率更高, thrift是RPC的一种实现。
整体架构
Thrift 包含了一个完整的堆栈结构来实现客户端和服务端的交互,如下图所示:
流程演示
使用thrift约定的规范编写一个thrift的脚本文件:
1 | namespace java com.h3c |
接下来使用thrift的编译器生成对应语言的对应文件,该文件包含了对应的接口,以java为例:class.Iface、class.Client(客户端调用逻辑)、class.Processor(服务端处理逻辑),我们只需要实现对应的接口即可: 下图依次为thrift生成的接口文件、接口文件的实现类、服务端及客户端
除此之外还可以构建其他的服务类型。
RPC和动态代理
上面的客户端代码和服务端代码通过接口的方式做了解耦合,也即是客户端调用的是接口中的方法,最终执行的 是我们自己服务端实现的业务逻辑,因此大致可以猜测应该是使用了动态代理的技术完成的,事实上,一般的RPC也基本上都是通过 动态代理机制来完成的。未完待续。。。。。