RPC框架之Thrift分析(转)
一、简介
1、Thrift是Facebook开发的跨语言的RPC服务框架。随后贡献给Apache开源组织。成为RPC服务的主流框架。
各版本不兼容,升级不方便
二、分析
Thrift分为服务端(server)和客户端(Client)两个对应的部分。代码分层设计,分为Transport(传输层)、Protocol(协议层)、Processor(处理层)和Server(服务层)。
1、主要的处理流程:

各部分类图:
传输层


TServer :基础抽象类,实际上类似一个容器,持有TProcessor、TTransport、TProtocol的工厂对象,AbstractServerArgs作为参数抽象类,提供一个serve()方法,用于启动服务,stop()方法停止服务。
TThreadedSelectorServer: 继承AbstractNonblockingServer。维持两个线程池,一个线程池处理I/O,另一个线程池处理请求。 TThreadPoolServer:专门的线程接受请求并交给线程池处理,完成后线程池连接释放。请求处理线程和I/O线程为同一线程。阻塞式线程池模型。
TBaseProcessor :基础抽象类,持有processMap对象,key为方法名标示,value为方法(ProcessFunction的实例),实现TProcessor的方法process,in.readMessageBegin()拿到传过来的方法名,如果存在则准备交给具体业务类执行,否则抛出无效方法的异常。
TAsyncProcessor:异步处理接口,抽象方法process(final AsyncFrameBuffer fb) TBaseAsyncProcessor:异步处理抽象类,持有processMap对象,key为方法名标示,value为方法(AsyncProcessFunction的实例),实现TAsyncProcessor的方法process(final AsyncFrameBuffer fb),AsyncProcessFunction的getResultHandler方法拿到一个AsyncMethodCallback,带执行start方法后通过sendResponse方法返回。 AsyncProcessor 由IDL生成,实现TAsyncProcessor接口并继承TAsyncProcessor类。
总结,Thrift代码分析,可以借鉴和学习的方面:
1、代码分层设计,Thrift分传输层、协议层、处理层、服务层四个层设计,上层只依赖下层,方便扩展和维护。
RPC框架之Thrift分析(转)的更多相关文章
- Spark RPC框架源码分析(一)简述
Spark RPC系列: Spark RPC框架源码分析(一)运行时序 Spark RPC框架源码分析(二)运行时序 Spark RPC框架源码分析(三)运行时序 一. Spark rpc框架概述 S ...
- Spark RPC框架源码分析(二)RPC运行时序
前情提要: Spark RPC框架源码分析(一)简述 一. Spark RPC概述 上一篇我们已经说明了Spark RPC框架的一个简单例子,Spark RPC相关的两个编程模型,Actor模型和Re ...
- Spark RPC框架源码分析(三)Spark心跳机制分析
一.Spark心跳概述 前面两节中介绍了Spark RPC的基本知识,以及深入剖析了Spark RPC中一些源码的实现流程. 具体可以看这里: Spark RPC框架源码分析(二)运行时序 Spark ...
- rpc框架之 thrift连接池实现
接前一篇rpc框架之HA/负载均衡构架设计 继续,写了一个简单的thrift 连接池: 先做点准备工作: package yjmyzz; public class ServerInfo { publi ...
- rpc框架之 thrift 学习 1 - 安装 及 hello world
thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(当然,除了二进制,也支持json等常用序列化机制),官网地址:http://thrift.apache.or ...
- RPC框架之Thrift
目前流行的服务调用方式有很多种,例如基于SOAP消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等.其中所用到的数据传输方式包括 XML,JSON 等,然而 XML ...
- rpc框架之 thrift 学习 2 - 基本概念
thrift的基本构架: 上图源自:http://jnb.ociweb.com/jnb/jnbJun2009.html 底层Underlying I/O以上的部分,都是由thrift编译器生成的代码, ...
- 开源RPC(gRPC/Thrift)框架性能评测
海量互联网业务系统只能依赖分布式架构来解决,而分布式开发的基石则是RPC:本文主要针对两个开源的RPC框架(gRPC. Apache Thrift),以及配合GoLang.C++两个开发语言进行性能对 ...
- 一个简单的"RPC框架"代码分析
0,服务接口定义---Echo.java /* * 定义了服务器提供的服务类型 */ public interface Echo { public String echo(String string) ...
随机推荐
- hive row_number等窗口分析函数
一.排序&去重分析 row_number() over(partititon by col1 order by col2) as rn 结果:1,2,3,4 rank() over(parti ...
- Android之修改用户头像并上传服务器(实现手机拍照和SD卡选择上传)
写了这么多个的APP,最近才把他这个功能写上来,就抽取其中的用户修改头像的相关操作这个功能写了这篇博客,来与大家分享,希望对你有所帮助. 案例包含了: Xutil图片上传 拍照和SD卡选择图片 图片缓 ...
- HDU-3853-期望/dp/坑
LOOPS Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others)Total Sub ...
- 个人知识管理系统Version1.0开发记录(11)
(1)匹配单个属性的关键字:(2)匹配单个对象的关键字:(3)匹配对象集合的关键字:(4)基于事件驱动的:(5)实时搜索,参考win7的搜索功能. 1.备份,java代码,数据库数据. 2.oracl ...
- poj1191 棋盘分割。 dp
连接:http://poj.org/problem?id=1191 思路:额,其实就是直接搞记录一下就可以了. #include <stdio.h> #include <string ...
- $'\r': command not found in Cygwin
这是因为windows下的回车符改为Unix下的回车符,用以下命令可以批量修改. dos2unix ./*
- 16Aspx源码论坛
16Aspx源码论坛: http://bbs.16aspx.com/index.aspx
- 高并发数据采集的架构应用(Redis的应用)
问题的出发点: 最近公司为了发展需要,要扩大对用户的信息采集,每个用户的采集量估计约3W.如果用户量增加的话,将会大量照成采集量成3W倍的增长,但是又要满足日常业务需要,特别是报表数据必要 ...
- 利用django.core.mail发送QQ邮件的配置
1.在 settings.py 的最后面加上类似这些 EMAIL_USE_SSL = True EMAIL_HOST = 'smtp.qq.com' # 如果是 163 改成 smtp.163.com ...
- Date、DateFormat、SimpleDateFormat、Calendar
package com.Date; import java.util.Date; /* * Date 表示特定的瞬间,精确到毫秒 * JDK1.0开始 * 构造方法(常用的方法,过时的不管): * D ...