Alwayswannalol / FlexQueue-Dynamic-Distributed-Task-Scheduling

We consider a centralized distributed system organized as a tree, where the central node is the root and the remaining nodes are subtrees. This system uses tasks that require different computing resources (CPU and memory). The main goal of the system is to efficiently distribute tasks between tree nodes.
0 stars 0 forks source link

Оценка задач и состояния узла #4

Closed Alwayswannalol closed 6 hours ago

Alwayswannalol commented 1 week ago

Определиться с метриками, как мы будем оценивать состояние узла и время выполнения таски на узле в зависимости от CPU и Memory

Alwayswannalol commented 4 days ago

Выбрать один алгоритм, описать его тут (можно на псевдокоде изначально) и написать данные, которые нужно собрать с узла для подсчета метрик

grand00father commented 2 days ago

Weight Least Connections - алгоритм балансировки нагрузки на узлах. С его помощью узел-мастер сможет понять, какой из оставшихся узлов справится с задачей быстрее. Его особенность заключается в том, что он учитывает как характеристики самих узлов (загруженность CPU, количество свободной оперативной памяти, вычислительная мощность узла), так и их текущую загруженность. Т.е. количество задач, которые уже предстоит выполнить узлу. Основные этапы алгоритма представлены ниже:

  1. После получения данных о каждом вычислительном узле, необходимо определить их вес:
    //максимально возможные  показатели в системе
    float max_RAM;
    float max_power_CPU; 
    float weight_node (load_CPU, RAM, power_CPU){
    float weight_load = 0.3;
    float weight_RAM = 0.2;
    float weight_power = 0.5;
    float weight = weight_load *(load_CPU/100) + weight_RAM *( RAM/max_RAM) + weight_power * 
    (power_CPU/max_power_CPU);
    return weight;
    }

На данном этапе для каждого узла вычисляется вес, учитывая каждую из его характеристик. Формула веса представляет из себя взвешенную сумму характеристик, деленных на максимальные показатели в системе. Весовые коэффициенты - величина того, насколько характеристики важна при выполнении данного типа задач.

  1. Следующий этап - это определение целевого узла. Сначала необходимо посчитать приоритеты:
    float select_node(count_queue, weight){
    priority = count_queue/weight;
    return priority ;
    }

    На данном этапе для каждого узла вычисляется значения приоритета, с помощью которого узел-мастер выберет целевой узел. Выбор узла:

    float min_priority = infinity;
    for (node in node_list){
    if (node_priority < min_priority) {
       min_priority = node_priority ;
       select_node = node;
    }
    }

    Таким образом с помощью алгоритма Weight Least Connections узел-мастер выбрал узел, на который стоит отправить пришедшую задачу.