Thrift框架原理及rpc认识

Catalogue
  1. 三个问题
  2. 压测结果 及 各个io模式介绍
  3. 三个主题内容
    1. thrift框架
      1. 1. 分为以下几大类
      2. 2. Server的几个类型
        1. TThreadPoolServer
        2. Netty 线程模型及比较
    2. 链路追踪
    3. 服务平滑下线、服务治理、监控检查

互联网服务的协议汇总

rpc

  • thrift
  • dubbo

others

  • http
    • rest
    • graphql

三个问题

  • 接口不通
  • 各个服务经常有超时问题, 找不到原因(rest接口没有问题)
  • 重试怎么用?

解答及处理思路

  1. 接口不通
1
2
3
4
1. 配置原因 
- server服务未注册成功
- test-client服务未注册成功
- thrift未开启

这就是个初级问题

  1. 服务的超时等其他问题, 很莫名其妙
1
2
3
- 业务逻辑自身耗时较长
- thrift性能不行? 相比其他框架
- 或者不适合这个服务场景(对thrift认识不够)

怎么做?

压测, thrift各种io模式的对比和选择.

压测结果 及 各个io模式介绍

三个主题内容

  • thrift框架
  • 链路追踪 (nlp实现, server实现) -> 业务自身耗时、接口超时问题
  • 服务平滑下线、服务治理、监控检查

thrift框架

1. 分为以下几大类

  • TTransport:客户端传输层相关的类;
  • TServerTransport:服务端传输层相关的类;
  • TProtocol:序列化、反序列化相关的类;
  • TServer:服务器的IO事件流模型相关的类;
  • TProcessor:函数,接口调用相关的类;

org.apache.thrift.server.TServer - 接受请求的server. 进行请求处理.
org.apache.thrift.server.TServerEventHandler - 处理请求

2. Server的几个类型

TNonblockingServer - 提供的NIO实现的服务模式,提供非阻塞的服务处理,用一个单线程来处理所有的RPC请求。

THsHaServer (extends TNonblockingServer) - 半同步半异步的服务端模型,需要指定为: TFramedTransport 数据传输的方式。

TThreadedSelectorServer - TThreadedSelectorServer是对THsHaServer的一种扩充与完善.

1
2
1. 它将selector中的读写IO事件(read/write)从主线程中分离出来。交给了多个专门负责读写IO事件的SelectorThread
2. 同时引入worker工作线程池,负责业务处理。它也是种Half-Sync/Half-Async的服务模型。

TThreadedSelectorServer模式是目前Thrift提供的最高级的线程服务模型

Thrift源码分析(TThreadedSelectorServer)

  • 同步线程模型(阻塞式IO服务模型)

TSimpleServer -
TThreadPoolServer - 线程池来处理并发的RPC请求.

TThreadPoolServer

用来executorService_用来处理RPC请求

该模式的处理能力受限于线程池的工作能力,当并发请求数大于线程池中的线程数时,新的请求会进入队列中排队等待处理

socket的读 写数据 和业务线程一起处理

并发数大于线程数时, 后来的请求 server没有 read(io操作), 等处理完再 read(io操作).

  • read 和 业务逻辑处理 是同步进行的

Netty 线程模型及比较

链路追踪

(nlp实现, server实现) -> 业务自身耗时、接口超时问题

服务平滑下线、服务治理、监控检查