Осознайте, что будет происходить в таких сценариях, сколько нагрузки на кого будет создано, и поговорите с ними, чтобы они об этом знали и подготовились.
19. Прогнозируйте неответы реалтаймовых источников
Итак, мы подготовились к нашей рассылке, помогли подготовиться коллегам, чьи сервисы будем использовать в процессе обработки запросов. Выпускаем кракена!
Вы завариваете себе ромашковый чай и начинаете удовлетворённо наблюдать за скоростью рассылки, за графиком растущего на ваш сервис трафика, несущего вам богатство… всё отлично!
Система-то сложная – бэкенд ходит реалтайм в другие бэкенды (назовём их источники). В этот момент становится очень важно уметь различать ситуацию разового неответа источника на запрос от ситуации его полной поломки.
В случае разового неответа повтор запроса (перезапрос) в источник даст нужный результат.
А в случае полной поломки перезапрос может сделать ещё хуже. Например, если у него есть очередь, в которую ваш перезапрос будет заботливо сложен в ожидании обработки. Источник лежит – очередь растёт…
Истинные джентльмены собирают статистику неответов и на основании неё считают вероятность успеха запроса: насколько хорошо отвечает источник в принципе за последний интервал времени. Назовём это "вероятность ответа". На основе этих данных вы можете предположить вероятность его ответа на текущий запрос. Если она мала, то, возможно, не стоит и пытаться.
В этом смысле можно варьировать схемы, но суть не меняется – копите и анализируйте данные.
20. Правильно экспериментируйте с сетью
Современные приложения используют такую базовую сущность, как сеть передачи данных. Если вы, конечно, не делаете какое-то особое приложение, у которого требуется обеспечить сетевую изоляцию – в этом случае вам понадобятся другие советы.
Каналы передачи данных имеют сразу несколько свойств, влияющих на работу вашей системы. Например, скорость передачи данных. В конце концов, она может работать, а может не работать. Частота отказов является таким же свойством вашей сетевой инфраструктуры.
Если вы уже начали проводить испытания стабильности вашей системы, то скорее всего у вас уже есть нагрузочное тестирование, тестирование отключения каких-то компонентов. Следующий важный шаг – это изучение влияние работоспособности сети на работу вашей системы.
Интересно, что разные ухудшения в сетевой инфраструктуре способны вызывать разные эффекты в вашей сложной системе. Например, при внезапном исчезновении сети во время обработки запроса один компонент может послать другому компоненту повторную попытку (перезапрос). Но в ситуации, когда один компонент начал получать данные на свой запрос, а сеть в это время отключилась,