Словник для систем черги повідомлень: черги, теми і мертві листи

Основний словниковий запас англійської мови для систем черги повідомлень: виробники, споживачі, теми, розділи, DLQ, зворотній тиск, а також правильний спосіб використання кожного з цих термінів у контексті.

Черги повідомлень надають змогу службам спілкуватися одна з одною асинхронно — одна служба відкидає повідомлення, інша служба підбирає його пізніше. Kafka, RabbitMQ, SQS і їхні родичі мають спільний щільний словник: виробники, споживачі, теми, розділи, черги мертвих літер. Багато з цих слів є метафорами, які заплутують нерідних носіїв. У цьому довіднику пояснюється контекст основних термінів, щоб ви могли вільно читати документацію і обговорювати черги.


Фундаментальні ролі

TermMeaningIn a sentence
ProducerSends messages into the queue”The API is the producer.”
ConsumerReads messages out”The worker is the consumer.”
BrokerThe server that holds messages”Kafka brokers store the data.”
MessageA single unit of data”Each message is a JSON event.”

Основні дієслова: виробники опублікувати, надіслати, або встановити в чергу повідомлення; споживачі використовувати, читати, опитувати, або обробляти їх.

виробник публікує подію замовлення; споживач опитує чергу і обробляє кожне повідомлення.”


Черга проти теми

