Ответ
В CAP-теореме (Consistency, Availability, Partition Tolerance) свойство Availability (A, Доступность) означает, что каждый запрос к распределенной системе гарантированно получает ответ (успешный или с ошибкой), даже если часть узлов системы вышла из строя.
Ключевые аспекты:
- Не 100% uptime: Речь не о постоянной работе, а о том, что работающие узлы продолжают обслуживать запросы, несмотря на отказы других узлов или сетевые разделения (Partition).
- Компромисс с Consistency: В условиях сетевого раздела (P) система, выбравшая Availability (AP-система), жертвует строгой согласованностью (C). Клиенты могут получать устаревшие данные с разных узлов.
Пример AP-системы: Кластер баз данных с асинхронной репликацией (например, Cassandra, DynamoDB в определенных конфигурациях). Если реплика теряет связь с мастером, она продолжает отвечать на запросы чтения своими (возможно, устаревшими) данными.
Псевдокод, иллюстрирующий приоритет Availability:
public class APDatabase {
// При сетевом разделении узел отвечает своими данными, даже если они устарели
public Data getData(String key) {
// Не ждем синхронизации с другими узлами
return localReplica.get(key); // Всегда возвращаем ответ
}
}
Важно: В реальности полной доступности или согласованности не существует. Современные распределенные системы (например, через механизмы кворумов, согласованного хеширования) стремятся к практическим компромиссам, часто описываемым моделью PACELC, которая расширяет CAP для сценариев без сетевых разделений.