⚖️ Балансувальник навантаження — політики розподілу запитів
Розподіляйте вхідні запити між серверами політиками round-robin, найменших з'єднань, зваженою та випадковою. Дивіться, як черги, затримка й завантаження розходяться зі зміною трафіку й швидкості серверів.
Про симуляцію балансувальника навантаження
Ця симуляція моделює балансувальник навантаження, що розподіляє вхідні запити серед пулу бекенд-серверів. Запити надходять як пуассонівський процес, з проміжками між надходженнями, взятими з експоненційного розподілу за формулою мінус натуральний логарифм рівномірного випадкового числа, поділений на частоту надходжень лямбда. Кожен сервер обробляє один запит за раз, з власною експоненційно розподіленою тривалістю обслуговування, заданою індивідуальною частотою обслуговування мю, тоді як запити, що очікують, стоять у черзі кожного сервера.
Кнопки політик перемикають між round-robin, least-connections, зваженою та випадковою диспетчеризацією, а повзунки налаштовують кількість серверів (від 2 до 8), частоту надходжень лямбда (від 0,5 до 9) та швидкість симуляції. Анімація показує запити, що рухаються від вузла LB до обраного сервера, глибину черги у вигляді крапок і живу статистику середньої затримки, завершених запитів, запитів у системі та скинутих запитів. Це ілюструє, чому системи черг стають нестабільними при наближенні завантаження до одиниці — центральну проблему реальних розподілених систем.
Часті запитання
Що таке балансувальник навантаження і що показує ця симуляція?
Балансувальник навантаження стоїть перед кількома бекенд-серверами і вирішує, котрий з них має обробити кожен вхідний запит. Ця симуляція анімує це рішення в реальному часі, показуючи, як запити рухаються від центрального вузла LB до серверів за чотирма різними політиками диспетчеризації, з живими чергами, затримкою й завантаженням, щоб ви могли порівняти поведінку політик.
Як тут працює політика round-robin?
Round-robin утримує вказівник, що циклічно проходить сервери у фіксованому порядку: сервер 0, потім 1, потім 2, і назад до 0. Це справедливо за кількістю запитів і тривіально у реалізації, але ігнорує, наскільки зайнятий чи швидкий кожен сервер, тож усе одно може накопичувати черги на повільніших серверах.
Яка різниця між least-connections і зваженою диспетчеризацією?
Least-connections надсилає кожен новий запит серверу з найменшою кількістю активних запитів, враховуючи як його поточне завдання, так і чергу, тож він адаптується до нерівномірного навантаження. Зважена диспетчеризація натомість обирає сервер з ймовірністю, пропорційною його вазі, яка в цій моделі дорівнює швидкості обслуговування, тож швидші сервери отримують пропорційно більше трафіку незалежно від поточного навантаження.
Що керують повзунки Servers, Arrival rate та Sim speed?
Повзунок Servers встановлює кількість бекенд-серверів, від 2 до 8. Повзунок Arrival rate встановлює лямбда — середню кількість запитів на симульовану секунду, від 0,5 до 9. Повзунок Sim speed масштабує швидкість плину симульованого часу відносно реального часу, дозволяючи спостерігати повільно або перемотувати вперед, не змінюючи базову статистику.
Що таке пуассонівські надходження і чому вони використовуються?
Пуассонівський процес моделює незалежні випадкові події зі сталою середньою частотою, де проміжки між надходженнями йдуть за експоненційним розподілом. Симуляція генерує кожен проміжок як мінус натуральний логарифм рівномірного випадкового числа, поділений на лямбда. Реальний веб- і мережевий трафік нерівномірний і добре апроксимується цією моделлю, тому вона є стандартним припущенням у теорії черг.
Чому затримка вибухово зростає, коли завантаження наближається до 100 відсотків?
Завантаження ро — це частка часу, коли сервер зайнятий, яка дорівнює частоті надходжень, поділеній на частоту обслуговування мю. Класичні результати теорії черг показують, що середній час очікування зростає пропорційно одиниці, поділеній на (одиниця мінус ро). Коли ро наближається до одиниці, цей доданок прямує до нескінченності, тож невеликі зростання трафіку спричиняють різке зростання черг і затримки, а за ро більше одиниці черга росте необмежено.
Що означає лічильник Dropped?
Кожен сервер має максимальну довжину черги дванадцять. Якщо запит надходить на сервер, черга якого вже заповнена і який зараз зайнятий, він не може бути прийнятий і рахується як скинутий, а не поставлений у чергу. Зростання лічильника Dropped сигналізує, що система перевантажена для обраної політики й частоти надходжень.
Як у цій моделі обчислюється середня затримка?
Коли обслуговування запиту завершується, симуляція бере його загальний час у системі — поточний симульований час мінус час його народження, що охоплює як очікування в черзі, так і обслуговування. Ці суми додаються й діляться на кількість завершених запитів, даючи поточне середнє значення затримки, показане на панелі статистики.
Чи є ця симуляція фізично й математично точною?
Вона використовує справді експоненційні часи між надходженнями й обслуговуванням, черги FIFO з одним сервером і чотири стандартні політики диспетчеризації, тож вона достовірно відтворює якісну поведінку систем черг у стилі M/M/c. Частоти обслуговування серверів призначаються за фіксованим шаблоном, а не випадково, а обмеження черги скінченне, тож це достовірна навчальна модель, а не прогнозатор продуктивності для виробництва.
Чому round-robin усе одно може спричиняти дисбаланс, навіть коли кількості рівні?
Round-robin вирівнює кількість запитів, які отримує кожен сервер, але не роботу. Якщо запити відрізняються за часом обслуговування, або сервери відрізняються за швидкістю мю, повільніший сервер, якому дали ту саму кількість завдань, відстає, накопичуючи довгу чергу, поки швидші сервери спорожняються до простою. Least-connections і зважені політики вирішують це, реагуючи на навантаження чи потужність.
Де ці політики балансування навантаження використовуються в реальному світі?
Вони лежать в основі ферм веб-серверів, мереж доставки контенту, реплік читання баз даних і мереж мікросервісів. Зворотні проксі, як-от NGINX і HAProxy, та хмарні балансувальники навантаження пропонують режими round-robin, least-connections і зважений безпосередньо. Симуляція фіксує ті самі компроміси, які інженери зважують, обираючи політику для виробничого трафіку.