Це розмежування дратує багатьох людей.

  • ** Queue ** — точка-до-точки; кожне повідомлення йде до * одного * споживача (наприклад, Крістіан Крістіансен (дан
  • ** Topic ** — опублікувати/підписатися; кожне повідомлення надходить до * всіх * підписників (наприклад, 2000) та «Публікація» (укр

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

Дві моделі є point-to-point проти publish/subscribe (pub/sub) — основний архітектурний словник.


Упорядкування і розділення

TermMeaning
PartitionA subdivision of a topic for parallelism
OffsetA message’s position in a partition
OrderingWhether messages arrive in sequence
Partition keyDecides which partition a message goes to
Consumer groupA set of consumers sharing the work

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

Тут з’ являється дієслово ** commit **: користувач ** commits its offset **, щоб записати, наскільки далеко він прочитав.

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


Гарантії доставки

Ці три фрази дуже важливі і точні:

GuaranteeMeaning
At-most-onceMay lose messages, never duplicates
At-least-onceNever loses, may duplicate
Exactly-onceNo loss, no duplicates (hard to achieve)

«Ми використовуємо принаймні-один раз доставку, тому споживачі повинні бути ідемотентними — обробка одного і того ж повідомлення двічі повинна бути безпечною»

Идемотент (безопасно повторять) - слово, що робить принаймні одну пологову переживання. Запомни.


Черга мертвих листів (DLQ)

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

TermMeaning
DLQ (dead-letter queue)Where failed messages go
Poison messageA message that always fails
RedriveRe-sending DLQ messages to retry
Retry / redeliveryAttempting again
Max retriesThe limit before dead-lettering

“Після трьох невдалих спроб, повідомлення ** мертвих літер **. Ми перевіряємо DLQ, виправляємо помилку, а потім перенаправляємо повідомлення назад до головної черги»

** Отруйне повідомлення ** (те, що завжди зазнає невдачі і блокує обробку) є яскравим, звичайним словником.

«Одне отруйне повідомлення було блокуванням всього розділу — кожна повторна спроба зазнала невдачі, тому нічого за ним не могло просунутися»


Словник керування потоком

TermMeaning
BacklogA buildup of unprocessed messages
LagHow far behind the consumer is
BackpressureSlowing producers when consumers can’t keep up
ThroughputMessages processed per second
DrainProcess the backlog down to empty

«Споживач lag зростає — backlog досягає 50 тис. Споживачі не можуть йти в ногу з часом, тому нам потрібно або збільшити їх, або застосувати зворотній тиск на виробника»

Дієслова: затримка зростає або накопичується; ви витягуєте її; відстань зростає або наздоганяє.

«Ми зменшили кількість споживачів і backlog drained за двадцять хвилин — затримка знову до нуля»


Фрази для обговорень у черзі

  • «Повідомлення ** накопичуються ** в черзі.»
  • «Споживач ** впав позаду ** під час піку.»
  • «Давайте спустимо DLQ і з’ясуємо, чому це не вдалося»
  • «Ми кидаємо повідомлення — черга переповнена.»
  • «Додати більше споживачів, щоб наздоганяти за відставанням

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


Поширені помилки

  1. ** Плутанина між чергою і темою. ** Черга = один користувач на повідомлення; тема = всі підписники отримують повідомлення. Неправильний вибір означає дублювання або пропуск обробки.
  2. ** Нечітко говорить « черга повільна ». ** Будь точним: « споживач ** затримка ** є високою » або « ** пропускна здатність ** впала. »
  3. Забывая “импотентность”. При однократной доставке потребители должны быть импотентными. Это не факультативный словарь.
  4. ** Сполучення « опублікувати » і « створити ». ** Обидва слова в порядку, але « творець ** опублікував ** » є найчистішим поєднанням.
  5. Неправильно произношу “queue.” Это просто /kjuː/ — “kyoo.” “ueue” не произносится.

Швидкий довідковий словник

  • ** Fan- out ** — одне повідомлення, яке буде доставлено багатьом користувачам
  • ** Fan- in ** — багато продюсерів у одній черзі
  • ** Підтвердити (ack) / нак** — підтвердити / відхилити повідомлення
  • ** Тайм- аут видимості ** — час, протягом якого повідомлення буде приховано під час обробки
  • ** Повторити ** — повторна обробка минулих повідомлень з відступу
  • ** Гарантія замовлення ** — обіцянка щодо послідовності повідомлень
  • ** Тривалий** — повідомлення переживають перезапуск брокера

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


Міні-діалог

А: “Чому служба замовлень відстає?”

  • Нет, не надо B: “На розділі 3 є отруйне повідомлення — він постійно відмовляється від роботи і блокує все за ним.”
  • Нет, не надо “Можно ли это мертвой буквой написать?”
  • Нет, не надо B: “Так — зменшити максимальний набір спроб, щоб він швидше потрапив у DLQ. Тоді backlog повинен спуститися і lag буде наздоганяти»

Ключевые вещи

  • Знаєте ролі: виробники публікують, споживачі опитують/процесують, брокери зберігають.
  • Розрізняти чека (від точки до точки) від теми (pub/sub).
  • При принаймні-одному доставленні, споживачі повинні бути імпотентними.
  • Повідомлення про невдачі надсилаються до DLQ; otrovnoe_ poyavlenie може заблокувати розділ.
  • Дивитися затримку і затримку; розширити споживачів, щоб витягнути і наздоганяти.

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

Назва походить від англійського «uncommon» — незвичайний, незвичайний

Будьмо чесними — навіть досвідчені розробники можуть спіткнутися, коли обговорюють черги повідомлень. Термінологія є точною, але * спосіб *, у який ви виражаєте себе, має таке ж велике значення, особливо для тих, хто вільно володіє професійною англійською. Часто нерозуміння виникають не з-за відсутності знань про самі поняття, а з-за тонких відмінностей у фразуваннях і як ці терміни використовуються в різних контекстах розвитку.

Частою проблемою, яку я бачу, є використання «чека» взаємозамінно з «темою», особливо при обговоренні архітектурного дизайну. Хоча це технічно правильно, це створює неоднозначність. * черга * зазвичай представляє певний екземпляр або збірку повідомлень, які обробляються одним споживачем. * Тема *, з іншого боку, є більш абстрактною - це логічний канал, через який повідомлення маршрутизуються. Подумайте про це так: у вас може бути декілька черг, всі з яких підписано на одну і ту ж тему. Розробник може сказати: « Нам потрібно збільшити пропускну здатність цієї черги », коли насправді він має на увазі: « Нам потрібно оптимізувати обробку споживача, який отримує повідомлення з цієї теми ». Цей тонкий зсув у значенні може призвести до плутанини і неправильно спрямованих зусиль з усунення неполадок. Аналогічно, використання «мертвої літери» як загального терміну для проблемних повідомлень є поширеним, але точніше називати їх «мертвими літерами» або «неуспішними повідомленнями» в контексті черги мертвих листів (DLQ).

Інша область, де нюанс має значення, це розмови Slack. Уявіть такий сценарій: старший інженер відповідає на PR- опис молодшого розробника словами: « Обсяг повідомлень на цю тему зростає — це спричиняє зворотний тиск ». Хоча це технічно вірно, молодший розробник може не відразу зрозуміти, * чому * відбувається зворотний тиск. Пояснення того, що «зворотній тиск» вказує на те, що споживач не в змозі стежити за швидкістю, з якою повідомлення публікуються на тему, і тому система дросує свій вихід, щоб запобігти перевантаженню нижніх служб, буде більш ефективною і корисною відповіддю. Він виходить за рамки простого затвердження спостереження, щоб запропонувати контекст і потенційні шляхи для дослідження.

Нарешті, під час перегляду коду ви можете почути, як хтось каже: « Повідомлення не доставляється до черги ». Це потребує пояснення. Не вдається виробляти? Не вистачає консумувати? Чи є проблема з самим механізмом маршрутизації (тема)? Запитання прояснюючих питань, таких як «Чи можете ви описати потік повідомлень від виробника до споживача через цю тему?», Може швидко розв’язати неоднозначність і забезпечити, щоб кожен розумів проблему.

# Example:  Using `kubectl` to inspect a RabbitMQ queue
kubectl get queues my-queue -n my-namespace

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

Поширені запитання

Про що ця стаття "Словник для систем черги повідомлень: черги, теми і мертві листи"?

Основний словниковий запас англійської мови для систем черги повідомлень: виробники, споживачі, теми, розділи, DLQ, зворотній тиск, а також правильний спосіб використання кожного з цих термінів у контексті.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Словник для систем черги повідомлень: черги, теми і мертві листи"?

Приблизно 9 min.