Ответ
Основные проблемы распределенных систем проистекают из их природы: множество независимых компонентов, общающихся по сети, которая ненадежна.
1. Частичные отказы (Partial Failures) Система может частично работать, а частично — нет. Сложно отличить медленный узел от отказавшего. Для этого используются таймауты, механизмы retry и circuit breakers.
2. Сетевая задержка и ненадежность Сообщения могут теряться, дублироваться, приходить не по порядку. Протоколы вроде TCP решают часть проблем, но на уровне приложения часто нужна идемпотентность операций.
3. Согласованность данных (Consistency) При репликации данных на несколько узлов возникает выбор между доступностью и согласованностью (CAP-теорема). Используются различные модели: строгая согласованность (CP-системы), eventual consistency (AP-системы), кворумы.
4. Согласованность часов (Clock Synchronization) Узлы имеют свои локальные часы, которые могут расходиться. Для упорядочивания событий в распределенной системе используются логические часы (Lamport timestamps) или гибридные часы.
5. Сложность отладки и мониторинга Трассировка запроса через десятки сервисов требует инструментов вроде OpenTelemetry и Jaeger/Zipkin.
Практический пример: При проектировании сервиса корзины покупок мы использовали eventual consistency. Добавление товара в корзину сразу подтверждалось клиенту (высокая доступность), а синхронизация между репликами базы данных происходила асинхронно в фоне.