开源软件研究
现在开源软件使用非常的多,都是很多使用都仅仅停留在最初级的阶段,没有通过更深入的理解开源软件的设计原理和最佳实践,导致进一步优化和深入使用变得困难,本专栏就是希望能够对更多开源软件做更深入的分析和讲解。
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
蔷薇理想人生
熟悉C++ /C开发,目前从事云计算和云存储相关的开发工作,对于windows和linux平台软件开发比较熟悉。目前主要研究分布式计算与分布式文件系统、数据同步,深入研究linux内核实现。熟悉RPC数据通信框架原理及实现。
展开
-
thrift之默认传输类TTransportDefaults和虚拟传输类TVirtualTransport
默认传输类TTransportDefaults提供了抽象类TTransport的默认实现,实现了非虚拟的方法(*_virt) read(), readAll(), write(),borrow() and consume()。基类TTransport总是调用对应的虚拟函数,而默认传输类按照默认的方式实现而不去自己在覆盖哪些对应的虚拟函数了。 其实这个默认传输类的主要作用是作为虚拟传输类TVi原创 2013-07-25 22:49:05 · 2908 阅读 · 1 评论 -
ceph主要数据结构解析1
1.Msgr.h文件:定义消息传输层的数据类型,以供ceph使用(1)默认的监控端口:#define CEPH_MON_PORT 6789(2)客户端处理端口范围定义:#define CEPH_PORT_FIRST 6789//监控#define CEPH_PORT_START 6800 //开始#define CEPH_PORT_LAST 6900//结束原创 2013-08-14 00:01:44 · 4148 阅读 · 1 评论 -
thrift之TServer类体系原理及源码详细解析之服务器基类TServer
这一部分主要实现了底层IO通信,还涉及到通信服务器的堵塞、非堵塞、单线程、多线程等运行模式,所以实现比较复杂。这一部分涉及到的类的关系图如下:由上面的类关系图可以看出,这一部分的类关系比较复杂,复杂的不是继承关系,而是相互之间的依赖关系。因为服务器需要处理很多的任务,也需要处理多个客户端的连接,这就涉及到多线程编程以及多线程之间通信及并发的情况。这一部分涉及到的并发编程的类容将在后原创 2013-08-13 23:42:34 · 4074 阅读 · 2 评论 -
ceph主要数据结构解析3-Ceph_fs.h文件
(1)集群内部子版本协议类型宏定义:与公共协议保持独立性,以便消息类型和协议升级受影响#define CEPH_OSDC_PROTOCOL 24 /* server/client */OSD服务器集群与客户端协议版本#define CEPH_MDSC_PROTOCOL 32 /* server/client */MDS与客户端#define CEPH_MONC_PROTOC原创 2013-08-15 23:26:09 · 3629 阅读 · 2 评论 -
Glusterfs之rpc模块源码分析(下)之RDMA over TCP的协议栈工作过程浅析
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。声明:本文转至IT168:因为GlusterFS实现了IB网络(RDMA协议,专用硬件网卡支持),当时就在想普通的网卡能不能实现,就找到一篇这样的文章介绍,基于TCP协议来实现。!附件 RDMA over TCP的协议栈工作过程浅析第一节 RDMA概述随原创 2012-05-14 22:51:55 · 4331 阅读 · 1 评论 -
Glusterfs之rpc模块源码分析(中)之Glusterfs的rpc模块实现(1)
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。二、Glusterfs的rpc模块实现第一节、rpc服务器端实现原理及代码分析1.rpc服务初始化Rpc服务的初始化工作在函数rpcsvc_init中实现的,实现代码如下:rpcsvc_t * rpcsvc_init (glusterfs_c原创 2012-05-13 10:48:02 · 3246 阅读 · 0 评论 -
Glusterfs之rpc模块源码分析(上)之RPC概述
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。一、RPC概述第一节、RPC结构网络RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为原创 2012-05-13 10:41:16 · 3072 阅读 · 0 评论 -
Glusterfs之nfs模块源码分析(下)之NFS协议之RPC的实现和NFS协议内容
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。六、NFS协议之RPC的实现因为nfs服务器启动时的端口是不确定的,所以nfs服务器将自己的端口注册到rpc服务,客户端通过rpc请求知道nfs服务器的监听端口。下面就分析整个rpc的处理过程。现在假设客户端有一个rpc请求达到服务器端了,通过上面nfs协议初始化的原创 2012-05-09 22:28:02 · 3126 阅读 · 0 评论 -
Glusterfs之nfs模块源码分析(中)之Glusterfs实现NFS服务器
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。五、Glusterfs实现NFS服务器第一节、启动过程分析Glusterfs的nfs服务器启动命令如下: /usr/local/sbin/glusterfs -f /etc/glusterd/nfs/nfs-server.vol -p /etc/glus原创 2012-05-07 22:45:52 · 5735 阅读 · 1 评论 -
GlusterFS之内存池(mem-pool)使用实例分析
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。上一篇博客详细分析了GlusterFS之内存池的实现技术,今天我们看看GlusterFS是怎么使用这个技术的。第一步:分配和初始化:cli进程在初始化的过程中会涉及到内存池的建立和初始化,具体涉及到内存池初始化的代码如下(在cli.c文件中的glusterfs_原创 2012-04-26 19:53:42 · 3018 阅读 · 1 评论 -
GlusterFS之内存池(mem-pool)实现原理及代码详解
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。最近一直在研究glusterfs的源代码,自己也在上面做了一些小的改动。我最开始研究的是3.2.5这个版本,因为据同行和网上资料显示这个版本目前是最稳定的版本。glusterfs实现比较复杂,具体的设计思想和架构就不详细介绍了,网上有这方面的资料(CSDN博客里面就有很好介原创 2012-04-25 20:07:39 · 3840 阅读 · 1 评论 -
ceph主要数据结构解析2-Rados.h文件
(1)文件系统id结构:16个字符组成struct ceph_fsid { unsigned char fsid[16];};以及对应的比较函数:static inline int ceph_fsid_compare(const struct ceph_fsid *a, const struct ceph_fsid *b){ return memcmp(a, b原创 2013-08-15 23:20:56 · 3554 阅读 · 0 评论 -
Glusterfs之rpc模块源码分析(中)之Glusterfs的rpc模块实现(3)
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。第三节、rpc通信过程分析前面两个小节分别对rpc服务端和客户端的建立流程做了详细的分析,也就是说rpc客户端和服务器端已经能够进行正常的通信了(rpc客户端已经通过connect链接上rpc服务器了),那么这一小节主要根据一个实际的例子来分析一个完整的rpc通信过原创 2012-05-14 22:36:25 · 3191 阅读 · 0 评论 -
Glusterfs之rpc模块源码分析(中)之Glusterfs的rpc模块实现(2)
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。第二节、rpc客户端实现原理及代码分析rpc客户端主要发起一个rpc请求,执行完rpc请求以后就退出rpc,下面分析客户端rpc请求建立的整个过程。Rpc客户端请求建立的第一步是执行cli_rpc_init函数,主要实现代码如下: th原创 2012-05-14 22:33:40 · 2844 阅读 · 0 评论 -
开源软件实践之linux高性能服务器编程框架和选型
很多人学习编程技术一般都通过一本编程语言的入门书籍,然后尝试做一些例子和小项目。但是这些都不能让我们深入的学习很多的编程技巧和高深技术,当然这个时候很多有经验的学习人员就会告诉大家,找一个好的开源软件理解它的设计与实现原理,阅读开源项目的源代码,都知道源码之前了无秘密。我也承认读源码能够快速提高我们的编程能力和编程思维,我也经常研究很多项目的源代码,有些是工作需要,有些是兴趣。但是我今天想说的都不原创 2013-11-20 00:11:57 · 6571 阅读 · 9 评论 -
开源软件实践之linux高性能服务器编程框架和选型(续)
接着昨天的Proactor模式介绍。 proactor模式将所有IO操作交给主线程和linux内核来处理,工作线程负责业务逻辑。异步IO实现这种模式的工作流程如下:1)主线程使用aio_read函数注册socket读完成事件,提供用户接收数据的缓冲区地址以及读操作完成时如何通知应用程序(有信号等手段);2)主线程继续处理其他逻辑;3)当socket数据读入缓冲区后,原创 2013-11-20 23:25:18 · 3588 阅读 · 2 评论 -
高性能可伸缩的分布式消息中间件设计
消息中间件基本上是每一个大型互联网公司的标准基础技术组件配置,虽然有很多的开源消息中间件,功能也很强大,但是今天我还是想介绍一下怎样自主架构与设计并实现一套完整的分布式消息中间件。开源的消息中间件或多或少存在一些所谓“坑”,没有遇到大家用得都很happy,遇到的同学就只有加班查资料、google搜索或者直接review开源代码寻找问题原因了。还有就是基本上开源的消息中间件一般都是大而全的功能,一般原创 2014-10-15 17:57:22 · 11923 阅读 · 1 评论 -
thrift之TTransport层的缓存传输类TBufferedTransport和缓冲基类TBufferBase
本节主要介绍缓冲相关的传输类,缓存的作用就是为了提高读写的效率。Thrift在实现缓存传输的时候首先建立一个缓存的基类,然后需要实现缓存功能的类都可以直接从这个基类继承。下面就详细分析这个基类以及一个具体的实现类。 缓存基类TBufferBase 缓存基类就是让传输类所有的读写函数都提供缓存来提高性能。它在通常情况下采用memcpy来设计和实现快路径的读写访问操作,这些操作函数通常都是小、非原创 2013-07-26 00:39:26 · 6952 阅读 · 2 评论 -
thrift之TTransport层的堵塞的套接字I/O传输类TSocket
本节将介绍第一个实现具体传输功能的类TSocket,这个类是基于TCP socket实现TTransport的接口。下面具体介绍这个类的相关函数功能实现。 1.构造函数 分析一个类的功能首先看它的定义和构造函数实现,先看看它的定义: class TSocket : public TVirtualTransport { ......} 由定义可以看书TSocket继承至虚拟传原创 2013-07-25 22:51:25 · 12289 阅读 · 0 评论 -
分布式日志收集系统:Facebook Scribe
我的独立博客网址是:http://wuyouqiang.sinaapp.com/。我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。以下是我在公司内部分享的关于分布式日志收集系统的PPT内容,现在与大家分享,希望对于需要使用的人能够起到基本的入门作用或是了解!1.分布式日志收集系统:背景介绍许多公司的平台每天会产生原创 2011-12-13 00:38:10 · 6538 阅读 · 0 评论 -
分布式日志收集系统: Facebook Scribe之配置文件
我的独立博客网址是:http://wuyouqiang.sinaapp.com/。我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。 上一篇文章介绍了一些关于scribe的基础知识,也是自己在公司内部分享的一些内容,当时公司很多同事也积极与我沟通,没想到网上也有这么多人关注,下面几篇文章继续分享一些自己研究scrib原创 2011-12-13 23:28:55 · 2861 阅读 · 0 评论 -
分布式日志收集系统: Facebook Scribe之结构及源码分析
scribe结构及源码详细分析1. 整体类关系图 2. 客户端写日志序列图 3. 活动及状态图 Scribe活动图4. 启动代码详解启动过程流程图(1) 调用setrlimit函数设置能够打开的最大文件数为65535;(2) 调用getopt_long函数解析原创 2011-12-14 23:09:01 · 3019 阅读 · 2 评论 -
分布式日志收集系统: Facebook Scribe之日志收集方案
我的独立博客网址是:http://wuyouqiang.sinaapp.com/。我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。写入日志到Scribe的解决方案1.概述Scribe日志收集服务器只负责收集主动写入它的日志,它本身不会去主动抓取某一个日志,所以为了把日志写入到scribe服务器,我们必须主动向sc原创 2011-12-15 23:52:19 · 3298 阅读 · 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 · 2757 阅读 · 0 评论 -
Thrift之代码生成器Compiler原理及源码详细解析1
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。又很久没有写博客了,最近忙着研究GlusterFS,本来周末打算写几篇博客的,但是由于调试GlusterFS的一些新增功能就用了整整的一天,还有一天就陪老婆大人逛街去了!今晚浏览完微博发现时间还早就来博客一篇,本篇博客内容主要是前一段时间研究的Thrift的代码生成器的原创 2012-04-23 23:45:06 · 12122 阅读 · 2 评论 -
Thrift之代码生成器Compiler原理及源码详细解析2
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。2 t_generator类和t_generator_registry类这个两个类的主要功能就是为生成所有语言的代码提供基础信息和提供具体代码生成器对象,上面就是调用这个两个类的方法来生成具体语言的代码生成器对象和执行生成代码的功能函数。下面主要分析两个函数的原创 2012-04-23 23:51:04 · 2761 阅读 · 0 评论 -
Thrift之TProcess类体系原理及源码详细解析
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。之前对Thrift自动生成代码的实现细节做了详细的分析,下面进行处理层的实现做详细分析了!会利用到自动代码生成的知识。这部分是协议层和用户提供的服务实现之间的纽带,定义了调用服务实现的接口框架,真正实现某种服务接口是通过上一章介绍的代码生成工具生成的代码。本章将介绍原创 2012-06-03 15:27:32 · 3685 阅读 · 0 评论 -
Thrift之TProtocol类体系原理及源码详细解析之类继承架构分析
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。这部分相关的类主要实现与协议相关的内容,这里说的协议是指对数据传输格式封装的协议,实现不同的协议来适合不同场景下的数据传输,因为在不同的场景下不同协议对于数据传输来说效率有很大的差别。下面是这个部分相关类的类关系图:由以上类图可以发现所有的协议类都从原创 2012-06-04 23:52:07 · 2929 阅读 · 0 评论 -
Thrift之TProtocol类体系原理及源码详细解析之二进制协议类TBinaryProtocolT(TBinaryProtocol)
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。这个协议是Thrift支持的默认二进制协议,它以二进制的格式写所有的数据,基本上直接发送原始数据。因为它直接从TVirtualProtocol类继承,而且是一个模板类。它的模板参数就是一个封装具体传输发送的类,这个类才是真正实现数据传输的。这个类的定义上一节举例已经原创 2012-06-05 23:02:29 · 5980 阅读 · 2 评论 -
Thrift之TProtocol类体系原理及源码详细解析之紧凑协议类TCompactProtocolT(TCompactProtocol)
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。这个协议类采用了zigzag 编码,这种编码是基于Variable-length quantity编码提出来的,因为Variable-length quantity编码对于负数的编码都需要很长的字节数,而zigzag 编码对于绝对值小的数字,无论正负都可以采用较少的原创 2012-06-11 23:39:13 · 3286 阅读 · 3 评论 -
Thrift之TProtocol类体系原理及源码详细解析之JSon协议类TJSONProtocol
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。JSON (JavaScript Object Notation)是一种数据交换格式,是以JavaScript为基础的数据表示语言,是在以下两种数据结构的基础上来定义基本的数据描述格式的:1) 含有名称/值对的集合;2) 一个有序的列表。对于 JSON,其部分数据结原创 2012-06-13 00:10:23 · 2616 阅读 · 0 评论 -
Thrift之TProtocol类体系原理及源码详细解析之其他协议类和总结
我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。第六节 其他协议类主要的协议类基本上已经介绍完毕了,当然如果你有更好的实现和思路也可以实现自己的协议类,只要按照我前面介绍的类层次结构继承就可以了。除了前面几节介绍的协议类,Thrift还实现了一些自己内部使用的协议类,例如TDebugProtocol类,采用开原创 2012-07-09 23:36:28 · 2784 阅读 · 1 评论 -
thrift之TTransport层的分帧传输类TFramedTransport
帧传输类就是按照一帧的固定大小来传输数据,所有的写操作首先都是在内存中完成的直到调用了flush操作,然后传输节点在flush操作之后将所有数据根据数据的有效载荷写入数据的长度的二进制块发送出去,允许在接收的另一端按照固定的长度来读取。 帧传输类同样还是从缓存基类TBufferBase继承而来,实现的接口当然也基本相同,只是实现的方式不同而已,下面就来看看具体的实现过程和原理。 这个类原创 2013-07-31 00:12:09 · 8218 阅读 · 3 评论 -
thrift之TTransport层的内存缓存传输类TMemoryBuffer
内存缓存是简单的在内存进行读写操作的一种传输,任何时候想在上面写入数据都是放入缓存中,任何时候读操作数据也是来至于缓存。内存缓存的分配使用c语言的malloc类函数,分配的长度是需要长度的两倍,需要考虑这些内存缓存的使用范围。同样这个类继承至缓存基类TBufferBase,默认的缓存大小是1024(static const uint32_t defaultSize = 1024;),所有的构造原创 2013-08-01 09:05:14 · 4995 阅读 · 2 评论 -
thrift之TTransport类体系原理及源码详细解析1-类结构和抽象基类
本章主要介绍Thrift的传输层功能的实现,传输的方式多种多样,可以采用压缩、分帧等,而这些功能的实现都是相互独立,和上一章介绍的协议类实现方式比较雷同,还是先看看这部分的类关系图,如下: 由上面的类关系图可以看出,这部分的功能是相当的强大,所以类比较多且关系错综复杂。但是如果理解清楚了这些类直接的关系就很容易掌握这部分的实现技术和这部分实现的功能。我们把这个类关系图分为三部分来看,原创 2013-07-25 00:03:34 · 4031 阅读 · 0 评论 -
Redis第一个版本源码分析-启动过程分析1
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000; -webkit-text-stroke: #000000}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #000000; -webkit-text-st原创 2016-11-21 23:00:19 · 2114 阅读 · 3 评论