
跨语言的分布式数据传输框架thrift
本专栏主要介绍facebook的开源的跨语言的分布式数据传输和序列化框架thrift,基于源码的详细分析,首先是C++版本,后面接着java和go语言实现版本。
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
蔷薇理想人生
熟悉C++ /C开发,目前从事云计算和云存储相关的开发工作,对于windows和linux平台软件开发比较熟悉。目前主要研究分布式计算与分布式文件系统、数据同步,深入研究linux内核实现。熟悉RPC数据通信框架原理及实现。
展开
-
thrift之TServer类体系原理及源码详细解析之服务器基类TServer
这一部分主要实现了底层IO通信,还涉及到通信服务器的堵塞、非堵塞、单线程、多线程等运行模式,所以实现比较复杂。这一部分涉及到的类的关系图如下:由上面的类关系图可以看出,这一部分的类关系比较复杂,复杂的不是继承关系,而是相互之间的依赖关系。因为服务器需要处理很多的任务,也需要处理多个客户端的连接,这就涉及到多线程编程以及多线程之间通信及并发的情况。这一部分涉及到的并发编程的类容将在后原创 2013-08-13 23:42:34 · 4143 阅读 · 2 评论 -
thrift之TTransport层的内存缓存传输类TMemoryBuffer
内存缓存是简单的在内存进行读写操作的一种传输,任何时候想在上面写入数据都是放入缓存中,任何时候读操作数据也是来至于缓存。内存缓存的分配使用c语言的malloc类函数,分配的长度是需要长度的两倍,需要考虑这些内存缓存的使用范围。同样这个类继承至缓存基类TBufferBase,默认的缓存大小是1024(static const uint32_t defaultSize = 1024;),所有的构造原创 2013-08-01 09:05:14 · 5076 阅读 · 2 评论 -
thrift之TTransport层的分帧传输类TFramedTransport
帧传输类就是按照一帧的固定大小来传输数据,所有的写操作首先都是在内存中完成的直到调用了flush操作,然后传输节点在flush操作之后将所有数据根据数据的有效载荷写入数据的长度的二进制块发送出去,允许在接收的另一端按照固定的长度来读取。 帧传输类同样还是从缓存基类TBufferBase继承而来,实现的接口当然也基本相同,只是实现的方式不同而已,下面就来看看具体的实现过程和原理。 这个类原创 2013-07-31 00:12:09 · 8308 阅读 · 3 评论 -
thrift之TTransport层的缓存传输类TBufferedTransport和缓冲基类TBufferBase
本节主要介绍缓冲相关的传输类,缓存的作用就是为了提高读写的效率。Thrift在实现缓存传输的时候首先建立一个缓存的基类,然后需要实现缓存功能的类都可以直接从这个基类继承。下面就详细分析这个基类以及一个具体的实现类。 缓存基类TBufferBase 缓存基类就是让传输类所有的读写函数都提供缓存来提高性能。它在通常情况下采用memcpy来设计和实现快路径的读写访问操作,这些操作函数通常都是小、非原创 2013-07-26 00:39:26 · 7016 阅读 · 2 评论 -
thrift之TTransport层的堵塞的套接字I/O传输类TSocket
本节将介绍第一个实现具体传输功能的类TSocket,这个类是基于TCP socket实现TTransport的接口。下面具体介绍这个类的相关函数功能实现。 1.构造函数 分析一个类的功能首先看它的定义和构造函数实现,先看看它的定义: class TSocket : public TVirtualTransport { ......} 由定义可以看书TSocket继承至虚拟传原创 2013-07-25 22:51:25 · 12387 阅读 · 0 评论 -
thrift之默认传输类TTransportDefaults和虚拟传输类TVirtualTransport
默认传输类TTransportDefaults提供了抽象类TTransport的默认实现,实现了非虚拟的方法(*_virt) read(), readAll(), write(),borrow() and consume()。基类TTransport总是调用对应的虚拟函数,而默认传输类按照默认的方式实现而不去自己在覆盖哪些对应的虚拟函数了。 其实这个默认传输类的主要作用是作为虚拟传输类TVi原创 2013-07-25 22:49:05 · 2947 阅读 · 1 评论 -
thrift之TTransport类体系原理及源码详细解析1-类结构和抽象基类
本章主要介绍Thrift的传输层功能的实现,传输的方式多种多样,可以采用压缩、分帧等,而这些功能的实现都是相互独立,和上一章介绍的协议类实现方式比较雷同,还是先看看这部分的类关系图,如下: 由上面的类关系图可以看出,这部分的功能是相当的强大,所以类比较多且关系错综复杂。但是如果理解清楚了这些类直接的关系就很容易掌握这部分的实现技术和这部分实现的功能。我们把这个类关系图分为三部分来看,原创 2013-07-25 00:03:34 · 4088 阅读 · 0 评论 -
Thrift之TProtocol类体系原理及源码详细解析之其他协议类和总结
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。第六节 其他协议类主要的协议类基本上已经介绍完毕了,当然如果你有更好的实现和思路也可以实现自己的协议类,只要按照我前面介绍的类层次结构继承就可以了。除了前面几节介绍的协议类,Thrift还实现了一些自己内部使用的协议类,例如TDebugProtocol类,采用开原创 2012-07-09 23:36:28 · 2828 阅读 · 1 评论 -
Thrift之TProtocol类体系原理及源码详细解析之稠密协议类TDenseProtocol
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。这个协议类不建议投入到实际的生产环境(除非自己做了很强的压力和全面的测试)。这个密集协议的最大作用就是尽可能使用小的空间,密集协议类有两种类型的实例对象,一种是独立的,它不被使用在rpc通信中,而只是用于编码和解码;另一种是非独立的实例类型,它可以用于rpc通信,不过现在还原创 2012-07-03 21:55:52 · 2275 阅读 · 0 评论 -
Thrift之TProtocol类体系原理及源码详细解析之JSon协议类TJSONProtocol
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。JSON (JavaScript Object Notation)是一种数据交换格式,是以JavaScript为基础的数据表示语言,是在以下两种数据结构的基础上来定义基本的数据描述格式的:1) 含有名称/值对的集合;2) 一个有序的列表。对于 JSON,其部分数据结原创 2012-06-13 00:10:23 · 2658 阅读 · 0 评论 -
Thrift之TProtocol类体系原理及源码详细解析之紧凑协议类TCompactProtocolT(TCompactProtocol)
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。这个协议类采用了zigzag 编码,这种编码是基于Variable-length quantity编码提出来的,因为Variable-length quantity编码对于负数的编码都需要很长的字节数,而zigzag 编码对于绝对值小的数字,无论正负都可以采用较少的原创 2012-06-11 23:39:13 · 3346 阅读 · 3 评论 -
Thrift之TProtocol类体系原理及源码详细解析之二进制协议类TBinaryProtocolT(TBinaryProtocol)
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。这个协议是Thrift支持的默认二进制协议,它以二进制的格式写所有的数据,基本上直接发送原始数据。因为它直接从TVirtualProtocol类继承,而且是一个模板类。它的模板参数就是一个封装具体传输发送的类,这个类才是真正实现数据传输的。这个类的定义上一节举例已经原创 2012-06-05 23:02:29 · 6044 阅读 · 2 评论 -
Thrift之TProtocol类体系原理及源码详细解析之类继承架构分析
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。这部分相关的类主要实现与协议相关的内容,这里说的协议是指对数据传输格式封装的协议,实现不同的协议来适合不同场景下的数据传输,因为在不同的场景下不同协议对于数据传输来说效率有很大的差别。下面是这个部分相关类的类关系图:由以上类图可以发现所有的协议类都从原创 2012-06-04 23:52:07 · 2971 阅读 · 0 评论 -
Thrift之TProcess类体系原理及源码详细解析
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。之前对Thrift自动生成代码的实现细节做了详细的分析,下面进行处理层的实现做详细分析了!会利用到自动代码生成的知识。这部分是协议层和用户提供的服务实现之间的纽带,定义了调用服务实现的接口框架,真正实现某种服务接口是通过上一章介绍的代码生成工具生成的代码。本章将介绍原创 2012-06-03 15:27:32 · 3724 阅读 · 0 评论 -
Thrift之代码生成器Compiler原理及源码详细解析3
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。3 生成C++语言代码的代码详解这个功能是由t_cpp_generator类实现(在文件t_cpp_generator.cc定义和实现),直接继承至t_oop_generator类(这个类是所有面向对象语言生成器类的直接基类,封装了面向对象语言生成器共有的特原创 2012-04-24 00:14:36 · 2797 阅读 · 0 评论 -
Thrift之代码生成器Compiler原理及源码详细解析2
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。2 t_generator类和t_generator_registry类这个两个类的主要功能就是为生成所有语言的代码提供基础信息和提供具体代码生成器对象,上面就是调用这个两个类的方法来生成具体语言的代码生成器对象和执行生成代码的功能函数。下面主要分析两个函数的原创 2012-04-23 23:51:04 · 2808 阅读 · 0 评论 -
Thrift之代码生成器Compiler原理及源码详细解析1
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。又很久没有写博客了,最近忙着研究GlusterFS,本来周末打算写几篇博客的,但是由于调试GlusterFS的一些新增功能就用了整整的一天,还有一天就陪老婆大人逛街去了!今晚浏览完微博发现时间还早就来博客一篇,本篇博客内容主要是前一段时间研究的Thrift的代码生成器的原创 2012-04-23 23:45:06 · 12201 阅读 · 2 评论 -
Facebook之Thrift简介
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。 以下内容是从网上各处简单整理而来,因为前段时间自己一直在研究Thrift,把研究的一点资料分享给需要的同行中人!第一节 RPC技术及实现简介首先思考一下分布式系统中的 RPC (Remote Procedure Call) 问题,一个完整的 RPC 模块原创 2012-01-11 23:58:58 · 4251 阅读 · 3 评论