Как проверялась работоспособность в условиях глушилок
Что проверяют
Это вопрос об опыте: был ли у вас сервис, который работает при плохой связи, и проверяли ли вы это до продакшена, а не после жалоб. Под «глушилками» обычно имеют в виду пропадающий мобильный интернет и подавление или подмену GPS у устройств, которые шлют данные на ваш бэкенд. Следом спросят, что именно сломалось при проверке и как вы это чинили.
Как отвечать
Начните с контекста: какие клиенты (курьерские приложения, трекеры, датчики), что теряется при глушении, какие требования к доставке данных. Потом расскажите, как воспроизводили условия:
- деградация сети:
tcсnetemдля потерь, задержек и обрывов, Toxiproxy между сервисом и зависимостями, в Kubernetes Chaos Mesh; - поведение клиентов: данные за час приходят одной пачкой, повторная отправка даёт дубли, метки времени устаревшие;
- подмена координат: точки скачут на сотни километров, скорость физически невозможна.
И что проверяли в коде на Go:
- таймауты:
context.WithTimeoutна каждый внешний вызов и явныйTimeoutуhttp.Client, по умолчанию он бесконечный; - повторы: экспоненциальная задержка с джиттером, лимит попыток, circuit breaker, например
sony/gobreaker; - идемпотентность: уникальный идентификатор события, чтобы повтор не создавал дубль;
- порядок и фильтры: сортировка по времени события, а не прихода, отбрасывание точек с аномальной скоростью.
Цифры называйте свои: сколько событий терялось до доработки, сколько часов без связи выдерживает буфер на клиенте. Если такого опыта не было, скажите прямо и опишите, как проверили бы: какие сценарии в netem, какие метрики в Prometheus.
Где спотыкаются
Сводят всё к «ставили retry». Повторы без идемпотентности плодят дубли, а без джиттера после восстановления связи все клиенты разом бьют в сервер.
Проверяют только полный обрыв. Самые неприятные баги дают частичные потери и задержки в секунды, когда соединение формально живо.
Придумывают опыт. На уточнении про параметры netem или про то, как отличали подменённые координаты от настоящих, это вскрывается за минуту.