4863. Распределённая система должна гарантировать, что все узлы видят одни и те же данные в любой момент времени и оставаться доступной даже при сбоях. При сетевом разделении система перестаёт принимать запись. Какую теорему иллюстрирует этот пример?
Anonymous Quiz
13%
Теорема Геделя о неполноте
63%
CAP-теорема Брюера
10%
Закон Амдала о распараллеливании
15%
Теорема Коуза о трансакционных издержках
В 2000 году профессор Эрик Брюер сформулировал, что в распределённой системе (данные хранятся на нескольких узлах) невозможно одновременно гарантировать все три свойства:
Consistency (C) – строгая согласованность: после успешной записи все последующие чтения видят эту запись (нет устаревших данных).
Availability (A) – доступность: каждый запрос получает ответ (даже если часть узлов недоступна).
Partition tolerance (P) – устойчивость к сетевым разделениям: система продолжает работать, когда связь между узлами нарушена.
При сетевом разделении (например, кабель между дата-центрами оборван) система вынуждена выбирать между C и A.
Если выбираем CP (согласованность + устойчивость к разделениям), то при разделении блокируем запись, чтобы не нарушить согласованность. Доступность падает: некоторые запросы не получают ответа.
Если выбираем AP (доступность + устойчивость к разделениям), то разрешаем запись в каждый раздел независимо, но потом данные могут расходиться (согласованность нарушена).
Почему пример иллюстрирует CAP?
В задаче сказано: система должна быть строго согласованной и доступной. При сетевом разделении она перестаёт принимать запись. Это значит, что система жертвует доступностью для сохранения согласованности. То есть система выбрала CP. CAP-теорема объясняет, почему невозможно иметь и то, и другое одновременно.
Разбор других вариантов:
A (теорема Геделя) – о неполноте формальных систем, к распределённым БД не относится.
C (закон Амдала) – о максимальном ускорении при распараллеливании, не про согласованность.
D (теорема Коуза) – экономическая, о трансакционных издержках.
Реальный пример из практики:
Банковская система (CP) – при разделении между офисами временно запрещает списания, чтобы не возникло отрицательного баланса. Доступность снижена, но деньги в безопасности.
Социальная сеть (AP) – при разделении дата-центров вы всё равно можете поставить лайк (доступность), но счётчик лайков может временно расходиться (eventual consistency).
Что должен зафиксировать аналитик:
В требованиях к распределённой системе явно указать, что важнее: строгая согласованность или доступность.
Например: «В системе управления запасами товара допустима задержка репликации не более 5 секунд, но запись товара должна быть всегда доступна (AP)» или «Платёжная система должна быть строго согласованной (CP)».
Вывод: CAP-теорема – фундаментальное ограничение, которое аналитик обязан понимать при проектировании распределённых систем. Нельзя попросить «идеальную систему», нужно выбирать компромисс.
Please open Telegram to view this post
VIEW IN TELEGRAM
4864. В очереди RabbitMQ сообщения поступают быстрее, чем потребитель успевает их обрабатывать. Со временем очередь растёт, задержка обработки увеличивается. Как называется эта проблема и как её решить?
Anonymous Quiz
8%
Retry storm – увеличить количество реплик
80%
Consumer lag – добавить параллельных потребителей или увеличить их количество
5%
Deadlock – переключиться на синхронные вызовы
7%
Split brain – использовать экспоненциальный бэккофф
Это разница между смещением последнего сообщения в очереди и смещением, которое уже обработал потребитель. Если сообщения приходят быстрее, чем обрабатываются, очередь растёт, и задержка доставки (латентность) увеличивается. Например, очередь растёт на 100 сообщений в секунду, через час в ней будет 360 000 необработанных сообщений, а новое сообщение будет ждать обработки часы.
Причины consumer lag:
Медленная бизнес-логика (тяжёлые запросы в БД, вызовы внешних API).
Недостаточное количество потребителей (один consumer на много партиций).
Сетевые задержки или блокировки.
Как решить:
Увеличить количество параллельных потребителей (в RabbitMQ – добавить экземпляры приложения, слушающие ту же очередь; в Kafka – увеличить число consumer’ов в группе, но не больше числа партиций).
Оптимизировать обработку – асинхронные вызовы, пакетная обработка (batch), распараллеливание внутри потребителя.
Использовать flow control – если потребитель не успевает, можно временно приостановить чтение.
Почему не другие варианты:
A (retry storm) – это проблема синхронных ретраев, а не медленного потребителя.
C (deadlock) – взаимоблокировка, не связано с очередью.
D (split brain) – проблема распределённых систем, когда два узла думают, что они лидеры.
Реальный кейс:
В системе логистики потребитель Kafka обрабатывал каждое сообщение (заказ) синхронно, вызывая внешний API доставки (среднее время 200 мс). При пике 5000 сообщений/сек очередь начала расти на 2000 сообщений/сек. Увеличили количество партиций с 1 до 10 и запустили 10 потребителей. Потребление выросло в 10 раз, и отставание прекратилось.
Что должен зафиксировать аналитик:
В требованиях к интеграции указать допустимый consumer lag (например, не более 10 000 сообщений).
Предусмотреть автоматическое масштабирование потребителей (Kubernetes HPA по длине очереди).
Мониторинг: алерт, если lag превышает порог.
Вывод: Consumer lag – главная метрика здоровья систем на основе очередей. Аналитик должен закладывать требования к пропускной способности и мониторингу отставания.
Please open Telegram to view this post
VIEW IN TELEGRAM
4865. Заказчик утвердил пороги скоринга (отказ < 50, проверка 50–70). Через месяц бизнес просит изменить пороги на 40 и 65. Изменение требует перевыпуска релиза. Что упустил аналитик?
Anonymous Quiz
10%
Не провёл нагрузочное тестирование правил
73%
Не предусмотрел внешнюю конфигурацию порогов
4%
Не согласовал правила с юристами
14%
Не зафиксировал логику в формальной спецификации
Бизнес-правила, особенно в скоринге или ценообразовании, со временем меняются. Если пороги (50 и 70 баллов) жёстко зашить в код, каждое изменение правила потребует нового релиза, тестирования и развертывания. Это медленно, дорого и рискованно.
Что должен был сделать аналитик:
Выделить варьируемые параметры – в данном случае пороги и, возможно, саму шкалу.
Требовать, чтобы эти параметры хранились во внешней конфигурации (файл, база данных, административная панель) и могли изменяться без перекомпиляции и передеплоя.
Зафиксировать в требованиях механизм динамической настройки – например, «система должна считывать пороги скоринга из таблицы БД при старте и периодически перечитывать их без остановки».
Почему не подходят другие варианты:
A (нагрузочное тестирование) – не связано с изменчивостью правил.
C (согласование с юристами) – полезно, но не решает проблему частых изменений.
D (формальная спецификация) – нужна, но без гибкости всё равно потребуется перекомпиляция.
Реальный кейс:
В одном банке кредитные пороги менялись раз в месяц. Они были закодированы в Java-классах. Каждый раз команда делала релиз (2 дня). После перехода на конфигурационный файл с автоматической перезагрузкой изменения стали занимать 10 минут.
Что должен зафиксировать аналитик (расширенное требование):
«Пороговые значения для принятия решения по скорингу должны быть вынесены во внешний конфигурационный файл или базу данных. Система должна перечитывать их без перезапуска при изменении. Интервал перечитывания – не более 5 минут. Изменение порогов не должно требовать остановки работы системы».
Дополнительные аспекты:
Аудит изменений – кто, когда и почему изменил порог.
Валидация новых порогов (например, нижний порог не может быть выше верхнего).
Возможность A/B-тестирования разных порогов в разных сегментах клиентов.
Вывод: Аналитик обязан выявлять параметры бизнес-правил, которые могут меняться со временем, и закладывать их во внешнюю конфигурацию. Это ускоряет внесение изменений и снижает стоимость доработок.
Please open Telegram to view this post
VIEW IN TELEGRAM
4866. При вызове внешнего API мобильное приложение отправляет запрос и продолжает работу, а ответ приходит позже через callback. Как на диаграмме последовательности обозначить такой асинхронный вызов?
Anonymous Quiz
8%
Сплошная стрелка с заполненным треугольником
63%
Открытая стрелка (незаполненный треугольник)
23%
Пунктирная стрелка с ромбом
7%
Двойная сплошная стрелка
Синхронное сообщение – сплошная стрелка с заполненным треугольником (отправитель ждёт ответа).
Асинхронное сообщение – открытая стрелка (незаполненный треугольник). Отправитель не блокируется.
Ответ (callback) изображается отдельным асинхронным сообщением в обратном направлении (или сплошной стрелкой, если это возврат управления).
Реальный пример: Приложение отправляет запрос на оплату в платёжный шлюз и продолжает показывать анимацию. Через некоторое время шлюз присылает результат на webhook – это отдельное асинхронное сообщение.
Ошибка: Если нарисовать синхронную стрелку, подразумевается блокировка, что не соответствует реальности.
Вывод: Аналитик, моделируя интеграции, должен различать синхронные и асинхронные вызовы на диаграммах последовательности.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь зарабатывать в Telegram, но канал стоит на месте?
❌ системы.
❌ понимания.
❌ результата.
Мне постоянно пишут:
✅ «Почему не идут подписчики?»
✅ «Почему нет продаж?»
✅ «Что я делаю не так?»
Ответ почти всегда один — у тебя нет базы.
Не хватает понимания маркетинга, продвижения и логики заработка в Telegram.
И именно поэтому я собрала папку, где уже есть всё необходимое:
— как расти в Telegram
— где брать трафик
— как превращать подписчиков в деньги
— как выстроить систему, а не надеяться на «повезёт»
Ссылка: https://t.me/addlist/sieqVFdCuh5iZWIy
Записывайся в подборку🫶
Скорее всего, ты просто делаешь всё «наугад».
Мне постоянно пишут:
Ответ почти всегда один — у тебя нет базы.
Не хватает понимания маркетинга, продвижения и логики заработка в Telegram.
И именно поэтому я собрала папку, где уже есть всё необходимое:
— как расти в Telegram
— где брать трафик
— как превращать подписчиков в деньги
— как выстроить систему, а не надеяться на «повезёт»
Ссылка: https://t.me/addlist/sieqVFdCuh5iZWIy
Записывайся в подборку
Please open Telegram to view this post
VIEW IN TELEGRAM
4867. В таблице orders есть колонка order_number с последовательными числами, но некоторые номера пропущены (например, из-за отката транзакций). Как найти все пропущенные номера без циклов?
Anonymous Quiz
42%
Использовать оконную функцию LAG() и найти разрывы
31%
Сделать LEFT JOIN с таблицей всех возможных чисел
17%
Применить GROUP BY и HAVING COUNT(*) = 0
10%
Использовать NOT EXISTS с подзапросом на соседние номера
order_number - LAG(order_number) > 1Пример запроса:
sql
WITH gaps AS (
SELECT
LAG(order_number) OVER (ORDER BY order_number) AS prev_num,
order_number AS curr_num
FROM orders
)
SELECT (prev_num + 1) AS missing_start, (curr_num - 1) AS missing_end
FROM gaps
WHERE curr_num - prev_num > 1;
Почему другие варианты хуже:
B (LEFT JOIN с таблицей всех чисел) – требует генерации последовательности, что при больших диапазонах неэффективно.
C (GROUP BY) – не может найти пропуски без генерации всех значений.
D (NOT EXISTS) – потребует для каждого номера подзапрос, что медленно.
Реальный кейс: В интернет-магазине из-за ошибок в интеграции номера заказов иногда пропускались. Аналитик написал запрос с
LAG()Вывод:
LAG()Please open Telegram to view this post
VIEW IN TELEGRAM
4868. Пользователь авторизовался на сайте и начал заполнять корзину. На следующем шаге его запрос попал на другой сервер, и корзина «обнулилась». Как называется механизм, обеспечивающий попадание всех запросов одного пользователя на один сервер?
Anonymous Quiz
65%
Сессионная аффинность (sticky sessions)
12%
Циклический алгоритм (round robin)
13%
Алгоритм наименьших соединений (least connections)
11%
Хеширование IP-адреса (IP hash)
Что такое sticky sessions (сессионная аффинность)?
Балансировщик «привязывает» пользователя к определённому серверу на время его сессии. Обычно это делается:
По IP-адресу (не очень надёжно, так как несколько пользователей могут быть за одним NAT).
По cookie, которую балансировщик устанавливает клиенту (более надёжно).
Все последующие запросы этого пользователя направляются на тот же сервер, где хранятся его сессионные данные.
Почему не подходят другие варианты:
B (round robin) – как раз вызывает проблему, так как запросы распределяются по очереди без учёта сессии.
C (least connections) – направляет запрос на сервер с наименьшим числом активных соединений, тоже не учитывает сессию.
D (IP hash) – один из способов реализации sticky sessions, но это не общее название механизма, а частная техника. Правильным ответом является именно термин «sticky sessions» (сессионная аффинность).
Реальный пример:
В интернет-магазине на платформе Magento с несколькими бэкенд-серверами не настроили sticky sessions. Пользователи жаловались, что корзина очищается при переходе на страницу оформления заказа. После включения sticky sessions на балансировщике (HAProxy) проблема исчезла.
Что должен зафиксировать аналитик:
В требованиях к отказоустойчивости и масштабированию указать необходимость поддержки сессионной аффинности.
Уточнить, где хранить сессии (в памяти сервера, в Redis, в БД).
Если используется Redis для централизованного хранения сессий, sticky sessions не нужны, но требуется надёжный Redis-кластер.
Вывод: Sticky sessions — простой способ решить проблему «потери» сессии при масштабировании, но он создаёт свою проблему: при отказе сервера пользователь теряет сессию. Более современный подход — централизованное хранилище сессий (Redis) и отказ от липких сессий. Аналитик должен понимать оба варианта и выбирать под требования.
Please open Telegram to view this post
VIEW IN TELEGRAM
4869. В приложении онлайн-кинотеатра при падении сервиса рекомендаций пользователь не может смотреть фильм, так как запрос на получение рекомендаций блокирует загрузку плеера. Какой принцип архитектуры был нарушен?
Anonymous Quiz
3%
Горизонтальное масштабирование
81%
Отказоустойчивость с сохранением основной функции
3%
Событийная архитектура
13%
Изоляция данных