Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Михаил Мезенцев — Отказоустойчивость в высокона...

Ozon Tech
March 28, 2023

Михаил Мезенцев — Отказоустойчивость в высоконагруженных и масштабируемых системах

Ozon Tech

March 28, 2023
Tweet

More Decks by Ozon Tech

Other Decks in Technology

Transcript

  1. 1. Несколько раз отправили одно и тоже сообщение Как так

    вышло? 2. В сообщениях в Kafka не используется key • Баг • Ретраи
  2. 1. Несколько раз отправили одно и тоже сообщение Как так

    вышло? 2. В сообщениях в Kafka не используется key • Баг • Ретраи • Каждое следующее сообщение попадает в следующую партицию
  3. At most once At least once Exactly once Сообщение придет

    максимум один раз Сообщение придет как минимум один раз
  4. At most once At least once Exactly once Сообщение придет

    максимум один раз Сообщение придет как минимум один раз Сообщение придет только один раз
  5. At most once At least once Exactly once Сообщение придет

    максимум один раз Сообщение придет как минимум один раз Сообщение придет только один раз Потеря сообщений
  6. At most once At least once Exactly once Сообщение придет

    максимум один раз Сообщение придет как минимум один раз Сообщение придет только один раз Потеря сообщений Дубли
  7. At most once At least once Exactly once Сообщение придет

    максимум один раз Сообщение придет как минимум один раз Сообщение придет только один раз Потеря сообщений Дубли Возможно только в рамках одного источника данных
  8. At most once At least once Exactly once Сообщение придет

    максимум один раз Сообщение придет как минимум один раз Сообщение придет только один раз Потеря сообщений Дубли Возможно только в рамках одного источника данных
  9. At most once At least once Exactly once Сообщение придет

    максимум один раз Сообщение придет как минимум один раз Сообщение придет только один раз Потеря сообщений Дубли Возможно только в рамках одного источника данных
  10. At most once At least once Exactly once Сообщение придет

    максимум один раз Сообщение придет как минимум один раз Сообщение придет только один раз Потеря сообщений Дубли Возможно только в рамках одного источника данных
  11. At most once At least once Exactly once Сообщение придет

    максимум один раз Сообщение придет как минимум один раз Сообщение придет только один раз Потеря сообщений Дубли Возможно только в рамках одного источника данных
  12. 1. В теле сообщения есть поле «EventId» • Оно может

    быть любого типа (обычно Guid) 2. «EventId» должен быть одинаковый для повторяющихся сообщений EventId
  13. GRPC { "id":11, data: {…} } { "id":12, data: {…}

    } { "id":11, data: {…} } ? ? ?
  14. DLQ

  15. DLQ Kafka { "id":10, data: {…} } { "id":11, data:

    {…} } Topic 1 DLQ Topic Сервис
  16. DLQ Kafka { "id":10, data: {…} } { "id":11, data:

    {…} } Topic 1 DLQ Topic Сервис
  17. DLQ Kafka { "id":10, data: {…} } { "id":11, data:

    {…} } Topic 1 DLQ Topic Сервис
  18. • Плюсы • Сообщения либо вообще не пишутся в базу

    • Распределение нагрузки по инстансам • Минусы • Не гарантируется сохранение последовательности • Невозможно вручную запустить ретрай • Тяжело понять, что именно сейчас происходит с ретраями DLQ Kafka
  19. • Плюсы • Сообщения пишутся в базу только при ошибке

    • Возможность ручного ретрая • Легко делать выборку и анализ упавших сообщений • Минусы • Не гарантируется сохранение последовательности • Требуется самим распределять нагрузку по инстансам DLQ Db
  20. • Плюсы • Ретраи при ошибках • Сохранения последовательности обработки

    сообщений • Возможность реализовать более сложную логику выборки на выполнения • Минусы • На каждое сообщение запись в базе • Джоба должна успевать обрабатывать сообщения • Требуется самим распределять нагрузку по инстансам Inbox
  21. • Плюсы • Ретраи при ошибках • Если с базой

    все хорошо, то будет Exactly Once • Возможность реализовать более сложную логику выборки на выполнения • Гарантирует сохранение последовательности выполнения • Минусы • На каждое сообщение несколько записей в базе • Джоба должна успевать обрабатывать сообщения • Это все равно не Exactly Once • Требуется самим распределять нагрузку по инстансам Outbox