FastDFS原理系列文章
FastDFS原理系列文章
基于FastDFS 5.03/5.04
2014-12-19
一、概述
FastDFS文档极少,仅仅能找到一些宽泛的架构文档,以及ChinaUnix论坛上作者对网友提问的一些回答。对于要将FastDFS应用到生产系统来说,这点了解绝对是不够的。
这段时间研究FastDFS源代码,而且做了大量的性能測试。中间也做了大量的笔记。基本上把程序的结构与基本的操作摸索清楚,因此写了一些文章即是对前段工作的总结,同一时候也分享给想很多其它了解FastDFS内部的同行们。
这里对每篇文章做个介绍。
、机器之间的同步
Storage之间的同步可能是大家首先关心的了,这篇文章做了具体的介绍,最后我还写了注意事项。主要是性能方面的。
《FastDFS之Binlog同步》 http://blog.csdn.net/hfty290/article/details/42041155
、加入新机器同步
大家可能不怎么会注意到这部分。可是事实上非常重要。
在实际的生产系统。坏掉一台机器,或者为了读压力而添加机器,等都是非常正常的。在一个执行的系统上加入一台机器涉及到存量文件的同步与融入到系统中。以下这篇文章做了具体的回答。
《FastDFS之加入机器同步》 http://blog.csdn.net/hfty290/article/details/42041953
、磁盘恢复
线上机器坏个磁盘算是个大概率事件了,换了一个新磁盘。问题来了,数据怎么恢复啊。不用急,重新启动下Storaged。他会检測到并进行恢复,尽管恢复时间可能要非常长(数据量大时),这篇文章对这个功能做了说明。
《FastDFS之磁盘恢复过程》 http://blog.csdn.net/hfty290/article/details/42032817
、Storaged程序结构
到此处Storaged基本的功能点已经讲述了。或者你还想知道程序内部是怎样组织的,线程之间的协调等信息,请看这篇文章。
《FastDFS之Storage程序框架》http://blog.csdn.net/hfty290/article/details/42048001
、Client与Tracker的通讯
如今是时候从client角度来端详下Tracker了。由于无论是上传、下载、删除等操作都须要先查询Tracker。那么这些查询Tracker是怎样计算。并返回的呢?请看本篇。
《FastDFS之client与Tracker通讯》http://blog.csdn.net/hfty290/article/details/42064429
、合并存储
海量小文件导致性能下降,可能大家都听说过。福音是FastDFS通过合并小文件成大文件的方式来规避这个问题。FastDFS是怎样实现这个功能的,具体请看这里。
《FastDFS合并存储原理分析》 http://blog.csdn.net/hfty290/article/details/42026215
、Tracker-Leader选举
看过了《FastDFS合并存储原理分析》这篇文章后。对于当中提到的Tracker-Leader怎样选举可能会好奇,通过这篇文章你会看到Leader的选举过程。
《FastDFS之Tracker-Leader选择》 http://blog.csdn.net/hfty290/article/details/42030339
、合并存储设计缺陷
对于FastDFS合并存储功能不得不面对一个问题,在某些情况下会导致数据错误或丢失。
你在看《FastDFS合并存储原理分析》这篇文章时可能已经发现了,如今让我们完完整整地重现下这样的错误的出现,请看。
《FastDFS之合并存储缺陷导致数据丢失或错误》 http://blog.csdn.net/hfty290/article/details/42030481
FastDFS原理系列文章的更多相关文章
- MapReduce调度与执行原理系列文章
转自:http://blog.csdn.net/jaytalent?viewmode=contents MapReduce调度与执行原理系列文章 一.MapReduce调度与执行原理之作业提交 二.M ...
- Consul实现原理系列文章2: 用Gossip来做集群成员管理和消息广播
工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理.这篇文章会讲述Consul是如何使用Gossip来做集群成员管理和消息广播的. Consul使用Go ...
- Consul实现原理系列文章1: 用Raft来实现分布式一致性
工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理.在前一篇文章中,我介绍了Raft算法.这篇文章会讲讲Consul是如何使用Raft算法来实现分布式一 ...
- Consul实现原理系列文章3: Consul的整体架构
工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理.在前几篇文章介绍完了Consul用到的两个关键性东西Raft和Gossip之后,这篇文章会讲述Con ...
- java nio系列文章
java nio系列教程 基于NIO的Client/Server程序实践 (推荐) java nio与并发编程相关电子书籍 (访问密码 48dd) 理解NIO nio学习记录 图解ByteBuff ...
- .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引
系列文章索引: .NET面试题解析(01)-值类型与引用类型 .NET面试题解析(02)-拆箱与装箱 .NET面试题解析(03)-string与字符操作 .NET面试题解析(04)-类型.方法与继承 ...
- 【深入ASP.NET原理系列】--ASP.NET请求管道、应用程序生命周期、整体运行机制
微软的程序设计和相应的IDE做的很棒,让人很快就能有生产力..NET上手容易,生产力很高,但对于一个不是那么勤奋的人,他很可能就不再进步了,没有想深入下去的动力,他不用去理解整个框架和环境是怎么执行的 ...
- 分布式文件系统FastDFS原理介绍
在生产中我们一般希望文件系统能帮我们解决以下问题,如:1.超大数据存储:2.数据高可用(冗余备份):3.读/写高性能:4.海量数据计算.最好还得支持多平台多语言,支持高并发. 由于单台服务器无法满足以 ...
- 【转载】Android异步处理系列文章
本博文地址:http://blog.csdn.net/mylzc/article/details/6777767 转载请注明出处. 为了给用户带来良好的交互体验,在Android应用的开发过程中需要把 ...
随机推荐
- Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
安卓出现如下错误,需要增加FLAG_ACTIVITY_NEW_TASK标志 Intent intent1 = new Intent(getApplicationContext(), CameraAct ...
- nyoj 21--三个水杯(隐式图bfs)
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识 ...
- 杂项-DB:OLAP(联机分析处理)
ylbtech-杂项-DB:OLAP(联机分析处理) 联机分析处理OLAP是一种软件技术,它使分析人员能够迅速.一致.交互地从各个方面观察信息,以达到深入理解数据的目的.它具有FASMI(Fast A ...
- HUdson2092整数解
2019-05-17 16:04:37 加油,坚持就是胜利,fightting m / i的情况,i可能等于0 #include <bits/stdc++.h> using namespa ...
- Kafka .NET操作
Kafaka .NET连接 Kafka目前主流在用的.NET客户端有两个:一个是kafka-net,另外一个是Confluent.Kafka,这里给出使用示例: kafka-net示例: public ...
- 兼容各个浏览器的jquyer zclip复制文本插件 无效的解决办法
项目中使用点击文本复制功能,用了这个兼容各个浏览器的插件,但是发现放在最前面正常,放到嵌套的html中就失效. 解决办法: <span style="position: relativ ...
- MVP演化论
本文是翻译MVP: Model-View-Presenter The Taligent Programming Model for C++ and Java(Mike Potel)文章的摘要.该文介绍 ...
- Winform开发 如何为dataGridView 添加CheckBox列,并获取选中行
//添加CheckBox列 DataGridViewCheckBoxColumn columncb = new DataGridViewCheckBoxColumn(); columncb.Heade ...
- MySQL快速创造百万测试数据
CREATE TABLE `vote_record_memory` ( `id` INT (11) NOT NULL AUTO_INCREMENT, `user_id` VARCHAR (20) NO ...
- 07 --C语言字符串函数
1)字符串操作 复制 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strdup(char *str) 将串拷贝到新建的位置处 ...