Thrift简介

作者: 42e1dd428f25 | 来源:发表于2017-04-26 13:39 被阅读75次

thrift最初由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言 ActionScript3, glibc, cocoa(iOS), C++, C#, delphi, erlang, go, haskell, html, java, javame(山寨机), jquery, node.js, Ocaml, perl, php, python, ruby, smalltalk, xsd。

简单的说,就是可以让人快速的写Socket Server(服务器)和Client(客户端)。

那么为什么要用thrift开发呢?主要有两个原因:

  • 一个是因为thrift本身帮你封装了很多基本的东西,你不需要自己去写socket里面的bind,accept之类的,以及他们的逻辑。可以很快速的开发基于进程的,线程的,SSL的socket。

  • 第二个理由是标准化,跨语言和跨平台,windows不算在其中。主要是在各种Posix兼容的操作系统中都可以不需要改造基本直接可用,支持的语言种类也很多,基本你会写的,他都支持。你不会写的,他也支持。类似的项目还有ICE和Avro,但是感觉都没有thrift做的易用性好。而且这是facebook开源的诸多项目中,为数不多的能正常编译的软件。

RPC

在了解 Thrift 之前,先来简单科普一下什么是 RPC(远程过程调用)。

先看下面这个栗子:

// 这是一个最简单不过的本地函数调用代码,调用方和被调用方都在一个程序内部,属于进程内调用。
public void invoke(){
    String param1 = "my String 1";
    String param2 = "my String 2";
    String res = getStr(param1, param2);
    System.out.println("res=" + res)
}
private String getStr(String str1, String str2){
    return str1 + str2;
}

CPU 在执行调用时切换去执行被调用函数,执行完后再切换回来执行后续的代码。对调用方而言,执行被调用函数时会阻塞(非异步情况下)直到调用函数执行完毕。过程如图 1

图1

接下来看个 RPC 调用的栗子:

// 这是一个进程间调用,调用方和被调用方不在同一个进程(甚至不同的服务器或机房)。
public void test(){
    TestQry.Client client = getClient("192.168.4.222", 7800, 5000);
    String param1 = "my String 1";
    String param2 = "my String 2";
    String res = client.getStr(param1, param2);
    System.out.println("res=" + res);
}
private TestQry.Client getClient(String ip, int port, int timeOut) throws Exception{
    TSocket tSocket = new TSocket();
    TTransport transport = new TFramedTransport(tSocket);
    tTransport.open();
    TProtocol protocol = new TBinaryProtocol(tTransport);
    return new TestQry.Client(protocol);
}

进程间调用需要通过网络来传输数据,调用方在执行 RPC 调用时会阻塞(非异步情况下)直到调用结果返回才继续执行后续代码。过程如图 2

图2

一言以蔽之,RPC 是一种通过网络从远程计算机程序上请求服务的方式,它使得开发包括网络分布式多程序在内的应用程序更加容易。

Thrift 最初是由 Facebook 开发用做系统内各语言之间的 RPC 通信的一个可扩展且跨语言的软件框架,它结合了功能强大的软件堆栈和代码生成引擎,允许定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。

Thrift 是 IDL 描述性语言的一个具体实现,适用于程序对程序静态的数据交换,需要先确定好数据结构。

Thrift 是完全静态化的,当数据结构发生变化时,必须重新编辑IDL文件、代码生成再编译载入的流程,跟其他IDL工具相比较可以视为是 Thrift 的弱项。Thrift 适用于搭建大型数据交换及存储的通用工具,在大型系统中的内部数据传输上相对于 JSON 和 XML 无论在性能、传输大小上有明显的优势。

注意, Thrift 不仅仅是个高效的序列化工具,它是一个完整的 RPC 框架体系!

参考:http://www.cnblogs.com/cyfonly/p/6059374.html

相关文章

  • thrift 简介

    thrift 基本概念、数据类型thrift 简介一 thrift 基本类概述、序列化协议thrift 简介二 t...

  • Thrift入门

    原文链接:thrift入门 转载请注明出处~ Thrift简介 什么是thrift 简单来说,是Facebook公...

  • Thrift简介

    thrift最初由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言 ActionSc...

  • thrift事件交互

    一、thrift 1 thrift简介Thrift是一个RPC框架,由facebook开发。它支持可扩展且跨语言的...

  • Thrift小试牛刀——在Windows中通过Thrift实现简

    成功的秘诀,在永不改变既定的目的。 —— 卢梭 Thrift简介 The Apache Thrift softwa...

  • Go实践:基于Thrift框架的Go-RPC简单示例

    Thrift架构简介 Thrift自顶向下可分为四层 Server(single-threaded, event-...

  • python2访问CDH HBase Thrift2

    简介 HBase Thrift Server是hbase基于Apache Thrift开发用来提供对多语言支持的服...

  • thrift 简介一

    Thrift最初由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言比如C++, Ja...

  • thrift 简介二

    Thrift源码解析(一)主要类概述 大概分为以下几个group: TTransport:客户端传输层协议相关的类...

  • thrift 简介三

    thrift 使用之前我们看了一些thrift的概念,现在我们通过hello world来学习thrift的使用。...

网友评论

    本文标题:Thrift简介

    本文链接:https://www.haomeiwen.com/subject/vnuizttx.html