Балансування навантаження: відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Вилучено вміст Додано вміст
Створена сторінка: thumb|400px|Діаграма, що унаочнює запити користувача до кластера [[Elasticsearch розподілені зрівноважувачем навантаки.]] '''Зрівноваження навантаги''' — це процес розподілення множини задач на множині Обчислювальні ресурси|ресурсів...
(Немає відмінностей)

Версія за 19:58, 11 жовтня 2022

Діаграма, що унаочнює запити користувача до кластера Elasticsearch розподілені зрівноважувачем навантаки.

Зрівноваження навантаги — це процес розподілення множини задач на множині ресурсів (обчислювальних одиниць), з метою зробити загальний час їхнього опрацювання більш дієвим. Зрівноваження навантаги може оптимізувати час відповідь і запобігти нерівномірному навантаженню на окремі обислювальні вузли тоді як інші обислювальні вузли бездіють.

Зрівноваження навантаги це предмет досліджень у галузі паралельних обчислень. Головні два підходи — статичні алгоритми, які не беруть до уваги стан різних машин, динамічні алгоритми, які зазвичай загальніші і дієвіші, але вимагають обміну інформацією між різними обислювальними одиницями, що створює ризик падіння дієвості.

Огляд задачі

Алгоритм зрівноваження навантаги завжди намагається відповідати певній задачі. Серед іншого, природа задач, алгоритмічна складность, архітектура заліза, на якому алгоритм виконуватиметься, а також вимоги до помилкостійкості[en] повинні бути взяті до уваги. Отже, доводиться йти на різні поступки, щоб якнайліпше відповідати потребам певного застосування.

Природа задач

Дієвість алгоритмів зрівноваження навантаги критично залежиться від природи задач. Тому, що більше відомо про задачі під час ухвалення рішень, то більший потенціал для оптимізації.

Розмір задач

Повне знання про час виконання кожної задачі дозволяє досягти найліпшого розподілення навантаги (див. дуже простий алгоритм приросткових сум[en], що дає хороше наближення).[1] На жаль, таких повних знань зазвичай немає.

З цієї причини існує декілька підходів, щоб отримати якесь уявлення про різні потрібні часи виконання. По-перше, у щасливому випадку, коли ми маємо відносно однорідний розмір, можливо припустити, що кожна задача має потребує середнього часу виконання. Інакше, якщо час виконання дуже нерівний, потрібні мудрованіші підходи. Один з них це додати певні метадані до кожної задачі. Покладачаючись на статистику часу виконання задач з подібними метаданими, можна зробити висновки для майбутніх задач.[2]

Залежності

У деяких випадках, задачі залежать одна від одної. Ці взаємозалежності можна унаочнити через спрямований ациклічний граф. Зрозуміло, що деякі задачі не можуть стартувати допоки інші ще не завершені.

Припускаючи, що час необхідний для кожної задачі відомий заздалегідь, найліпший порядок виконання мусить мінімізувати загальний час виконання. Хоча це NP-складна задача задача і тому може бути складно отримати точний розв'язок. Існують алгоритми, як-от планувальник задач, які обчислюють оптимальний розподіл за допомогою метаевристичних методів.

  1. Sanders, Peter; Mehlhorn, Kurt; Dietzfelbinger, Martin; Dementiev, Roman (11 September 2019). Sequential and parallel algorithms and data structures : the basic toolbox. ISBN 978-3-030-25208-3.
  2. Liu, Qi; Cai, Weidong; Jin, Dandan; Shen, Jian; Fu, Zhangjie; Liu, Xiaodong; Linge, Nigel (30 August 2016). Estimation Accuracy on Execution Time of Run-Time Tasks in a Heterogeneous Distributed Environment. Sensors. 16 (9): 1386. Bibcode:2016Senso..16.1386L. doi:10.3390/s16091386. PMC 5038664. PMID 27589753. S2CID 391429.