Зміст[Сховати][Показати]
Доступність додатків ніколи не сприймалася так серйозно, як сьогодні, коли ми використовуємо програми не тільки для спілкування, як особистого, так і професійного, і коли додатки є бізнесом.
Програми, які не працюють постійно в мережі або нестабільні, втрачають своїх користувачів і актуальність, зрештою стаючи застарілими. Це сталося миттєво. Оскільки Інтернет ніколи не спить і працює 24 години на добу, 7 днів на тиждень, та ж ідея має застосовуватися до програм.
Для цього та забезпечення доступності додатків важлива масштабованість. Балансування навантаження є одним з найважливіших компонентів забезпечення доступності. Багато людей все ще вірять, що балансування навантаження можна виконати за допомогою простого сценарію.
Однак це не так. Тільки він забезпечує доступ до програм у всьому світі — у будь-який час і з будь-якого пристрою.
У цій публікації ми детально розглянемо балансування навантаження, його алгоритми та те, як воно пов’язане з мікросервісами, серед іншого. Давайте почнемо!
Що таке балансування навантаження?
Оскільки попит на веб-сайт або бізнес-додаток зростає, незабаром один сервер не зможе впоратися з усім навантаженням. Організації розподіляють навантаження на численні сервери, щоб задовольнити попит. Цей метод, відомий як «балансування навантаження», утримує один сервер від перевантаження, що може призвести до його сповільнення, відкидання запитів або навіть збою.
Балансування навантаження розподіляє мережевий трафік рівномірно, щоб уникнути збою через перевантаження ресурсів. Програми, веб-сайти, бази даних та інші комп’ютерні ресурси працюють краще і доступніші за допомогою цього методу. Це також допомагає правильно та вчасно обробляти запити користувачів.
З точки зору користувача, балансування навантаження служить невидимим посередником між клієнтом і сукупністю серверів, гарантуючи, що запити на з’єднання не відкидаються. Програми, веб-сайти, бази даних та онлайн-сервіси, швидше за все, згорнуть, якщо попит стане занадто великим без балансування навантаження.
Сотні тисяч запитів користувачів можуть бути відправлені на один веб-сайт із високою відвідуваністю одночасно. Для правильного заповнення веб-сторінок потрібним вмістом, таким як текст, зображення, відео та аудіо, потрібно кілька серверів. Балансування навантаження зазвичай використовується в фермах серверів веб-сайтів із високим трафіком, а також на DNS-серверах, базах даних і на сайтах із протоколом передачі файлів (FTP).
Якщо один сервер перевантажений, він може працювати погано або навіть вийти з ладу. Балансувальники навантаження зменшують ймовірність простою, розподіляючи запити користувачів рівномірно між набором серверів. Якщо один із серверів у групі виходить з ладу, трафік перенаправляється на інші сервери групи. Балансувальник навантаження автоматично додає нові сервери в процес розподілу трафіку, коли вони додаються до пулу серверів.
Як працює балансування навантаження?
Це працює наступним чином:
- Коли клієнт отримує запит, наприклад, через браузер або програму, він намагається підключитися до сервера.
- Коли балансувальник навантаження отримує запит, він направляє його на один із серверів у групі серверів на основі встановлених шаблонів за допомогою алгоритму (або ферми).
- Сервер отримує запит на з'єднання і відповідає клієнту через балансувальник навантаження.
- Коли балансувальник навантаження отримує відповідь, він збігає IP-адресу клієнта з IP-адресою вибраного сервера. Після цього відповідь передається разом із пакетом.
- Розвантаження SSL – це процес розшифрування даних за допомогою протоколу шифрування Security Socket Layer, щоб серверам не доводилося робити це.
- Процедура повторюється до завершення сеансу.
Методи балансування навантаження
Щоб вибрати, який із серверів у фермі серверів отримає наступний запит, кожен метод балансування навантаження використовує набір критеріїв. Існує п’ять типових підходів до балансування навантаження:
- Round Robin: Це підхід за замовчуванням, і він працює так, як звучить. Балансувальник навантаження розподіляє запити по черзі, починаючи з першого сервера в групі і опускаючись вниз, де він чекає на повторний виклик. Цей метод гарантує, що кожен сервер обробляє приблизно однакову кількість з’єднань.
- Зважений круговий режим: Цей підхід призначає кожному серверу вагу (або перевагу), який зазвичай пропорційний його потужності. Чим більше запитів отримує сервер, тим вище його вага. Наприклад, сервер із значенням ваги два отримує вдвічі більше запитів, ніж сервер із значенням ваги одиниці.
- Прикріплена сесія: Цей підхід, також відомий як збереження сеансу, підключає певні клієнти та сервери протягом сеансу. Щоб встановити зв’язок, балансувальник навантаження використовує файл cookie або IP-адресу користувача для ідентифікації атрибута користувача. Після встановлення з’єднання запити користувача спрямовуються на той самий сервер до завершення сеансу. Це оптимізує мережеві ресурси, а також покращує роботу користувачів.
- Найменше зв'язків: Ця стратегія передбачає, що всі запити призводять до однакового навантаження на сервер. В результаті сервер з найменшою кількістю запитів отримує наступний запит.
- Хеш IP: Цей алгоритм генерує унікальний хеш-ключ на основі IP-адрес джерела та призначення клієнта та сервера. Ключ використовується для маршрутизації запиту і дозволяє відновити втрачене з'єднання з тим же сервером.
Апаратне проти Програмне забезпечення балансування навантаження
Апаратний балансувальник навантаження
Фізичне обладнання, таке як прилад, складає апаратні балансувальники навантаження. Вони направляють трафік на сервери залежно від таких факторів, як кількість існуючих підключень, використання процесора та продуктивність сервера. У апаратних балансирах навантаження є власне мікропрограмне забезпечення, яке необхідно підтримувати та оновлювати, коли стають доступними нові версії та виправлення безпеки.
Апаратні балансувальники навантаження часто забезпечують більш високу продуктивність і контроль, а також ширший спектр можливостей, таких як аутентифікація Kerberos і апаратне прискорення SSL, але вони вимагають певного рівня досвіду управління та обслуговування. Оскільки апаратні балансувальники навантаження менш гнучкі та масштабовані, ніж програмні балансувальники навантаження, існує схильність до надмірного надання апаратних балансувальників навантаження.
Програмне забезпечення Load Balancer
Програмні балансери навантаження, як правило, легше налаштувати, ніж їх апаратні аналоги. Вони також більш економічні та адаптовані, а також добре працюють із середовищами розробки програмного забезпечення. Програмний метод дозволяє налаштувати балансир навантаження відповідно до точних вимог вашого середовища. Підвищена гнучкість може відбуватися за рахунок додаткового часу, витраченого на налаштування балансира навантаження.
Програмні балансери забезпечують більшу гнучкість для внесення змін та оновлень, ніж апаратні, які мають більш закритий підхід. Попередньо запаковані віртуальні машини можна використовувати як програмне забезпечення балансування навантаження (VM). Віртуальні машини заощадять вам час на налаштування, але вони можуть не мати всіх функцій, доступних у їхніх апаратних аналогах.
Проста реалізація балансування навантаження
Ми будемо використовувати бібліотеку Spring Cloud для створювати програми які підключаються до інших програм із збалансованим навантаженням. Під час обробки запитів віддаленого обслуговування ми можемо легко побудувати балансування навантаження, використовуючи будь-яку техніку, яка нам подобається. Розглянемо наступний код як приклад. Ми почнемо з базової серверної програми.
Сервер матиме лише одну кінцеву точку HTTP і працюватиме в кількох випадках. Потім ми створимо клієнтську програму, яка використовує Load Balancer для розподілу запитів між кількома екземплярами сервера.
сервер
Почнемо з основного Весняний черевик додаток для нашого прикладу сервера:
Для початку ми вводимо настроювану змінну під назвою instance_ID. Це допомагає нам розрізняти численні екземпляри, які діють. Після цього ми створюємо єдину кінцеву точку HTTP GET, яка повертає повідомлення та ідентифікатор екземпляра.
Примірник за замовчуванням з ідентифікатором 1 працюватиме на порту 8080. Нам потрібно лише додати кілька параметрів програми, щоб запустити другий екземпляр:
Клієнт
Тепер давайте подивимося на код клієнта. Ось де підходить Load Balancer, тож давайте почнемо з включення його в нашу програму:
Після цього ми розробляємо реалізацію ServiceInstanceListSupplier. Це один з найважливіших інтерфейсів у Load Balancer. Він визначає, як ми знаходимо доступні екземпляри служби.
Ми жорстко закодуємо два окремих екземпляри нашого прикладу сервера в нашому прикладі програми. Вони працюють на одній системі, але використовують окремі порти:
Створіть клас LoadBalancerConfiguration зараз:
Цей клас має лише одну мету: він створює конструктор WebClient із збалансованим навантаженням для віддалених запитів. У нашій анотації використовується вигадана назва послуги.
Це пов’язано з тим, що ми, швидше за все, не будемо знати точні імена хостів і порти для запуску екземплярів заздалегідь. В результаті ми використовуємо вигадане ім’я як заповнювач, і фреймворк замінить фактичну інформацію, коли вибере запущений екземпляр.
Далі давайте створимо клас Configuration, який буде використовуватися для створення екземпляра нашого екземпляра служби. Зверніть увагу, що ми використовуємо той самий псевдонім, що й раніше:
Тепер ми можемо створити реальний клієнтський додаток. Давайте надішлемо 10 запитів на сервер-зразок за допомогою попереднього компонента WebClient:
З результату ми бачимо, що ми балансуємо навантаження між двома окремими екземплярами:
Балансування навантаження в мікросервісах
Архітектура мікросервісів використовується кількома компаніями, такими як Netflix і Amazon, для розробки бізнес-додатків як набору слабо пов’язаних служб. Гіпермасштабування та безперервна доставка для складних додатків – це лише дві причини переходу до цієї розподіленої, слабо зв’язаної архітектури.
Команди цих підприємств впровадили стратегії Agile і DevOps, щоб створювати додатки швидше і з меншою частотою відмов, ніж традиційні методи. Однак ви повинні знайти баланс між складністю розподіленої архітектури та вимогами програми, вимогами до масштабування та обмеженнями часу виходу на ринок.
Протягом багатьох років контролери доставки додатків (ADC) були вирішальними для виконання вимог рівня обслуговування для корпоративних програм, розміщених локально або в хмарі. Клієнту, який працює з програмою на основі мікросервісів, не потрібно знати про екземпляри, які її надають, щоб розвивати клієнта та мікросервіси незалежно.
Це саме роз’єднання, яке забезпечує зворотний проксі або балансувальник навантаження. Знову ж таки, балансування навантаження — це рішення, яке гарантує, що мікросервіси можуть обробляти попит, безпеку та доступність.
Коли ви поєднуєте традиційне розподілення навантаження між Північ-Південь між клієнтськими програмами та програмами на основі мікросервісів із розгортанням Схід-Захід для горизонтальної масштабованості, ви отримуєте значний приріст. Мета полягає в тому, щоб підтримувати безпечне та регульоване середовище, яке вимагається ІТ без шкоди для швидкості розробки або Автоматизація DevOps вимоги.
Переваги
Балансування навантаження надає різноманітні переваги, покращуючи використання ресурсів, доставку даних та час відповіді для веб-сайтів і програм із високим трафіком, а також баз даних, які отримують велику кількість запитів. Балансування навантаження забезпечує швидке та коректне виконання запитів користувачів у сценаріях із високим трафіком.
Вони позбавляють користувачів від загострення роботи з млявими програмами та ресурсами. Балансування навантаження також допомагає уникнути простоїв і спрощує безпеку, знижуючи ризик втрати продуктивності та прибутків для вашої компанії.
- Балансування навантаження забезпечує гнучкість додавати та видаляти сервери відповідно до вимог, а також оптимально ефективно керувати трафіком. Оскільки під час технічного обслуговування трафік перенаправляється на інші сервери, також можливо проводити технічне обслуговування сервера, не заважаючи користувачам.
- Балансування навантаження забезпечує вбудоване резервування шляхом розподілу трафіку між набором серверів. Ви можете негайно перекинути навантаження на інші сервери, якщо один з них виходить з ладу, мінімізуючи вплив на користувачів.
- Якщо використання програми чи веб-сайту збільшується, збільшення трафіку може погіршити його продуктивність, якщо його не ефективно обробляти. Завдяки балансуванню навантаження ви можете додати реальний або віртуальний сервер, щоб задовольнити попит, не порушуючи обслуговування. Балансувальник навантаження визначає нові сервери, коли вони з’являються в мережі, і без зусиль включає їх в роботу. Цей метод є кращим, ніж перенесення веб-сайту з перевантаженого сервера на новий, що часто пов’язане з деякими простоями.
Висновок
Балансування навантаження є критичним компонентом сучасних, відмовостійких систем. Ми можемо просто створювати програми, які розподілятимуть запити до кількох екземплярів служби, використовуючи різні підходи балансування навантаження. Підприємства повинні підтримувати складні ІТ-системи, щоб надавати додатки безпечно.
Конфігурація, розгортання та обслуговування міждоменних мікросервісів можуть бути схильними до помилок, дорогими та тривалими. ІТ повинні використовувати найкращі методи й технології автоматизації, видимості, аналітики й оркестровки, сумісні з їхніми процесами agile та DevOps, щоб спростити налаштування й обслуговування цих мікросервісів.
залишити коментар