RPC原理与实践(二)----Thrift分层模型
这一节我们从一下几个方面来讲一下Thrift的分层架构,按照官方的定义这是Thrift的网络栈,其中网络栈中分为一下几个部分,(由栈顶到栈底)server,processor,protocol,transport。下面我们按照这种结构来了解一下thrift。
- Transport层: 由于涉及到网络之间的数据传输,所以Thrift支持多种网络传输协议,比如TCP,HTTP等。Thrift Transport都是基于TCP/IP的,而底层都是通过socket来实现的。Transport层的作用是封装了网络中读写的过程,使之与系统底层实现解耦。Transport层提供的主要操作有:
- open
- close
- read
- write
- flush
除了Transport提供的以上接口外,Thrift还提供serverTransport接口来接受或者新建原始的Transport类,serverTransport主要用于在服务器端创建Transport对象来接受服务。主要的接口有:
- open
- listen
- accept
- close
至于上述方法更加具体的作用我们会在后面的源码分析中进行讲解。
2.protocol层: 协议的主要作用是用于制定数据类型进行编码和解码,这是传输的第一步,然后我们就按照一定的规则将经过编码的数据封装到报文中进行传输,而上层只需要按照固定的解析格式来解析数据就行了。下面列举thrift支持的解析格式:
- json
- xml
- 纯文本
- 二进制
3.processor: 上面的两个步骤已经实现了数据的编码,数据的传输,而数据传递到protocol层就是由processor来完成的,这一层的主要任务就是封装从输入流读取数据,输出到输出流的操作。
4. server: 在thrift中server就是真正执行过程的一方,就个人理解而言,服务器端真正进行业务流程通常最需要注意的问题就是线程,下面我们就按照线程将server进行分类:
- TSimpleServer: 一种简单的server模式,是单线程的,也就是说一个rpc请求就占用了整个业务流程,无法再接受其他请求。
- TThreadServer: 是一种多线程模型,每个请求对应一个线程,并且这个线程必须等到连接关闭才会被释放。存在很严重的弊端,当线程过多时会出现严重的内存占用。
- TThreadPoolServer: 也是一种多线程模型,但是与上面的情况不同的是这个server模式是通过线程池来完成的,同样,也必须等到连接关闭才释放线程。
- TNonblockingServer: 异步服务模型(非阻塞),必须依赖libevent来实现,具体我们后面针对源码进行分析。
这样Thrift的基本知识我们就了解的差不多的,至于怎么实践我们会在后面章节学习,从下一节开始我们开始从源码的角度来学习Thrift。
RPC原理与实践(二)----Thrift分层模型的更多相关文章
- WebSocket原理与实践(二)---WebSocket协议
WebSocket原理与实践(二)---WebSocket协议 WebSocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信问题而设计的.协议定义ws和wss协议,分别为普通请求和基 ...
- RPC原理与实践(一)----RPC原理与实现(Thrift版)
什么是RPC?为什么要使用RPC? 首先什么是RPC,RPC全称Remote Process Call,远程过程调用,现在几乎所有的公司都在使用RPC这种架构,诸如YOUTUBE使用的Thrift,B ...
- [从Paxos到ZooKeeper][分布式一致性原理与实践]<二>一致性协议[Paxos算法]
Overview 在<一>有介绍到,一个分布式系统的架构设计,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是产生了一系列的一致性协议. 为解决分布式一致性问题,在长期的探索过程中 ...
- kafka原理和实践(二)spring-kafka简单实践
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...
- 2017.2.9 深入浅出MyBatis技术原理与实践-第八章 MyBatis-Spring(二)-----配置文件详解
深入浅出MyBatis技术原理与实践-第八章 MyBatis-Spring(二) ------配置文件详解 8.2 MyBatis-Spring应用 8.2.1 概述 本文主要讲述通过注解配置MyBa ...
- Spring Boot自动配置原理与实践(二)
前言 在之前的博文(Spring Boot自动配置原理与实践(一))中,已经介绍了Spring boot的自动配置的相关原理与概念,本篇主要是对自动配置的实践,即自定义Starter,对原理与概念加深 ...
- 简述RPC原理实现
前言 架构的改变,往往是因为业务规模的扩张. 随着业务规模的扩张,为了满足业务对技术的要求,技术架构需要从单体应用架构升级到分布式服务架构,来降低公司的技术成本,更好的适应业务的发展. 分布式服务 ...
- 转:fastText原理及实践(达观数据王江)
http://www.52nlp.cn/fasttext 1条回复 本文首先会介绍一些预备知识,比如softmax.ngram等,然后简单介绍word2vec原理,之后来讲解fastText的原理,并 ...
- 从Paxos到Zookeeper 分布式一致性原理与实践读书心得
一 本书作者介绍 此书名为从Paxos到ZooKeeper分布式一致性原理与实践,作者倪超,阿里巴巴集团高级研发工程师,国家认证系统分析师,毕业于杭州电子科技大学计算机系.2010年加入阿里巴巴中间件 ...
随机推荐
- 九度OJ 1080:进制转换 (进制转换)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4583 解决:1076 题目描述: 将M进制的数X转换为N进制的数输出. 输入: 输入的第一行包括两个整数:M和N(2<=M,N< ...
- 聚聚科技——php开发笔试题及答案
聚聚科技是一个刚创立的公司,很小很小,人很少,老板感觉是个典型的北京小伙儿,戾气很重,很有个性.笔试题倒是简单: 1. echo(), print(), print_r()的区别? echo是PHP语 ...
- ubuntu16.04+cuda8.0+cudnn5.0+caffe
ubuntu安装过程(硬盘安装)http://www.cnblogs.com/zhbzz2007/p/5493395.html“但是千万不要用麒麟版!!!比原版体验要差很多!!!”开关机的时候电脑最上 ...
- ABAP 设置单元格颜色
http://blog.163.com/ronanchen@126/blog/static/172254750201161811040488/ http://blog.csdn.net/lhx20/a ...
- Redis shell
Redis shell 命令 参数 功能 redis-cli -r 将一个命令执行多次 -i 每隔几秒执行一次 -x 和|一起接收前面地输出,并执行命令 -c -a --scan/--patt ...
- Java基础教程:面向对象编程[3]
Java基础教程:面向对象编程[3] 内容大纲 基础编程 获取用户输入 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入.我们可以查看Ja ...
- 2018年东北农业大学春季校赛 E wyh的阶乘 【数学】
题目链接 https://www.nowcoder.com/acm/contest/93/E 思路 其实就是找阶乘的项中5的个数 末尾为什么会出现0 因为存在5的倍数和偶数相乘 有0存在 借鉴 htt ...
- GDB调试core文件(3)
列出一些常见问题: 一,如何使用core文件 使用core文件 在core文件所在目录下键入: gdb -c core 它会启动GNU的调试器,来调试core文件,并且会显示生成此core文件的程序名 ...
- Discuz X3游客看小图功能导致文字内容隐藏的【修复方法】
如果帖子内容以图片开始,并且开启了游客看小图功能,那么图片下面的文字也会被隐藏,这是不科学的(在图片上边的文字不会被隐藏)查看DZ源代码,发现是程序猿疏忽漏掉了</div> 下边1314学 ...
- python之menu
只有主菜单没有二级菜单的例子: from tkinter import * root=Tk() root.wm_title('同济大学财务管理系统') menubar=Menu(root)#指定菜单实 ...