В дополненни к прошлому посту ⬆️
AP СИСТЕМЫAP-системы, которые обеспечивают доступность (Availability) и устойчивость к разделениям (Partition Tolerance) в ущерб строгой согласованности (Consistency), необходимы в ситуациях, где важно, чтобы система
всегда оставалась доступной, даже в условиях разделений сети или отказов отдельных узлов.
Вот несколько примеров самых популярных AP-систем:
1️⃣
Социальные сетиFacebook, Twitter и Instagram часто используют AP-системы для хранения и доставки контента, такого как посты и комментарии, которые могут быть временно несогласованными (eventually consistency), но всегда доступны.
2️⃣
Мессенджеры
WhatsApp, Telegram, Slack, VK, ... должны гарантировать, что сообщения доставляются пользователям, даже если некоторые серверы временно недоступны:
- Availability: Пользователи должны иметь возможность отправлять и получать сообщения в любое время.
- Partition Tolerance: Сообщения могут доставляться с некоторыми задержками или повторениями, но система продолжает работать даже при разделении сети.
Опять же в большинстве случаев применяется eventually consistency (сообщения в чатах в итоге на разных узлах серверов будут согласованы со временем)
3️⃣
Файловые системы и системы хранения данных
Пример: S3 - должен быть всегда доступными для чтения и записи данных, даже если часть серверов недоступна.
4️⃣
Системы доставки контента (CDN)
CDN — это распределенная сеть серверов, которая предоставляет контент пользователям с ближайших к ним серверов. Примеры CDNs включают Akamai, Cloudflare, ...
- Availability: CDN всегда старается предоставить пользователю контент. Если один из серверов недоступен, запросы будут перенаправлены на ближайший доступный сервер.
- Partition Tolerance: CDN продолжает работать даже при разделении сети. Пользователи будут обслуживаться ближайшими доступными серверами, даже если некоторые части сети становятся недоступными.
CDN может кэшировать
устаревшую версию контента для обеспечения доступности. Обновления контента могут быть
задержаны или
не синхронизированы мгновенно между всеми серверами (опять eventually consistency)
5️⃣
DNS (Domain Name System)
- Availability: DNS должен всегда отвечать на запросы, чтобы пользователи могли находить нужные веб-сайты. Если один DNS-сервер недоступен, запросы будут отправлены на другой сервер.
- Partition Tolerance: DNS продолжает функционировать даже при разделении сети. Различные DNS-серверы могут продолжать работать независимо друг от друга.
В некоторых случаях обновления DNS-записей могут
не сразу распространяться по всем серверам, что приводит к возможным
несогласованностям в краткосрочной перспективе.
6️⃣
Базы данных Scylla, CassandraЛучше всего описано в первоисточниках
тут и
тут.
📏📏📏📏📏📏📏📏📏
Как достигается "достаточная согласованность"? Все зависит от системы, необходимого уровня консистентности данных (будем рассматривать позже) и применяемых алгоритмов консенсуса (2PC, Gossip, Paxos, ...). Чаще всего eventually consistency достигается дополнительными фоновым процессами приводящие данные на разных узлах в согласованное состояние.