zoukankan      html  css  js  c++  java
  • 《Thrift白皮书》小结

    一.简介

        定义:Thrift是facebook开发出的一个软件库和一组代码生成工具,以加快高效率、可扩展的后端服务的开发与实现的速度。
        使用:先在一个单独的语言无关的文件中定义数据类型和服务接口,再用生成器生成代码,最后可以根据需要添加和修改生成代码(可能用到Thrift的库)。

        特色:多语言支持、库和代码生成器带来的高效率。

    二.基础组件

        包括:类型、传输、协议、版本化和处理器

    2.类型

        2.1.基本类型:bool,byte,i16,i32,i64,double,string

        2.2.结构体:使用关键字struct定义

        2.3.容器:list<type>,set<type>,Map<type1,type2>

        2.4.异常:使用关键字exception定义

        2.5.服务:使用关键字service定义

    3.传输

        3.1.接口:TTransport,TServerTransport

        3.2.实现:TSocket,TFileTransport,Utilities(TBufferdTransport,TFramedTransport和

                      TMemoryBuffer)

    4.协议:

        4.1.接口:双向有序的消息传递

                     基本类型、容器及结构体的编码

        4.2.结构:Thrift协议是自定界的,没有任何成帧,且不论编码格式。

                      如需成帧可使用TFramedTransport来完成。

        4.3.实现:所有数据按一种扁平的二进制格式来写的。

    5.版本化:

        5.1.域标识符:在语言无关文件中的变量前的数字,自动添加的是从-1开始的负数

        5.2.lsset:用于对待预料之外的域

        5.3.案例分析:主要是客户端和服务器新旧不匹配

        5.4.协议/传输版本化

    6.远程过程调用实现:

        6.1.TProcessor:核心接口,有bool process(TProtocol in,TProtocol out)

        6.2.生成代码:特别提示下,内部会生成相应的Client类

        6.3.TServer:类型有TSimpleServer,TThreadedServer和TThreadPoolServer。

    三.其他

    7.实现细节

        7.1.目标语言:C++,Java,Python,Ruby和PHP。

        7.2.生成的结构体

        7.3.RPC方法识别

        7.4.服务器和多线程:Thrift实现了自己的多线程库

        7.5.线程原语:命名空间facebook::thirft::concurrency中实现了Thrift线程库:

                           primitives,thread pool manager,timer manager。

                      boost::shared_ptr,Mutex类,Condition类和Monitor类。

                      借用Java中thread(线程对象)和runnable(线程执行逻辑)的区别的经验。

        7.6.Thread,Runnable and shared_ptr

        7.7.ThreadManager

        7.8.TimerManager

        7.9.非阻塞操作:Thrift基于libevent和TFramedTransport。

        7.10.编译器

        7.11.TFileTransport

    8.Facebook的Thrift服务:

        Facebook中已大量使用Thrift,包括搜索、日志、手机、广告和开发者平台。

    9.总结:

        使用Thrift可以让工程师们分而治之的将功能进行划分并可采用合适的语言类实现,而不用在编写重复的代码。

  • 相关阅读:
    KETTLE封装
    基于MODBUS-RTU协议的串口编程
    阿里DRUID 配置说明及分析
    CopyOnWriteArrayList集合排序异常问题
    CopyOnWriteArrayList集合线程安全解释
    JAR包数字签名与验证
    MySQL中select * for update锁表的范围
    Kettle文本文件输出和输入控件使用中,换行符导致的问题处理
    UAP如何根据DeviceFamily显示不同的页面
    Windows 10 响应式设计和设备友好的开发
  • 原文地址:https://www.cnblogs.com/davidyang2415/p/2391419.html
Copyright © 2011-2022 走看看