FastDFS之客户端与Tracker通讯

FastDFS之客户端与Tracker通讯

 

基于FastDFS 5.03/5.04


2014-12-19

 

一、概述

      客户端大部分的操作过程都是要先查询Tracker,从Tracker返回具体操作的StorageIP,然后连接该StorageIP,执行具体的操作。本篇将主要介绍三种类型的客户端操作:Upload、Download、Delete,Tracker是如何选择一个可使用的StorageIP返回给客户端。


二、Tracker选择Upload Storage

首先来看下tracker.conf之中有关Upload Storage选择的相关配置:

store_lookup = 0 ##表示Upload时Group的选择

0:所有的Group以轮询方式进行选择

1:指定Group,该Group名称由store_group配置指定

2:负载均衡,表示选择空余容量最大的Group


store_server = 0 ##表示如何选择Group中的Storage

0:Group中的所有Storage进行轮询

1:选择IP地址最大的Storage

2:根据优先级配置(在每个storage.conf、upload_priority配置)


store_path = 0 ##表示如何选择Storage中的Store_path

0:对所有的Store_path进行轮询

1:负载均衡,选择空闲空间最大的Store_path

 

      根据上述的三个配置,也能猜到了,Tracker在收到客户端的Upload查询时,需要返回三个值,group_name、storage_ip、storage_port、write_path_index(表示store_path的索引值)。下面依次说明这三个值的选择:


1、Group选择

      选择的Group需要满足两个条件:

Group中当前要有处于Active状态的Storage;

Group的空闲空间(组内Storage最小的空闲空间)大于配置的保留空间。


1)判断若store_lookup==ROUND_ROBIN或者LOAD_BALANCE

      则直接使用g_groups.current_write_group值,该值默认为0,若选择方式为轮询ROUND_ROBIN则每次选择后会递增,而若为负载均衡LOAD_BALANCE则Tracker在每次收到Storage的磁盘使用率汇报消息STORAGE_REPORT_DISK_USAGE时更新。得到group的索引值后,只要去检查该group是否满足上面说到的两个条件,若满足,group就选择好了。否则按照顺序依次检测后面的group找到一个满足条件的group即可。若依然没找到则返回错误。


2)判断若store_lookop==SPEC_GROUP 表示指定group,那么直接去检查该Group是否符合上述两个条件,若符合则表示找到group,若不符合则返回错误。

 

2、Storage选择

1)pStoreServer指针

      Tracker之中为每个Group保存一个pStoreServer指针,该指针表示下次存储数据时可使用的Storage对象指针。在源码中通过tracker_mem_find_store_server函数来实现更新,在该Group之中有Storage状态从非Active变成Active或者,从Active变成非Active时否将检查是否更新。

      pStoreServer指针更新按照如下逻辑进行:若该组没有状态为Active的Storage则直接返回。若tracker.conf配置的store_server==2(按照优先级),则会遍历该组内的Active状态Storage找到其中优先级最小的那个Storage赋予他;其他情况就是直接使用第一个Active状态的Storage赋予它。

      store_server==ROUND_ROBIN则直接按照轮询方式选择下一个Active状态的Storage;否则直接使用该Group的pStoreServer指针对应的Storage即可。

 

3、StorePath选择

      同样Tracker为每个Storage保存一个current_write_path,该值表示当前应该使用的store_path_index。初始时该值等于零,同样的若store_path==1(负载均衡,表示使用最大空闲空间的那个Store_path),则在Storage每次汇报磁盘空间使用率的消息中更新,与Group负载均衡方式类似。

此时只要从current_write_path开始选择Store_path,只要满足空闲空间大于保留空间则选择结束。


三、Tracker选择Download Storage

      Tracker在为下载而选择一个Storage时提供的配置为download_server配置,可以选择从源Storage优先下载或者轮询下载。Tracker首先会检查要下载的Group中是否有状态为Active的Storage,若没有则直接返回失败。

1、源优先下载

1)先从要下载的FileID中解析出storage_id、timestamp、file_size三个字段

2)使用storage_id去查找对应的Storage,若其状态为Active则成功返回,否则转变成轮询方式选择。


2、轮询方式选择

      从上次的位置向后检查状态为Active的Storage,做如下判断,若条件符合则返回该Storage:

1)文件时间timpstamp为一天之前(FastDFS假设一天之前的文件肯定同步完成)

2)该Storage的最后最早被同步时间大于该文件的timestamp

3)该storage的最后被同步时间+1大于文件时间并且当前时间减去文件时间大于300秒(不明白作者这个判断的意图)

4)该Storage就是文件的源Storage

当没有一个Storage符合条件时返回错误。

关于最后最早被同步时间,请参考我这篇文章第三部分:http://blog.csdn.net/hfty290/article/details/42041155


四、Tracker选择Delete Storage

      该过程与Tracker选择Download Storage一样。

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值