FastDFS源码学习(一)FastDFS介绍及源码编译安装
FastDFS是淘宝的余庆主导开发的一个分布式文件系统,采用C语言开发,性能较优。在淘宝网、京东商城、支付宝和某些网盘等系统均有使用,使用场景十分广泛。
下图来源:https://blog.csdn.net/kyriehe/article/details/52431495
目前这个系统的源码已在github上开源。
编译FastDFS需要下载以下源码:
FastDFS,下载地址:https://github.com/happyfish100/fastdfs
libfastcommon,下载地址:https://github.com/happyfish100/libfastcommon
本笔记(教程)采用如下环境进行编译学习,为了保证代码的一致性,建议在同等环境下进行编译学习。系统没有太大的更新,本教程均具有参考价值。
FastDFS版本:fastdfs-5.11.tar.gz
libfastcommon版本:libfastcommon-1.0.39.tar.gz
libfastcommon库编译安装:
1.解压libfastcommon,进入目录,执行./make.sh进行编译libfastcommon
2.执行./make.sh install 进行安装libfastcommon
安装时将头文件拷贝到/usr/include/fastcommon目录下,动态库libfastcommon.so拷贝到/usr/lib目录下。创建/usr/lib64/libfastcommon.so的软连接
启示:我们自己也可以编写动态库,把接口预留出来(即include中的头文件)供其他开发人员使用。本项目的libfastcommon库在原作者(余庆)的fastdht系统中也有使用。本lib库是将项目中的基础模块提取出来形成的一个基础库,供系统调用使用,这个库在其他系统中也能发挥很大的作用
fastdfs编译安装
1.解压fastdfs,进入目录,执行./make.sh进行编译fastdfs
2.执行./make.sh install 安装fastdfs
安装时将配置文件:client.conf.sample、tracker.conf.sample、storage_ids.conf.sample、storage.conf.sample拷贝到/etc/fdfs/目录下。
将可执行程序文件:fdfs_trackerd、fdfs_storaged、fdfs_monitor、fdfs_test、fdfs_test1、fdfs_crc32、fdfs_upload_file、fdfs_download_file、fdfs_delete_file、fdfs_file_info、fdfs_appender_test、fdfs_appender_test1、fdfs_append_file、fdfs_upload_appender拷贝到/usr/bin目录下
重要文件解释:实际使用时将.sample去掉。
client.conf.sample 客户端配置文件,主要配置client日志目录,tracker服务器地址
tracker.conf.sample 配置tracker日志。
storage.conf.sample 存储服务器配置文件,主要配置日志目录,数据存储目录,tracker服务器地址
整个系统中的重点是tracker服务器,storage需要tracker去发现。client去请求,都是要经过tracker服务器。
该系统有以下优秀策略,将尝试在后续的代码分析中体现出来
1.一个group内文件互为备份,即镜像服务器,上传/下载文件轮询策略,指定特定storage服务器上传/下载策略。上传后,同group的服务器互相备份数据。
2.多个group存储策略可配置,有轮询策略,剩余空间大优先等策略。
3.小文件合并存储功能(将多个小文件合并成一个大文件存储,主要应对小文件inode限制导致inode资源不够)
4.后续使用中发现的其他功能。
由于本教程仅作个人学习分析,没有实际生产环境的支持,未免有失偏颇。还望同行不吝赐教。
参考资料:
http://bbs.chinaunix.net/thread-1920470-1-1.html FastDFS FAQ
https://blog.csdn.net/kyriehe/article/details/52431495 分布式存储fastDFS
FastDFS源码学习(一)FastDFS介绍及源码编译安装的更多相关文章
- SpringBoot源码学习1——SpringBoot自动装配源码解析+Spring如何处理配置类的
系列文章目录和关于我 一丶什么是SpringBoot自动装配 SpringBoot通过SPI的机制,在我们程序员引入一些starter之后,扫描外部引用 jar 包中的META-INF/spring. ...
- Dubbo源码学习之-SPI介绍
前言 学习之路还是要戒骄戒躁,一以贯之的积累前行.之前的公司部门技术达人少,自己总向往那些技术牛人多的团队,想象自己进去之后能跟别人学到多少东西.如今进到一个这样的团队之后,却发现之前自己的想法过于幼 ...
- spring源码学习(三)--spring循环引用源码学习
在spring中,是支持单实例bean的循环引用(循环依赖)的,循环依赖,简单而言,就是A类中注入了B类,B类中注入了A类,首先贴出我的代码示例 @Component public class Add ...
- 【RocketMQ源码学习】- 4. Client 事务消息源码解析
介绍 > 基于4.5.2版本的源码 1. RocketMQ是从4.3.0版本开始支持事务消息的. 2. RocketMQ的消息队列能够保证生产端,执行数据和发送MQ消息事务一致性,而消费端的事务 ...
- Mybatis源码学习第七天(插件源码分析)
为了不把开发和源码分析混淆,决定分开写; 接下来分析一下插件的源码,说道这里老套路先说一个设计模式,他就是责任链模式 责任链模式:就是把一件工作分别经过链上的各个节点,让这些节点依次处理这个工作,和装 ...
- AJ学IOS 之二维码学习,快速生成二维码
AJ分享,必须精品 二维码是一项项目中可能会用到的,iOS打开相机索取二维码的速度可不是Android能比的...(Android扫描二维码要来回来回晃...) 简单不多说,如何把一段资料(网址呀,字 ...
- Hadoop源码学习笔记之NameNode启动场景流程一:源码环境搭建和项目模块及NameNode结构简单介绍
最近在跟着一个大佬学习Hadoop底层源码及架构等知识点,觉得有必要记录下来这个学习过程.想到了这个废弃已久的blog账号,决定重新开始更新. 主要分以下几步来进行源码学习: 一.搭建源码阅读环境二. ...
- 【目录】Spring 源码学习
[目录]Spring 源码学习 jwfy 关注 2018.01.31 19:57* 字数 896 阅读 152评论 0喜欢 9 用来记录自己学习spring源码的一些心得和体会以及相关功能的实现原理, ...
- Netty 源码学习——EventLoop
Netty 源码学习--EventLoop 在前面 Netty 源码学习--客户端流程分析中我们已经知道了一个 EventLoop 大概的流程,这一章我们来详细的看一看. NioEventLoopGr ...
- Dubbo源码学习文章目录
目录 Dubbo源码学习--服务是如何发布的 Dubbo源码学习--服务是如何引用的 Dubbo源码学习--注册中心分析 Dubbo源码学习--集群负载均衡算法的实现
随机推荐
- navisworks安装未完成,某些产品无法安装的解决方法
navisworks提示安装未完成,某些产品无法安装该怎样解决呢?,一些朋友在win7或者win10系统下安装navisworks失败提示navisworks安装未完成,某些产品无法安装,也有时候想重 ...
- 如何创建Hexo站点的Tags和Categories默认页面
安装Hexo的categories生成插件 1 $ npm install hexo-generator-category --save 安装Hexo的Tags生成插件 1 $ npm install ...
- 接口测试-chap4-关联接口测试
关联接口测试指:请求第2个接口之前必须先请求第一个接口 1.请求第2个接口时需要带着第一个请求返回的cookie 2.如果不使用cookie,如何进行关联接口测试:使用session保持连接.可以代替 ...
- haproxy笔记之六:负载均衡MySQL服务的配置示例
#--------------------------------------------------------------------- # Global settings #---------- ...
- 杂谈php之什么是cgi,fastcgi,fpm,cli,mod
杂谈PHP极少关注的问题 本话题来自于我使用PHP进行网页爬虫的一次经历.对于一个web开发者来说,PHP解释器本身却知之甚小,实在是惭愧呐! 首先这个话题要从几个提问开始. PHP是什么? 外文名: ...
- rest-framework源码解析和自定义组件----版本
版本 url中通过GET传参自定义的版本 12345678910111213141516171819202122 from django.http import HttpResponsefrom dj ...
- 01Java代码是怎么运行的
从虚拟机视角来看,执行 Java 代码首先需要将它编译而成的 class 文件加载到 Java 虚拟机中.加载后的 Java 类会被存放于方法区(Method Area)中.实际运行时,虚拟机会执行方 ...
- js作用域其二:预解析
文章目錄 解析机制 JavaScript是一门解释型的语言 , 想要运行js代码需要两个阶段 编译阶段: 编译阶段就是我们常说的JavaScript预解析(预处理)阶段,在这个阶段JavaScript ...
- Sed 实记 · laoless's Blog
sed编辑命令 p 打印匹配行 = 打印文件行号 a 在定位行之后追加文本 i 在定位行之前插入文本 d 删除定位行 c 用新文本替换定位文本 s 使用替换模式替换相应模式 r 从另一个文件读取文本 ...
- Spring源码阅读笔记03:xml配置读取
前面的文章介绍了IOC的概念,Spring提供的bean容器即是对这一思想的具体实现,在接下来的几篇文章会侧重于探究这一bean容器是如何实现的.在此之前,先用一段话概括一下bean容器的基本工作原理 ...