Java/Backend. Интервью. Сценарный вопрос про распределенный лок:
У тебя есть критичный сервис, допустим обработка заказов, который крутится на нескольких инстансах в Kubernetes. Чтобы избежать гонки, когда два инстанса одновременно берут один и тот же заказ, ты ставишь распределенный лок через Redis setnx с TTL 10 секунд.
Какой критичный кейс все равно возможен, если один из инстансов словит Full GC паузу длиной 15 секунд сразу после получения лока? Опиши ситуацию split-brain и к чему она приведет по данным.
Как это разруливать на интервью:
→ сначала важно отметить, что простой Redis-лок с TTL помогает, если сервис просто упал, но создает новую, куда более опасную проблему
→ баг в том, что длинная пауза, например Full GC, может быть дольше, чем TTL лока
→ и вот что ломается (Split-Brain):
Service A берет лок,
и тут же уходит в GC на 15 секунд
Через 10 секунд Redis удаляет лок по TTL
Service B спокойно берет тот же лок,
и начинает обрабатывать заказ
Через 15 секунд Service A просыпается
все еще уверенный, что лок у него
и тоже обрабатывает этот же заказ
→ итог: два сервиса одновременно трогают один и тот же заказ. Данные ломаются. Например клиенту списывают деньги дважды.
→ реальное решение (меняем дизайн): вообще избавиться от лока
Кладем заказы в очередь сообщений,
например Kafka или RabbitMQ
Consumer group с несколькими инстансами читает этот топик
Брокер гарантирует, что каждое сообщение (заказ) уходит только одному инстансу из группы
👉 Java Portal
У тебя есть критичный сервис, допустим обработка заказов, который крутится на нескольких инстансах в Kubernetes. Чтобы избежать гонки, когда два инстанса одновременно берут один и тот же заказ, ты ставишь распределенный лок через Redis setnx с TTL 10 секунд.
Какой критичный кейс все равно возможен, если один из инстансов словит Full GC паузу длиной 15 секунд сразу после получения лока? Опиши ситуацию split-brain и к чему она приведет по данным.
Как это разруливать на интервью:
→ сначала важно отметить, что простой Redis-лок с TTL помогает, если сервис просто упал, но создает новую, куда более опасную проблему
→ баг в том, что длинная пауза, например Full GC, может быть дольше, чем TTL лока
→ и вот что ломается (Split-Brain):
Service A берет лок,
и тут же уходит в GC на 15 секунд
Через 10 секунд Redis удаляет лок по TTL
Service B спокойно берет тот же лок,
и начинает обрабатывать заказ
Через 15 секунд Service A просыпается
все еще уверенный, что лок у него
и тоже обрабатывает этот же заказ
→ итог: два сервиса одновременно трогают один и тот же заказ. Данные ломаются. Например клиенту списывают деньги дважды.
→ реальное решение (меняем дизайн): вообще избавиться от лока
Кладем заказы в очередь сообщений,
например Kafka или RabbitMQ
Consumer group с несколькими инстансами читает этот топик
Брокер гарантирует, что каждое сообщение (заказ) уходит только одному инстансу из группы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1
Telegram опубликовал список 8 самых быстрорастущих каналов для программистов:
Only Python — Подборки приёмов и фич, о которых не рассказывают в курсах.
Only Tech — Главные тренды и инсайды из мира технологий, маркетинга и интернет-культуры.
Only Hack — Реальные кейсы кибератак, инструменты и методы защиты, которые используют хакеры.
Only GitHub — Репозитории, которые решают реальные задачи.
Скрипты, фреймворки и готовые решения
Only IT — Без мнений и слухов — только факты и важные IT-события.
Only Apple — Новые апдейты, утечки и фишки, которые Apple ещё не показала.
Only GPT — Промпты, хаки и свежие инструменты, о которых молчат даже AI-каналы.
Only Memes — Если ты когда-нибудь деплоил в пятницу вечером — ты поймешь
Подписывайтесь и прокачивайте свои скиллы.
Only Python — Подборки приёмов и фич, о которых не рассказывают в курсах.
Only Tech — Главные тренды и инсайды из мира технологий, маркетинга и интернет-культуры.
Only Hack — Реальные кейсы кибератак, инструменты и методы защиты, которые используют хакеры.
Only GitHub — Репозитории, которые решают реальные задачи.
Скрипты, фреймворки и готовые решения
Only IT — Без мнений и слухов — только факты и важные IT-события.
Only Apple — Новые апдейты, утечки и фишки, которые Apple ещё не показала.
Only GPT — Промпты, хаки и свежие инструменты, о которых молчат даже AI-каналы.
Only Memes — Если ты когда-нибудь деплоил в пятницу вечером — ты поймешь
Подписывайтесь и прокачивайте свои скиллы.
🤣4😁1
Учебник по Java от Андрея Иванцова теперь доступен онлайн на GitBook. В нём собрано всё, что нужно новичку: от простых типов данных и строк до исключений и коллекций. Материал подан по делу, с примерами кода и понятными объяснениями.
Ссылка для тех, кто хочет прокачаться: andrey-ivantsov.gitbook.io/java
👉 Java Portal
Ссылка для тех, кто хочет прокачаться: andrey-ivantsov.gitbook.io/java
Please open Telegram to view this post
VIEW IN TELEGRAM
👀4