# Какая технология/концепция лучше всего подходят работы агрессивными (резкими) пиками нагрузки и почему?
Примеры систем, где такие резкие высокие пики нагрузки потенциально возможны: системы массовой рассылки уведомлений (pub/sub для паблик клиентов, а не внутренних сервисов).
В случае stateless сервисов всего подходят для этого ***Бессерверные Вычисления*** (***Serverless Computing***).
Но в случае stateful сервисов можно прибегнуть к брокерам сообщений + нададить автомасштабирование обработчиков сообщений.
# Какие есть основные стратегии работы с ошибками в обработчиках (консьюмерах) сообщений очередей?
1. Повторные попытки (Retry): Автоматически повторять попытку обработки сообщения при возникновении временной ошибки.
2. Dead Letter Queue (DLQ): Перенаправление сообщений, которые не могут быть обработаны, в специальную очередь (DLQ) для последующего анализа и обработки.
Важно, чтобы было озвучено (или можно уточнить понимание), что есть Recoverable ошибки (сбои внешних систем, необходимых для обработки, сетевая нестабильность, просадка по ресурсам) и Non-recoverable ошибки (некорретный формата данных, ошибки в бизнес-логике обработчика, например, когда сообщение содержит запрос на выполнение невозможной операции). И что Recoverable ошибки лучше обрабатывать по 1-ой стратегии, а Non-recoverable - по 2-ой.
# Какие нюансы подбора нужных значениях таймаутов при взаимодействии сервисов?
Здесь главное, чтобы было сказано как можно больше чего-то кроме "да можно примерно на глаз ебануть" или "тут лучше переборщить".
Основные моменты, которые было бы круто, если будут освещены:
* backoff стратегия для увличения таймаутов (в идеале даже упомянуть проблему "thundering herd" ("грохочущее стадо");
* чем менее жесткие таймауты, тем выше отказоустойчивость межсервисного взаимодействия (меньше сыплется ошибок);
* чем более жесткие таймауты, тем выше надежность (Reliability), так как DevOps'ы/SRE как можно быстрее увидят точки отказа;
Правильный выбор зависит от SLA и требований к надежности (Reliability).
# Чем healthcheck'и отличаются от heartbeat'ов и когда чего использовать?
Основное отличие - это направление: healthcheck'и система мониторинга или один сервис должен сам запрашивать у другого, а heartbeat'ы - это то, что тот другой сервис сам присылает системе мониторинга или текущему сервису.
В большинстве случаев healthcheck'ов всем хватает, однако, если:
* нет возможности напрямую опрашивать сервис (он за NAT'ом, например);
* нужно реагирование на изменение состояния с минимальной задержкой;
то можно задуматься о heartbeat'ах.
# Какие паттерны обеспечения надежности (Reliability) межсервисного взаимодействия знаешь?
Retry Pattern, Circuit Breaker, Bulkhead, Timeout, Failover, Fallback, Rate Limiting, Cache, Queue, Batching и др