Thrift架构

基本概念

轻量级、跨语言的RPC框架

功能特点

  • 基于IDL(接口描述语言)生成跨语言的RPC clients and servers,支持超过20种语言
  • 支持二进制的高性能的编解码框架
  • 支持NIO的底层通信
  • 相对简单的服务调用模型

Thrift架构

在介绍Thrift架构前,先了解下一般RPC框架的组成结构

RPC组成结构

RPC组成结构

包括服务器端发布和调用处理组件,网络IO组件,协议编解码组件,客户端调用组件,客户端代理组件等等

Thrift架构

架构

各部分解释可看图中英文,释义补充: 1、用户自定义类型序列化方式将在通过IDL生成的代码中实现,实际也是根据struct中的各个field调用TProtocol的基础类型序列化实现 2、RPC stub中已经提供了Service Client,其作用是构造Thrift调用参数,发起调用,解析结果;而白色部分需用户自己写的Client是实例化TProtocol、TTransport组件,设置业务参数,通过调用Service Client发起请求

Thrift组件

TProtocol 协议和编解码组件 TTransport IO传输组件 TProcessor 服务调用处理组件

TServer,服务器网络IO

IDL 服务描述组件,负责生产跨平台客户端

协议就是约定数据的传输方式,如何底层报文中解析出结构化、有含义的数据,因为底层报文是不感知具体数据含义的。对于一个RPC调用的协议来说,要传输的数据主要有: 调用方 1.方法的名称,包括类的名称和方法的名称 2.方法的参数,包括类型和参数值 3.一些附加的数据,比如附件,超时事件,自定义的控制信息等等 返回方 1.调用的返回码 2.返回值 3.异常信息

Thrift协议具体约定参考:https://www.kancloud.cn/digest/thrift/118985

IDL 服务描述语言

IDL语法

namespace 定义包名 struct 定义服务接口的参数,返回值使用到的类结构。如果接口的参数都是基本类型,则不需要定义struct service 定义接口

支持的数据类型

bool 布尔型
byte 8位整数
i16  16位整数
i32  32位整数
i64  64位整数
double 双精度浮点数
string 字符串
binary 字节数组
list<i16> List集合,必须指明泛型
map<string, string> Map类型,必须指明泛型
set<i32> Set集合,必须指明泛型

生成的类包括5部分

接口类型,默认名称都是Iface。这个接口类型被服务器和客户端共同使用。服务器端使用它来做顶层接口,编写实现类。客户端代码使用它作为生成代理的服务接口。 会自动生成同步调用和异步调用的两个接口。 客户端类型,一个同步调用的客户端Client,一个异步调用的客户端AsyncClient

Processor,用来支持方法调用,每个服务的实现类都要使用Processor来注册,这样最后服务器端调用接口实现时能定位到具体的实现类。

方法参数的封装类,以"方法名_args"命名

方法返回值的封装类,以"方法名_result"命名

参考

http://blog.csdn.net/iter_zc/article/details/39496439

转载于:https://my.oschina.net/hebaodan/blog/1595803

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值