Топ-6 систем черги для розробників Backend

Шукаєте систему черги? А може, ви шукаєте кращого? Ось уся інформація, яка вам потрібна!


Системи в черзі – це найкраще збережений секрет розробки.

Не намагаючись написати вірш, вихваляючи системи очередей, я б сказав, що молодший розробник серверних програм стає програмою середнього рівня, коли він навчиться інтегрувати черги в систему. Черги покращують клієнтський досвід (ми побачимо, як), зменшують складність та покращують надійність системи.

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

Перш ніж розпочати, відмова від відповідальності: якщо вам вже зручно користуватися системами черги і хочете порівняти різні варіанти, наступні кілька вступних розділів спонукають до сну. �� Тому сміливо стрибайте прямо вперед. Вступні розділи призначені для тих, хто має лише туманне уявлення про системи очередей або щойно почули назву мимохідь.

Що таке система черги?

Почнемо з розуміння, що таке черга.

Черга – це структура даних в інформатиці, яка імітує, ну, справжні черги світу, які ми бачимо навколо себе. Наприклад, якщо ви перейдете до лічильника квитків, ви помітите, що вам доведеться стояти в кінці черги, тоді як людина, що розпочала чергу, отримає квиток спочатку. Це те, що ми також називаємо явищем «перший прийшов, вперше послужив». У галузі інформатики можна писати програми, які зберігають такі свої завдання в черзі, обробляючи їх по черзі на одній і тій же основі “перший прийшов-перший”.

Зауважте, що черга не робить самої реальної обробки. Це просто тимчасове зберігання видів, де завдання чекають, поки їх щось не підхопить. Якщо все це звучить занадто абстрактно, не хвилюйтеся. Це абстрактне поняття, але ми побачимо чіткі приклади в наступному розділі. ��

Для чого потрібні системи черги?

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

Обробка фону

Припустимо, ви проводите маркетингову кампанію електронної комерції, де важливий час, і ваша програма створена таким чином, що вона запускає електронний лист із підтвердженням, перш ніж клієнт здійснить платіж, і відобразиться сторінка “спасибі”. Якщо поштовий сервер, до якого ви підключаєтесь, не працює, веб-сторінка просто помре, порушуючи досвід роботи користувачів.

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

Паралельне виконання

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

Як тільки ваша програма зростає і починає отримувати більше 100 запитів в хвилину в середньому, вона почне відставати все більше і більше і ніколи не зможе виконати всі завдання.

У системі черг цю ситуацію можна уникнути, встановивши декількох працівників, які можуть обирати роботу (що містить 100 звітів, які потрібно виконати кожен) та паралельно працювати над тим, щоб набагато швидше закінчити завдання..

Одужання від невдачі

Ми, як правило, не думаємо про невдачу як веб-розробники. Ми якось сприймаємо як належне, що наші сервери та API, які ми використовуємо, завжди будуть в Інтернеті. Але реальність інша – відключення мережі все занадто поширені, і відмінні API, на які ви покладаєтесь, можуть бути знищені через проблеми з інфраструктурою (перш ніж сказати “не я!”, Не забувайте про масовий відключення Amazon S3). Отже, повернувшись до прикладу звітності, якщо частина вашої генерації звіту вимагає підключення до API платежів, а це з’єднання припинено на 2 хвилини, що станеться з 200 звітами, які не відбулися?

Хоча системи черги, проте, передбачають значні накладні витрати. Крива навчання є досить крутою, коли ви переходите до абсолютно нового домену, складність програми та розгортання збільшується, а завдання черги не завжди можна контролювати зі 100% точністю. Однак, є ситуації, коли створити додаток без черг просто неможливо.

Якщо це не вийде, давайте подивимось на деякі поширені варіанти серед чергових систем / систем сьогодні.

Редіс

Редіс відомий як сховище ключових значень, яке просто зберігає, оновлює та витягує рядки даних, не знаючи структури даних. Хоча це могло бути і раніше, сьогодні Redis має ефективні та дуже корисні структури даних, такі як списки, відсортовані набори та навіть система Pub-Sub, що робить його дуже бажаним для реалізації черг.

Перевагами Redis є:

  • Повністю вбудована база даних, що призводить до швидшого читання / запису.
  • Висока ефективність: може легко підтримувати більше 100 000 операцій читання / запису в секунду.
  • Високо гнучка схема збереження. Можна або досягти максимальної продуктивності ціною можливої ​​втрати даних у разі відмов, або налаштувати в повністю консервативному режимі, щоб пожертвувати продуктивністю для послідовності.
  • Кластери підтримуються поза коробкою

Зверніть увагу, що Redis не має жодних абстракцій для обміну повідомленнями / чергами / відновленнями, тому вам або потрібно використовувати пакет або створити легку систему самостійно. Прикладом є те, що Redis – це вихідний сервер черги за замовчуванням для рамки PHP Laravel, де планувальники реалізовані авторами фреймворку.

Навчання Redis легко.

КроликMQ

Існує кілька тонких відмінностей між Redis і КроликMQ, тож давайте спочатку вийдемо з них.

Перш за все, RabbitMQ має більш спеціалізовану, чітко визначену роль, і тому він побудований для відображення цього – обміну повідомленнями. Іншими словами, його приємне місце – діяти як посередник між двома системами, що не стосується Redis, який діє як база даних. Як результат, RabbitMQ надає ще кілька засобів, які відсутні у Redis: маршрутизація повідомлень, повторні спроби, розподіл навантаження тощо.

