RPC框架Thrift

Thrift是一个轻量级跨语言远程服务调用框架,它通过自身的IDL中间语言, 并借助代码生成引擎生成各种主流语言的RPC服务端/客户端模板代码。

如何实现多语言之间的通信?

数据传输使用 socket(多种语言均支持),数据再以特定的格式 (String 等) 发送,接收方语言进行解析。

定义 thrift 的文件,由 thrift 文件(IDL) 生成双方语言的接口,model,在生成的 model 以及接口中会有解码编码的代码

img

Thrift 传输格式

  • TBinaryProtocol: 二进制格式
  • TCompactProtocol: 压缩格式
  • TJSONProtocol: JSON格式
  • TSimpleJSONProtocol: 提供 JSON 只写协议,生成的文件很容易通过脚本语言解析
  • TDebugProtocol:使用易懂的可读的文本格式,以便于debug

Thrift数据传输方式

  • TSocket:阻塞式socket
  • TFramedTransport:以frame为单位进行传输,以非阻塞式服务中使用
  • TFileTransport:以文件形式进行传输
  • TMemoryTransport:将内存用于 I/O, Java 实现内部实际使用了简单的 ByteArrayOutputStream
  • TZlibTransport:使用 zlib 进行压缩,与其他传输方式联合使用。当前无 Java 实现

Thrift支持的服务模型

  • TSimpleServer:简单的单线程服务模型,常用于测试
  • TThreadPoolServer:多线程服务模型,使用标准的阻塞式 IO
  • TNonblockingServer:多线程服务模型,使用非阻塞式 IO(需使用TFramedTransport数据传输方式)
  • THsHaServer:THsHa 引入了线程池去处理,其模型把读写任务放到线程池去处理;Half-sync/Half-async 的处理模式,Half-async 是在处理 IO 事件上(accept/read/write io),Half-sync 用于 handler 对 rpc 的同步处理
发布了18 篇原创文章 · 获赞 0 · 访问量 424

猜你喜欢

转载自blog.csdn.net/mikelv01/article/details/104898551