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

本文是《The programmer's Guide to Apache Thrift》的读书笔记,深入剖析Thrift的架构、传输层、异常处理、协议层、IDL、UDT和服务实现。探讨了Thrift的优缺点,以及在不同场景下的IO模型选择,包括TNonblockingServer和TThreadedSelectorServer等。还介绍了如何通过Thrift实现跨语言通信和异常处理,以及服务的动态兼容性。
摘要由CSDN通过智能技术生成

所有代码见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的序列化协议,这种序列化方式的主要优点就是可读性高,前两者序列化之后的数据几乎没有可读性。

所有协议的公共父类都是TProtoco

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《程序员的Apache Thrift指南》是一本详细介绍Apache Thrift的书籍。Apache Thrift是一个高效的跨语言的远程过程调用(RPC)框架,能够帮助开发者轻松地在不同的编程语言之间进行通信。 这本指南以程序员的视角出发,提供了关于Apache Thrift的全面指导。首先,书中会介绍RPC的基本概念以及Apache Thrift在其中的作用和优势。读者将了解到如何使用Apache Thrift在不同的编程语言之间建立起通信通道,从而实现不同系统之间的协作和数据传输。 在介绍完基本概念后,指南将详细介绍如何使用Apache Thrift来定义和编写IDL(Interface Definition Language)。IDL是一种在不同编程语言中共享和访问代码的方法,并且Apache Thrift提供了一种简单而强大的方式来定义和生成IDL。 接下来,该书将深入介绍在不同编程语言中如何使用Apache Thrift来实现客户端和服务器端的代码。读者将学习到如何使用Apache Thrift提供的代码生成工具来生成客户端和服务器端的框架代码,并在此基础上实现具体的功能和逻辑。 另外,该指南还会介绍Apache Thrift的一些高级特性,如异常处理、扩展、并发和压缩等。通过这些章节的学习,程序员能够更好地了解如何使用Apache Thrift来构建可靠、高效的跨语言通信系统。 总之,《程序员的Apache Thrift指南》提供了对Apache Thrift的全面指导,帮助程序员更好地理解和利用此框架来构建跨语言的通信系统。无论是初学者还是有一定经验的开发者,都能从中获得实用的知识和技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值