Якщо ви задумаєтесь про це, черги із завданнями також можна розглядати як систему обміну повідомленнями, де планувальник, працівники та “подачі робіт” можуть вважати осіб, які беруть участь у передачі повідомлень..

RabbitMQ має такі переваги:

  • Кращі абстракції для передачі повідомлень, зменшення роботи на рівні додатків, якщо передача повідомлень – це те, що вам потрібно.
  • Більш стійкий до перебоїв та відключень електроживлення (ніж Redis, принаймні за замовчуванням).
  • Підтримка кластерів та федерації для розподілених розгортань.
  • Корисні інструменти для управління та моніторингу ваших розгортань.
  • Підтримка практично всіх нетривіальних мов програмування там.
  • Розгортання за допомогою вашого інструменту на вибір (Docker, шеф-кухар, лялька тощо).

Коли використовувати RabbitMQ? Я б сказав, що це прекрасний вибір, коли ви знаєте, що вам потрібно використовувати асинхронне передавання повідомлень, але ви не готові вирішити високу складність деяких інших варіантів черги у цьому списку (див. Нижче).

ActiveMQ

Якщо ви знаходитесь у корпоративному просторі (або створюєте широко розповсюджений і широкомасштабний додаток), і вам не хочеться постійно винаходити колесо (і помилятися по дорозі), ActiveMQ варто подивитися.

Ось де ActiveMQ перевершує:

  • Він реалізований на Java і тому має дійсно чітку Java інтеграцію (відповідає стандарту JMS).
  • Підтримуються декілька протоколів: AMQP, MQTT, STOMP, OpenWire тощо.
  • Зберігає безпеку, маршрутизацію, термін дії повідомлення, аналітику тощо.
  • Підтримка популярних моделей розподілених повідомлень, економлячи час та дорогі помилки.

Це не означає, що ActiveMQ доступний лише для Java. У нього є клієнти для Python, C / C ++, Node, .Net та інших екосистем, тому в майбутньому не повинно виникати побоювань щодо можливого колапсу. Крім того, ActiveMQ побудований на повністю відкритих стандартах, і створити власних легких клієнтів має бути просто.

Враховуючи все, що було сказано і зроблено, майте на увазі, що ActiveMQ – це лише брокер і не включає в себе резервний сервіс. Для зберігання повідомлень вам все-таки потрібно використовувати один із підтримуваних програм. Я включив його сюди, оскільки він не пов’язаний з певною мовою програмування (як інші популярні рішення, такі як Celery, Sidekiq тощо)

Amazon MQ

Amazon MQ заслуговує на швидку, але важливу згадку тут. Якщо ви вважаєте, що ActiveMQ – ідеальне рішення для ваших потреб, але ви не хочете займатися будівництвом та обслуговувати інфраструктуру самостійно, Amazon MQ пропонує керовану послугу для цього. Він підтримує всі протоколи, які робить ActiveMQ – взагалі немає різниці в особливостях – оскільки він використовує ActiveMQ сам під поверхнею.

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

Amazon SQS

Ми не можемо очікувати, що Амазонка буде сидіти тихо, якщо мова йде про критичні місця інфраструктури, чи не так? ��

І так ми маємо Amazon SQS, що є повністю розміщеним, простим сервісом черг (досить буквально) відомим гігантом AWS. Ще раз важливі тонкі відмінності, тому врахуйте, що у SQS немає концепції передачі повідомлень. Як і Redis, це простий сервер прийому та розповсюдження завдань у чергах.

Отже, коли ви хочете використовувати Amazon SQS? Ось кілька причин:

  • Ви фанат AWS і більше нічого не торкаєтесь (чесно, там багато людей, і я думаю, що в цьому немає нічого поганого).
  • Вам потрібно розроблене рішення, щоб переконатися, що рівень відмов дорівнює нулю, і жодне із завдань не буде втрачено.
  • Ви не хочете створювати кластер і самі повинні контролювати його. Або ще гірше, потрібно створити інструменти моніторингу, коли ви могли використовувати цей час для продуктивного розвитку.
  • Ви вже маєте значні інвестиції в платформу AWS, і залишатися заблокованими має сенс для бізнесу.
  • Вам потрібна цілеспрямована, проста система черг без будь-якого пуху, пов’язаного з передачею повідомлень, протоколами та ін..

Загалом, Amazon SQS є надійним вибором для тих, хто хоче включити черги на роботу у свою систему і не турбуватися про встановлення / моніторинг речей самостійно..

Beanstalkd

Beanstalkd існує довгий час і є випробуваним на бої швидким та простим доповненням для черги на роботу. Є кілька характеристик Beanstalkd, які значно відрізняються від Redis:

  • Це суворо система черги на роботу та більше нічого. Ви підштовхуєте до нього роботу, яку пізніше отримують працівники. Тож якщо у вашій програмі є навіть крихітна потреба у передачі повідомлень, ви хочете уникати Beanstalkd.
  • Немає вдосконалених структур даних, таких як набори, черги з пріоритетом тощо.
  • Beanstalkd називається чергою First In, First Out (FIFO). Немає можливості упорядкувати завдання за пріоритетом.
  • Немає варіантів кластеризації.

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

Висновок

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

Я хотів би сказати вам, що черга проста і на 100% надійна, але це не так. Це безладно, а оскільки все на задньому плані і відбувається дуже швидко (помилки можуть залишитися непоміченими та стати дуже дорогими). Тим не менш, черги дуже потрібні поза точкою, і ви побачите, що вони є потужною зброєю (можливо, навіть найпотужнішою) у вашому арсеналі. Удачі! ��

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map