Каждый единственный экземпляр — точка отказа, а разделение по сети само по себе не даёт масштабируемости. Нужны резервирование, балансировка и устранение локального состояния users-api.
Вопросы масштабируемости и отказоустойчивости распределённого приложения
Каждый единственный экземпляр — точка отказа, а разделение по сети само по себе не даёт масштабируемости. Нужны резервирование, балансировка и устранение локального состояния users-api.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Состав системы:
- webApp — клиентская часть
- users-api — серверный сервис, обслуживающий пользователей
- DB — хранилище пользовательских данных Все элементы работают в единственном экземпляре. Несмотря на то, что приложение распределено, оно не готово к масштабированию. Опишите, какие недостатки могут возникнуть при таком дизайне, и предложите варианты улучшения (масштабирование, обеспечение отказоустойчивости, балансировка нагрузки и т.п.).
Ответ
Каждый единственный экземпляр — точка отказа, а разделение по сети само по себе не даёт масштабируемости. Нужны резервирование, балансировка и устранение локального состояния users-api.
Статику webApp можно отдавать через CDN или несколько серверов. Users-api масштабируют за балансировщиком, используя readiness, timeouts, ограничение конкуренции и общее хранение сессий. Для БД нужны резервные копии с проверкой восстановления и продуманное переключение на реплику; репликация не заменяет backup. Перед добавлением реплик API измеряют насыщение БД и общий пул соединений. Между узлами остаются сетевые отказы, поэтому retries должны быть ограниченными, а изменяющие операции — идемпотентными.