这一节我们从一下几个方面来讲一下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. CSS浏览器兼容性问题解决方法总结

    CSS浏览器兼容解决总结如下: 1. CSS中几种浏览器对不同关键字的支持,可进行浏览器兼容性重复定义 !important 可被FireFox和IE7识别 * 可被IE6.IE7识别 _ 可被IE6 ...

  2. ideal 快捷键

    1.输入sout --> System.out.println(); 2.输入psvm --> main函数; IntelliJ Idea 2017 免费激活方法 1. 到网站 http: ...

  3. 【题解】T54037 最开始

    传送门 题目大意: 对于\(a+ \frac 1{a^{}}=n\)求$a^{m}+ \frac 1{a^{m}} $,对\(10^9+7\)取模. 题目做法: 乍看此题,没有思路,但是如果用数学办法 ...

  4. django 设置静态文件,static 链接

    这篇文章讲的django 静态static 文件设置,还可以,供参考 http://blog.csdn.net/sinat_21302587/article/details/74059078

  5. BA优化PnP的思路

    由之前的PnP,可以求出一个R,t,K又是已知的.而且空间点的世界坐标知道,第二个相机位姿的像素坐标也是知道的.就可以利用它们进行优化.首先确定变量为const vector<Point3f&g ...

  6. hadoop —— teragen & terasort

    这两个类所在目录: hadoop-examples-0.20.2-cdh3u6.jar 中: 代码: TeraGen.java: /** * Licensed to the Apache Softwa ...

  7. 学习c语言的第14天

    #include <stdio.h> #include <string.h> struct student { int age; char sex; char name[100 ...

  8. BZOJ 1607 [Usaco2008 Dec]Patting Heads 轻拍牛头:统计 + 筛法【调和级数】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1607 题意: 给你n个数,问你除a[i]之外,有多少个数是a[i]的约数. 题解: ans ...

  9. Java_泛型_01_T与?

    二.参考文档 1.JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别

  10. Linux-NoSQL之memcached

    1.memcached安装 yum search memcached yum install -y libevent memcached libmemcached 启动:/etc/init.d/mem ...