Alluxio源码分析定位策略:最大可用容量优先策略MostAvailableFirstPolicy

简介:         最大可用容量优先策略MostAvailableFirstPolicy是一种worker可用容量最大的定位策略。如果没有worker合格的话该策略返回null。它的核心方法getWorkerForNextBlock()实现如下: /** * A policy that returns the worker with the most available bytes. The policy returns null if no * worker is qualified. * 一种worker可用容量最大的定位策略。

        最大可用容量优先策略MostAvailableFirstPolicy是一种worker可用容量最大的定位策略。如果没有worker合格的话该策略返回null。它的核心方法getWorkerForNextBlock()实现如下:

/**
 * A policy that returns the worker with the most available bytes. The policy returns null if no
 * worker is qualified.
 * 一种worker可用容量最大的定位策略。如果没有worker合格的话该策略返回null。
 */
@ThreadSafe
public final class MostAvailableFirstPolicy implements FileWriteLocationPolicy {

  @Override
  public WorkerNetAddress getWorkerForNextBlock(List<BlockWorkerInfo> workerInfoList,
      long blockSizeBytes) {
	  
	// 将输入参数BlockWorkerInfo列表workerInfoList转换成ArrayList形式的列表inputList
    List<BlockWorkerInfo> inputList = Lists.newArrayList(workerInfoList);
    
    // 标志变量:最大可用容量
    long mostAvailableBytes = -1;
    
    // 被选中的worker地址
    WorkerNetAddress result = null;
    
    // 遍历BlockWorkerInfo列表inputList,取出每个BlockWorkerInfo,即workerInfo:
    for (BlockWorkerInfo workerInfo : inputList) {
    	
      // 如果该workerInfo的可用容量(总容量减去已用容量)大于最大可用容量mostAvailableBytes,则
      // 设置标志变量最大可用容量mostAvailableBytes为当前worker的可用容量,设置被选中的worker地址result为当前worker的网络地址
      if (workerInfo.getCapacityBytes() - workerInfo.getUsedBytes() > mostAvailableBytes) {
        mostAvailableBytes = workerInfo.getCapacityBytes() - workerInfo.getUsedBytes();
        result = workerInfo.getNetAddress();
      }
    }
    
    // 返回被选中的worker地址
    return result;
  }
}
        大体流程如下:

        1、将输入参数BlockWorkerInfo列表workerInfoList转换成ArrayList形式的列表inputList;

        2、初始化标志变量:最大可用容量mostAvailableBytes为-1;

        3、初始化被选中的worker地址result为null;

        4、遍历BlockWorkerInfo列表inputList,取出每个BlockWorkerInfo,即workerInfo:

              4.1、如果该workerInfo的可用容量(总容量减去已用容量)大于最大可用容量mostAvailableBytes,则:

                       4.1.1、设置标志变量最大可用容量mostAvailableBytes为当前worker的可用容量;

                       4.1.2、设置被选中的worker地址result为当前worker的网络地址;

        5、返回被选中的worker地址(有可能为null)。

        这里,有个问题:什么时候所有worker已用容量会大于总容量,也就是workerInfo.getCapacityBytes() - workerInfo.getUsedBytes()的值会小于等于-1,而导致最终结果返回null呢?即便是某一个worker,什么时候已用容量会大于总容量呢?留待以后再解决吧!

相关文章
|
28天前
|
存储 监控 算法
【C++ 软件设计思路】高效管理历史任务记录:内存与磁盘结合的策略解析
【C++ 软件设计思路】高效管理历史任务记录:内存与磁盘结合的策略解析
53 0
|
2月前
|
分布式计算 关系型数据库 MySQL
DataWork数据处理问题之调整并发数量如何解决
DataWork数据处理是指使用DataWorks平台进行数据开发、数据处理和数据治理的活动;本合集将涵盖DataWork数据处理的工作流程、工具使用和问题排查,帮助用户提高数据处理的效率和质量。
43 4
|
监控 Java 索引
ES 生产中10个常见参数阈值(默认最大值)操作及优化解决方案
ES 生产中10个常见参数阈值(默认最大值)操作及优化解决方案
ES 生产中10个常见参数阈值(默认最大值)操作及优化解决方案
|
API 索引
es实战-分片分配失败解决方案
分片无法分配情况的一些解决办法
1835 0
|
3月前
|
数据采集 Java 调度
深入解析Java线程池的扩容机制与拒绝策略
深入解析Java线程池的扩容机制与拒绝策略
94 0
|
5月前
|
存储 关系型数据库 MySQL
空闲空间管理和文件系统结构的优化策略
对于有科班背景的读者,可以跳过本系列文章。这些文章的主要目的是通过简单易懂的汇总,帮助非科班出身的读者理解底层知识,进一步了解为什么在面试中会涉及这些底层问题。否则,某些概念将始终无法理解。这些计算机基础文章将为你打通知识的任督二脉,祝你在编程领域中取得成功!
空闲空间管理和文件系统结构的优化策略
|
运维 监控 Kubernetes
EKS自动扩容-方式一:ASG负载检测自动扩容功能
EKS自动扩容-方式一:ASG负载检测自动扩容功能
361 0
EKS自动扩容-方式一:ASG负载检测自动扩容功能
|
编解码 算法 前端开发
Cartographer参数调整来降低延迟的策略
Cartographer参数调整来降低延迟的策略
|
缓存 PHP 数据库
性能永远不是优先考虑的问题
在SAE博客上看到一篇文章,摘录有价值的段落存盘,收藏。 我从来不会一开始就考虑性能问题。如果项目成本很低,甚至到项目结束时,如果没有感觉到明显的性能问题,也不会去管。要知道现在已经不是DOS的年代,CPU的计算能力很高,但成本很低了。
949 0