这一节我们从一下几个方面来讲一下Thrift的分层架构,按照官方的定义这是Thrift的网络栈,其中网络栈中分为一下几个部分,(由栈顶到栈底)server,processor,protocol,transport。下面我们按照这种结构来了解一下thrift。

  1. 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分层模型的更多相关文章

  1. WebSocket原理与实践(二)---WebSocket协议

    WebSocket原理与实践(二)---WebSocket协议 WebSocket协议是为了解决web即时应用中服务器与客户端浏览器全双工通信问题而设计的.协议定义ws和wss协议,分别为普通请求和基 ...

  2. RPC原理与实践(一)----RPC原理与实现(Thrift版)

    什么是RPC?为什么要使用RPC? 首先什么是RPC,RPC全称Remote Process Call,远程过程调用,现在几乎所有的公司都在使用RPC这种架构,诸如YOUTUBE使用的Thrift,B ...

  3. [从Paxos到ZooKeeper][分布式一致性原理与实践]<二>一致性协议[Paxos算法]

    Overview 在<一>有介绍到,一个分布式系统的架构设计,往往会在系统的可用性和数据一致性之间进行反复的权衡,于是产生了一系列的一致性协议. 为解决分布式一致性问题,在长期的探索过程中 ...

  4. kafka原理和实践(二)spring-kafka简单实践

    系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...

  5. 2017.2.9 深入浅出MyBatis技术原理与实践-第八章 MyBatis-Spring(二)-----配置文件详解

    深入浅出MyBatis技术原理与实践-第八章 MyBatis-Spring(二) ------配置文件详解 8.2 MyBatis-Spring应用 8.2.1 概述 本文主要讲述通过注解配置MyBa ...

  6. Spring Boot自动配置原理与实践(二)

    前言 在之前的博文(Spring Boot自动配置原理与实践(一))中,已经介绍了Spring boot的自动配置的相关原理与概念,本篇主要是对自动配置的实践,即自定义Starter,对原理与概念加深 ...

  7. 简述RPC原理实现

      前言 架构的改变,往往是因为业务规模的扩张. 随着业务规模的扩张,为了满足业务对技术的要求,技术架构需要从单体应用架构升级到分布式服务架构,来降低公司的技术成本,更好的适应业务的发展. 分布式服务 ...

  8. 转:fastText原理及实践(达观数据王江)

    http://www.52nlp.cn/fasttext 1条回复 本文首先会介绍一些预备知识,比如softmax.ngram等,然后简单介绍word2vec原理,之后来讲解fastText的原理,并 ...

  9. 从Paxos到Zookeeper 分布式一致性原理与实践读书心得

    一 本书作者介绍 此书名为从Paxos到ZooKeeper分布式一致性原理与实践,作者倪超,阿里巴巴集团高级研发工程师,国家认证系统分析师,毕业于杭州电子科技大学计算机系.2010年加入阿里巴巴中间件 ...

随机推荐

  1. Python爬虫--初识爬虫

    Python爬虫 一.爬虫的本质是什么? 模拟浏览器打开网页,获取网页中我们想要的那部分数据 浏览器打开网页的过程:当你在浏览器中输入地址后,经过DNS服务器找到服务器主机,向服务器发送一个请求,服务 ...

  2. 支付宝异步通知notify_url接收不了问题解决(转)

    此处return_url可以成功跳转回网站页面但notify_url却接收不到支付宝的异步通知.已保证notify_url是一个外网可以访问的网址 1.网站用的是ssh框架,当支付宝发通知到我这个ac ...

  3. JS表自动取值赋值

    /* * * V1.0.0 表单自动取值.赋值插件 * 表单类型:text radio select-one checkbox textarea * 注意项: * 1.表单必须设置name属性 * 调 ...

  4. Gemini.Workflow 双子工作流入门教程一:定义流程:流程图属性

    简介: Gemini.Workflow 双子工作流,是一套功能强大,使用简单的工作流,简称双子流,目前配套集成在Aries框架中. 下面介绍本篇教程:流程定义:流程图属性. 步骤一:在流程管理的流程定 ...

  5. vue-cookies、极验滑动验证geetest、vue-router的导航守卫

    一 . vue-cookies 参考文档简书:https://www.jianshu.com/p/535b53989b39 参考文档npm:https://www.npmjs.com/package/ ...

  6. pip 安装模块报错解决

    系统版本 ubuntu  Kylin 16.04 LTS 报错1:安装pip3 安装 Django 总是提示time out,无法安装. 改用国内源: 豆瓣源: sudo pip3 install - ...

  7. <JAVA8新增内容>关于匿名内部集合和lambda表达式

    要想说清楚JAVA中的Lambda表达式,必须想讲一下匿名内部类来帮助理解本质. 一.匿名内部类 匿名内部类适合创建那种只需要一次使用的类,例如前面介绍命令模式时所需要的Command对象,匿名内部类 ...

  8. 粉红色织梦CMS企业模板

    粉红色织梦CMS企业网站模板,粉红色,织梦CMS,织梦企业模板,CMS模板. 模板地址:http://www.huiyi8.com/sc/7247.html

  9. RQNOJ 311 [NOIP2000]乘积最大:划分型dp

    题目链接:https://www.rqnoj.cn/problem/311 题意: 给你一个长度为n的数字,用t个乘号分开,问你分开后乘积最大为多少.(6<=n<=40,1<=k&l ...

  10. insert …select …带来的死锁问题

    mysql中 insert …select …带来的问题 当使用insert...select...进行记录的插入时,如果select的表是innodb类型的,不论insert的表是什么类型的表,都会 ...