Thrift框架原理及rpc认识
Catalogue
互联网服务的协议汇总
rpc
- thrift
- dubbo
others
- http
- rest
- graphql
三个问题
- 接口不通
- 各个服务经常有超时问题, 找不到原因(rest接口没有问题)
- 重试怎么用?
解答及处理思路
- 接口不通
1 | 1. 配置原因 |
这就是个初级问题
- 服务的超时等其他问题, 很莫名其妙
1 | - 业务逻辑自身耗时较长 |
怎么做?
压测, 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 | 1. 它将selector中的读写IO事件(read/write)从主线程中分离出来。交给了多个专门负责读写IO事件的SelectorThread |
TThreadedSelectorServer模式是目前Thrift提供的最高级的线程服务模型
Thrift源码分析(TThreadedSelectorServer)
- 同步线程模型(阻塞式IO服务模型)
TSimpleServer -
TThreadPoolServer - 线程池来处理并发的RPC请求.
TThreadPoolServer
用来executorService_用来处理RPC请求
该模式的处理能力受限于线程池的工作能力,当并发请求数大于线程池中的线程数时,新的请求会进入队列中排队等待处理
socket的读 写数据 和业务线程一起处理
并发数大于线程数时, 后来的请求 server没有 read(io操作), 等处理完再 read(io操作).
- read 和 业务逻辑处理 是同步进行的
Netty 线程模型及比较
链路追踪
(nlp实现, server实现) -> 业务自身耗时、接口超时问题