《The programmer's Guide to Apache Thrift》读书笔记

所有代码见GitHub:Thrift Demos

第一章 Introduction to Apache Thrift

本章详细介绍了thrift的一些特点,优点,不足,以及简单的Java,Python,C++客户端,服务端Demo,本次阅读主要针对于Java相关的进行学习,C++和Python都是类似的,直接跳过。

优点:跨语言;开发效率高;提供插件序列化协议;性能可观;灵活扩展性好

缺点:不支持自引用型数据结构;大数据量传输不合适;无法提供类MQ功能;对于追求极致性能可能有所欠缺

第二章 Apache Thrift Architecture

本章详细介绍了thrift的垂直分层架构,以及每层的作用。
在这里插入图片描述

  • RPC Server Library Server层,基于thrift框架封装的RPC服务,thrift提供了许多的IO模型的server
  • RPC Service Stubs Service层,根据IDL生成对应的接口,thrift已经封装好了和server的交互,分发过程,开发者只需要重关注业务逻辑接口即可
  • User Defined Type Serialization UDT层,根据IDL生成对应的实体类,封装了与协议层交互的序列化方法
  • The Serialization Protocol Library Protocol层,定义序列化使用的协议,封装了与传输层的交互的方法
  • The Transport Library Transport层,用于端到端网络IO,基于socket进行的封装,再往下就是socket的底层

第三章 Moving Bytes with Transports

本章着重介绍Thrift的第一层传输层,在端到端进行数据传输的在整个Thrift中起到怎样的作用,以及如何独立的进行端到端读写,并且写了一些memory,disk,network的读写Demo,如果之前做过网络编程就很好理解,其实都是一些简易的设备IO编程demo。

第一部分介绍了thrift如何在memory,disk之间通信,主要是使用以下两个类:

TSimpleFileTransport //文件传输使用的类
TMemoryBuffer //创建内存缓存使用的类

第二部分介绍了thrift的transport接口的一些方法,分别从C++,Java,Python角度来介绍,本次着重学习Java相关的,后续同样,不在赘述,TTransport是传输层所有类的公共基类,所有的传输方法都继承此类,Java的TTransport类的一些抽象方法:

public abstract void open() throws TTransportException; //建立一个传输连接
public abstract void close(); //关闭传输连接
public abstract int read() throws TTransportException; //从传输连接读取一定量数据
public int readAll() throws TTransportException; //一次把缓存读取完
public void write() throws TTransportException; //写
public void flush() throws TTransportException; //清空写缓存
public void consumeBuffer(); //消费缓存区,直接删除,相对于read避免了复制的开销

第三部分介绍了使用TTransport进行网络通信,主要的内容就是使用TTransport的子类TSocket进行通信。

第四部分主要介绍了通过TServerTransport构造一个网络服务器,类似于rpc的服务方,然后等待客户端的请求,TServerTransport的方法比较简单可以直接去看源码。

第五部分主要介绍了另外一个很重要的传输类,TFramedTransport,可以在传输的过程中指定本次传输的字节数,方便接收端接受,常用于在传输层中进行多次数据处理。

第六部分是总结,本章着重介绍了thrift的最底层-传输层,是thrift一切的基础,传输层的所有操作由TTransport接口来定义,规范;实现了与设备无关的字节流读写,此外还介绍了分层传输的实现,分层传输主要就是在传输层再细分,从接收到消息之后再进行多次处理。

第四章 Handing Exceptions

本章着重介绍了thrift的异常处理处理模型和机制;使用thrift如何处理传输异常,协议异常,应用异常,返回用户定义的异常;以及作为开发者,如何设计出健壮的异常处理程序。

所有的可能异常都用TException来描述,对应Java中的Exception类,针对不同层的可能出现异常,分别使用TTransportException,TProtocolException,TApplicationException来捕获

此外,允许用户在IDL使用exception关键字中定义异常,实现异常从客户端传递到远程服务端,但是大部分情况异常只需要在客户端处理即可。

本章的主要作用就是简单了解一下thrift的异常处理机制,和不同语言之间的对应关系,方便我们写出更加健壮的代码。

第五章 Serializing Data with Protocols

本章主要介绍了thrift的协议层的作用,thrift协议层主要指定了序列化的方式,并且能够能够做到语言无关性的序列化,比如只要使用方指定了相同的协议,Java序列化的数据,C++也同样可以反序列化使用。thrift主要提供了三种序列化协议,分别是:

  • TBinaryProtocol 二进制的序列化协议通过将数据转化为二进制01比特流来存储,是thrift的默认序列化协议,因为大部分的语言都支持这一协议,但是JavaScript不支持,js仅支持json类型的数据。
  • TCompactProtocol 紧凑的序列化协议,顾名思义序列化之后的数据很紧凑,所以大小要比binary的更小一些,但是支持的广泛程度不如TBinaryProtocol。
  • TJSONProtocol JSON的序列化协议,这种序列化方式的主要优点就是可读性高,前两者序列化之后的数据几乎没有可读性。

所有协议的公共父类都是TProtocol,与TTransport类似,TProtocol的方法很多,但是看名字就能知道是什么意思,使用的时候直接看源码即可,这里就不赘述了。

本章实现了一个C++写,Java

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值