SlideShare a Scribd company logo
CAP ( Brewer ) theorem and
distributed data processing
Alexey Bokov / abokov @ microsoft.com / twitter: @abokov
Senior Program Manager
Technical Evangelist and Development team
Microsoft Corp
CAP теорема и немного Эрика БрьюераCAP теорема указывает, что распределенная система может иметь максимум два свойства из трех
одновременно:
1. Согласованность (Consistency) (атомарность) - каждая операция чтения, должна возвращать
значение, установленное в последней операции записи: то есть у каждого узла есть актуальные
данные о определенном объекте ( или данные во всех узлах не противоречат друг другу )
2. Доступность (Availability ) = Каждый запрос, полученный исправным узлом, влечет за собой
ответ. Изначально было что : «почти все запросы должны получать ответы». Отсутствие ответа –
это неответ по таймауту, и все ошибки вроде “сервер занят”.
3. Устойчивость к разделению (Partition Tolerance) . Кластер сохраняет работоспособность при
условии потери произвольного количества сообщений, посылаемых между узлами сети.
Разделение означает, что все пакеты от узлов одной партиции не доходят до узлов другой
партиции
Опубликована в 2000, доказана в 2002.
@eric_brewer
Теорема Брюера и реальность
CAP теорема как двигатель прогресса
CAP теорема в 2000х годах была воспринята ИТ индустрией на “ура”
Потому что теперь (наконец то, как раз в бум доткомов !) :
• Приложение стали больше использовать веб технологии, поэтому самое время перестать беспокоиться насчет
гарантированной целостности данных
• Доступность ( т.е. чтобы сайт работал ) для веб приложений совсем даже не подразумевает надежности
• Более того – гарантированная консистентность ( т.е. корретные данные на сайте ) это как раз то чего у нас
быть не может ( см. Теорему Брюера )
• Теперь любой у кого больше двух серверов может смело начинать интернет бизнес!
В 2002 году утверждение Брюера было формально доказано в MIT
Для начала это всё придумал не Брюер ;-)
4 июня 1976 году Sex Pistols выступили на сцене
в первой раз – это было доказательством того
что можно называться рок-группой и играть
песни в которых будет не больше 2 аккордов.
Наша группа знает 3 аккорда, но в
одной песне может быть только 2*
Всё придумал не Брюер ;-)
* в коде и припеве используется еще один аккорд из
основной тональности, но это не считается, т.к бас-
гитарист все равно обыгрывает только два из них
В последующем теорему 2 аккордов независимо доказали:
• 1976 – ‘Judy is a Punk’ by The Ramones (Eb5, Bb5 )
• 1980 – Atmosphere by Joy Division (A, D ) *
• 1985 – ‘Just Like Honey’ by Jesus and the Mary Chain (G#, D# )
• 1995 – Common People by Pulp (C, G) *
• 2007 – ‘505’ by Arctic Monkeys (Dm, Em)
• 2010 – ‘Bloodbuzz Ohio’ by The National (A, F#m ) *
В России это целое музыкальное направление:
IT теория vs IT реальность
• Сетевые соединения не надежны и часто падают
• Латентность всегда оказывает существенное
влияние на работу приложения
• Пропускная способность сети очень даже
конечна
• Сетевое соединение не безопасно
• Топология сети меняется очень часто, и чем
дальше узлы друг от друга, тем чаще меняется
топология
• У вашей системы множество администраторов,
которые делают одни и те же вещи по-разному
• Стоимость передачи данных бывает очень
высока
• Сеть гетерогенна – пакеты могут разделяться, их
атрибуты могут быть затерты, часть из них может
быть отфильтрована
• Сетевые соединения надежны
• Латентность связи всегда
нулевая
• Пропускная способность сети
бесконечна
• Сетевое соединение безопасно
• Топология сети не меняется
• У вашей системы всегда 1
администратор
• Стоимость передачи данных
нулевая
• Сеть гомогенна
Вернёмся обратно в IT
Вернёмся обратно в IT: важные замечания
Consistency подразумевает что при чтении мы получаем данные от _последней_ записи
Availability включает в себя понятие разумного ответа за определенное время – то есть если система не отвечает по таймауту или
выдает ответ вида “сервер занят”, или любой другой нерелевантный цели запроса ответ, то это приравнивается к неответу системы
Partition tolerance – устойчивость к разделению. Мы считаем потерянными также те сообщения, доставка которых превысила
определенный лимит времени.
• Если узел вышел из строя – это не ситуация разделения, потому что все равно есть только одна партиция ( а не 1 и N-1 как
можно полагать ).
• При выходе узла из строя система как раз может быть одновременно и согласованной и доступной, т.к. этот узел в любом
случае не обрабатывает запросы, а когда он восстановится и у нас будет 1 и N-1 это узел может быть инициализирован
актуальной репликой _всех_ данных.
Вывод: во время разделения мы выбираем либо доступность (минус
консистентность) либо конситентность ( минус доступность ).
Виды сервисов согласено CAP теореме
1) Доступность сервиса важнее всего = AP ( Availability + Partition Tolerance - best effort
availability) системы – отвечаем на запросы, однако возвращенные данные не всегда могут
быть актуальными и консистентными – например это DNS
2) Важнее всего целостность данных при разделении данных ( минус доступность ) =
CP ( Consistency + Partition tolerance ) системы – отвечают на запросы всегда с корретными
данными, но при проблемах с сетью, узлы могут не отвечать – Hbase, Google bigtable,
большинство noSQL БД
3) Важнее всего консистеность и доступность,но без возможности разделения
данных = AC ( Availability + Consistency ) – возвращают всегда корретные данные, однако не
имеют возможности разделения данных по сети при этом – примеры большинство реляционных
баз данных
На самом деле все сложнее
1) До тех пор, пока не наступила ситуация разделения система может вести себя как CA и
только в случае возникновения партиций ей нужно выбирать между согласованностью
и доступностью.
2) Свойства ( С, A, P ) на практике не являются бинарными :
1) Доступность, очевидно, может измеряться по времени прошедшем между
посылкой запроса и получением ответа.
2) Какие-то системы могут позволить себе долго отвечать на запрос, другие должны
сделать за определенный промежуток времени.
3) Свойство устойчивости к разделению напрямую зависит от того, каким образом
классифицировать сложившуюся ситуацию как разделение.
4) У консистентности данных тоже могут быть разные степени
Степени консистентности
1) Сильная/строгая согласованность (strong consistency). Операции чтения, произошешие
после выполнения операции записи, всегда возвращают результат последней
операции записи. Данный тип согласованности используется в CA системах, в частности
в классических реляционных базах данных
2) Слабая согласованность (weak consistency). При данном типе согласованности система
не гарантирует того, что операция чтения вернет результат последней операции
записи.
1) Существует ряд условий, необходимых для того, чтобы чтение вернуло самое последнее доступное
значение.
2) Период, в течении которого операция чтения возвращает устаревшие данные называется периодом
несогласованности.
Степени cлабой консистентности
Согласованность в конечном счете (eventual consistency) - если операций изменения объекта нет, то в конечном
счете операции чтения начнут давать наиболее актуальное значение. Наиболее популярной системой,
использующей согласованность в конечном счете, является DNS: изменения имени распространяются по
заданному алгоритму
Причинная согласованность: Если процесс А сообщил процессу Б, что А обновил объект, последующие запросы
на чтение к Б вернут актуальное состояние объекта.
Read-your-writes согласованность: процесс А, после того, как он обновил объект, всегда возвращает
обновленное состояние объекта.
Сессионная согласованность: процесс читает из системы хранения данных в контексте сессий. До тех пор, пока
сессия существует, система гарантирует read-your-writes согласованность.
Согласованность монотонной записи: в этом случае, система гарантирует, что запись будет произведена.
Данный тип согласованности является практически повсеместным.
Немного про разные варианты
R – колиство read узлов, W – количество write узлов, N – количество узлов которые хранят реплику данных
1) R+W>N – строгая консистенстность, всегда найдутся такие узлы системы, которые будут участвовать как в
операции записи, так и в операции чтения.
2) R = N/2, W=N/2 - когда операции записи и чтения имеют равную значимость для систем.
3) R->1, W->N - операция чтения выполняется намного чаще, чем операция записи, и перед системой не стоит
требования «запись должна осуществляться всегда». Конфигурация (R=1, W=N) обеспечивает высокую
доступность и устойчивость к разделению для операции чтения, т.к. узлу, чтобы возвратить ответ, не нужно
соединение с другими узлами.
4) R->N, W->1 - переносит нагрузку с операции записи на операцию чтения. (R=N,W=1) характеризуется высокой
доступностью и устойчивостью к разделению при операции записи, минус – отсутствие оптимистичкой
блокировки
5) R+W<=N, то есть вероятность того, что узлов, участвующих в операции чтения и в операции записи, не будет,
из чего следует, что система с такими настройками не может гарантировать сильную согласованность.
Время ответа – от CAP к PACELC
CAP теорема не учитывает время ответа узла системы на запрос в качестве свойства,
задержка и ситуация разделения тесно связаны друг с другом
Эту момент учитывает PACELC (in case of Partition, choose between Availability and
Consistency, else – between Latency and Consistency ) – в случае разделения данных
выбираем между CA ( доступностью и консистентностью ) и LC (задержкой и
консистентностью) (Абади):
1. Разделение между доступностью и устойчивостью к разделению нечеткое.
2. Исходя из наблюдений Абади, те базы данных, которые предпочитают
жертвовать консистетностью данных, имеют тенденцию жертвовать ей не только во время
разделения, но также и при обычном функционировании.
Вывод: в случае нормального функционирования системы, следует
выбирать между уменьшением времени ответа и согласованностью.
Минимизация эффектов
1) обработка ситуаций разделения как в вопросе обнаружения разделения
2) Процесс восстановления после разделения и поддержанию вариантов системы, которые могли
быть нарушены
• Для выполненных операций храним версионные векторы, представляющие собой пары узлов, на
которых они выполнялись, и времени, когда они выполнялись. если в системе будет две версии
объекта, система сможет узнать, какая из них актуальней. Иногда возможна ситуация, когда
актуальность определить нельзя – в таком случае считается, что некоторые изменения объекта
выполнялись параллельно (Amazon Dynamo, Voldemort, Apache Cassandra, Riak, MongoDB )
• Сегментирование архитектуры:
• По данным
• По операциям
• По требованиям к функционалу
• По пользователям
• По иерархии
Восстановление после разделения
Задачи:
1. Состояние объектов на всех узлах должно стать полностью консистентным
2. Компенсация ошибок, допущенных в результате разделения
Основным подходом к определению текущего состояния объекта является
пошаговое исследование операций, происходившими с данными с
момента начала разделения, и произведение корректирующих действий
на каждом шаге.
Компенсация ошибок
1) "последняя запись - финальная запись”
2) Перекладываем задачу на пользователя
Пример из реальной жизни - Примером процесса компенсации ошибок после разделения
является ситуация, когда на самолет было продано больше билетов, чем есть в наличии.
Процедура посадки может рассматриваться в данном случае как своего рода компенсация
ошибки - в самолет пройдет не больше, чем есть сидений
Архитектурное решение - выполнение рискованных операций в ситуации разделения
следует откладывать настолько, насколько это возможно
Выводы
Нет 100% работающего универсального решения, каким путем решать задачу обработки
запросов при возникновении расщепления распределенной системы – выбирать
доступность или же выбирать
Этот выбор может быть сделан только разработчиком, на основе анализа бизнес-модели
приложения.
Более того, этот выбор может быть сделан не для всего приложения в целом, а отдельно
для каждой его части:
• Согласованность для процедуры покупки и оплаты в интернетмагазине;
• Доступность для процедуры просмотра каталога товаров, чтения отзывов и т.п.
Можем смириться с несогласованностью, в случае коротких периодов (1-2 минуты)
разделения системы
Есть исключения из теоремы
Что дальше
Масштабируемость – опять же возвращаемся к выборы между масштабируемостью и консистентностью
Устойчивость к атакам - например DDoS не укладывется в модель разделения данных. DDoS атаки и прерывание
работы веб сервисов требуют другого понимания выбора между консистентностью и доступностью.
Мобильные сети – параметры мобильных сетей (огромная вариативность всех параметров сети – скорость,
доступность, задережки ) не укладываются в модель сетевого взаимодействия CAP теоремы:
Модель CAP теоремы предполагает что у нас есть относительно стабильные партиции которые
изменяется раз в несколько минут. Для беспроводных сетей изменения гораздо более сильные, потери пакетов и
изменение задержек.
Приложения в мобильных сетях больше ориентированы на геотаргетинг и социальное
взаимодействие, в то время как CAP теорема больше ориентирована на веб 2000-х – большие веб порталы и e-
commerce.
Примеры из практики – рисуем на флипчарте
1) Сайт большого спортивного соревнования
2) Онлайн ресурсы для школы
3) Поисковая система – архитектуры, неответы, золотой шард
4) Системы по продаже авиабилетов

More Related Content

What's hot

Cluster con postgresql
Cluster con postgresqlCluster con postgresql
Cluster con postgresql
esmeraldaq2011
 
RESTful API Testing using Postman, Newman, and Jenkins
RESTful API Testing using Postman, Newman, and JenkinsRESTful API Testing using Postman, Newman, and Jenkins
RESTful API Testing using Postman, Newman, and Jenkins
QASymphony
 
Using Postman to Automate API On-Boarding
Using Postman to Automate API On-BoardingUsing Postman to Automate API On-Boarding
Using Postman to Automate API On-Boarding
Postman
 
Zero-Copy Event-Driven Servers with Netty
Zero-Copy Event-Driven Servers with NettyZero-Copy Event-Driven Servers with Netty
Zero-Copy Event-Driven Servers with NettyDaniel Bimschas
 
testng
testngtestng
Java concurrency - Thread pools
Java concurrency - Thread poolsJava concurrency - Thread pools
Java concurrency - Thread pools
maksym220889
 
PCD - Process control daemon - Presentation
PCD - Process control daemon - PresentationPCD - Process control daemon - Presentation
PCD - Process control daemon - Presentation
haish
 
TestNG Session presented in PB
TestNG Session presented in PBTestNG Session presented in PB
TestNG Session presented in PB
Abhishek Yadav
 
TestNG Session presented in Xebia XKE
TestNG Session presented in Xebia XKETestNG Session presented in Xebia XKE
TestNG Session presented in Xebia XKE
Abhishek Yadav
 
Linux container, namespaces & CGroup.
Linux container, namespaces & CGroup. Linux container, namespaces & CGroup.
Linux container, namespaces & CGroup.
Neeraj Shrimali
 
Tareas recurrentes. qué son y cómo organizarlas en un panel
Tareas recurrentes. qué son y cómo organizarlas en un panelTareas recurrentes. qué son y cómo organizarlas en un panel
Tareas recurrentes. qué son y cómo organizarlas en un panel
Juan Antonio Latorre Molina
 
High Availability With DRBD & Heartbeat
High Availability With DRBD & HeartbeatHigh Availability With DRBD & Heartbeat
High Availability With DRBD & Heartbeat
Chris Barber
 
Pipeline based deployments on Jenkins
Pipeline based deployments  on JenkinsPipeline based deployments  on Jenkins
Pipeline based deployments on Jenkins
Knoldus Inc.
 
TDD and Unit Testing in Golang
TDD and Unit Testing in GolangTDD and Unit Testing in Golang
TDD and Unit Testing in Golang
Sofian Hadiwijaya
 
FreeBSD and Hardening Web Server
FreeBSD and Hardening Web ServerFreeBSD and Hardening Web Server
FreeBSD and Hardening Web Server
Muhammad Moinur Rahman
 
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
삵 (sarc.io)
 
High Availability on pfSense 2.4 - pfSense Hangout March 2017
High Availability on pfSense 2.4 - pfSense Hangout March 2017High Availability on pfSense 2.4 - pfSense Hangout March 2017
High Availability on pfSense 2.4 - pfSense Hangout March 2017
Netgate
 
SQL Server vs Postgres
SQL Server vs PostgresSQL Server vs Postgres
Spring MVC to iOS and the REST
Spring MVC to iOS and the RESTSpring MVC to iOS and the REST
Spring MVC to iOS and the REST
Roy Clarkson
 
HTTP/2 for Developers
HTTP/2 for DevelopersHTTP/2 for Developers
HTTP/2 for Developers
Svetlin Nakov
 

What's hot (20)

Cluster con postgresql
Cluster con postgresqlCluster con postgresql
Cluster con postgresql
 
RESTful API Testing using Postman, Newman, and Jenkins
RESTful API Testing using Postman, Newman, and JenkinsRESTful API Testing using Postman, Newman, and Jenkins
RESTful API Testing using Postman, Newman, and Jenkins
 
Using Postman to Automate API On-Boarding
Using Postman to Automate API On-BoardingUsing Postman to Automate API On-Boarding
Using Postman to Automate API On-Boarding
 
Zero-Copy Event-Driven Servers with Netty
Zero-Copy Event-Driven Servers with NettyZero-Copy Event-Driven Servers with Netty
Zero-Copy Event-Driven Servers with Netty
 
testng
testngtestng
testng
 
Java concurrency - Thread pools
Java concurrency - Thread poolsJava concurrency - Thread pools
Java concurrency - Thread pools
 
PCD - Process control daemon - Presentation
PCD - Process control daemon - PresentationPCD - Process control daemon - Presentation
PCD - Process control daemon - Presentation
 
TestNG Session presented in PB
TestNG Session presented in PBTestNG Session presented in PB
TestNG Session presented in PB
 
TestNG Session presented in Xebia XKE
TestNG Session presented in Xebia XKETestNG Session presented in Xebia XKE
TestNG Session presented in Xebia XKE
 
Linux container, namespaces & CGroup.
Linux container, namespaces & CGroup. Linux container, namespaces & CGroup.
Linux container, namespaces & CGroup.
 
Tareas recurrentes. qué son y cómo organizarlas en un panel
Tareas recurrentes. qué son y cómo organizarlas en un panelTareas recurrentes. qué son y cómo organizarlas en un panel
Tareas recurrentes. qué son y cómo organizarlas en un panel
 
High Availability With DRBD & Heartbeat
High Availability With DRBD & HeartbeatHigh Availability With DRBD & Heartbeat
High Availability With DRBD & Heartbeat
 
Pipeline based deployments on Jenkins
Pipeline based deployments  on JenkinsPipeline based deployments  on Jenkins
Pipeline based deployments on Jenkins
 
TDD and Unit Testing in Golang
TDD and Unit Testing in GolangTDD and Unit Testing in Golang
TDD and Unit Testing in Golang
 
FreeBSD and Hardening Web Server
FreeBSD and Hardening Web ServerFreeBSD and Hardening Web Server
FreeBSD and Hardening Web Server
 
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
LUA를 이용한 스마트한 웹서버 만들기 (Ray. Lee)
 
High Availability on pfSense 2.4 - pfSense Hangout March 2017
High Availability on pfSense 2.4 - pfSense Hangout March 2017High Availability on pfSense 2.4 - pfSense Hangout March 2017
High Availability on pfSense 2.4 - pfSense Hangout March 2017
 
SQL Server vs Postgres
SQL Server vs PostgresSQL Server vs Postgres
SQL Server vs Postgres
 
Spring MVC to iOS and the REST
Spring MVC to iOS and the RESTSpring MVC to iOS and the REST
Spring MVC to iOS and the REST
 
HTTP/2 for Developers
HTTP/2 for DevelopersHTTP/2 for Developers
HTTP/2 for Developers
 

Similar to CAP теорема Брюера и ее применения на практике

Monte Carlo modeling in cloud - mc-modeling-sdk
Monte Carlo modeling in cloud - mc-modeling-sdkMonte Carlo modeling in cloud - mc-modeling-sdk
Monte Carlo modeling in cloud - mc-modeling-sdk
Alexey Bokov
 
Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Andrey Akulov
 
phpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем храненияphpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем хранения
Slach
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Ontico
 
Обзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы CephОбзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы Ceph
OSLL
 
Software craftsmanship 2
Software craftsmanship 2Software craftsmanship 2
Software craftsmanship 2
Pavel Veinik
 
SETCON'18 - Dzmitry Nichyparuk - Designing reliable software
SETCON'18 - Dzmitry Nichyparuk - Designing reliable softwareSETCON'18 - Dzmitry Nichyparuk - Designing reliable software
SETCON'18 - Dzmitry Nichyparuk - Designing reliable software
Nadzeya Pus
 
Data Destribution service OMG standart
Data Destribution service OMG standart Data Destribution service OMG standart
Data Destribution service OMG standart
Sergei Seleznev
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийСравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийFuenteovejuna
 
МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1
Dima Dzuba
 
Дмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОДмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОDaria Oreshkina
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных
Levon Avakyan
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
PostgreSQL-Consulting
 
Apache Kafka Cluster - Russian
Apache Kafka Cluster - RussianApache Kafka Cluster - Russian
Apache Kafka Cluster - Russian
confluent
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ontico
 
Cassandra
CassandraCassandra
Cassandra
Vadim Tsesko
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование системMedia Gorod
 

Similar to CAP теорема Брюера и ее применения на практике (20)

Monte Carlo modeling in cloud - mc-modeling-sdk
Monte Carlo modeling in cloud - mc-modeling-sdkMonte Carlo modeling in cloud - mc-modeling-sdk
Monte Carlo modeling in cloud - mc-modeling-sdk
 
Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)Новые возможности распределенной обработки данных в памяти (Coherence)
Новые возможности распределенной обработки данных в памяти (Coherence)
 
phpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем храненияphpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем хранения
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
 
Cache in web (Secon 2008)
Cache in web (Secon 2008)Cache in web (Secon 2008)
Cache in web (Secon 2008)
 
Обзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы CephОбзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы Ceph
 
Software craftsmanship 2
Software craftsmanship 2Software craftsmanship 2
Software craftsmanship 2
 
SETCON'18 - Dzmitry Nichyparuk - Designing reliable software
SETCON'18 - Dzmitry Nichyparuk - Designing reliable softwareSETCON'18 - Dzmitry Nichyparuk - Designing reliable software
SETCON'18 - Dzmitry Nichyparuk - Designing reliable software
 
Data Destribution service OMG standart
Data Destribution service OMG standart Data Destribution service OMG standart
Data Destribution service OMG standart
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийСравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
 
МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1МАИ, Сети ЭВМ, Лекция №1
МАИ, Сети ЭВМ, Лекция №1
 
Дмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПОДмитрий Еманов — Под капотом серверного ПО
Дмитрий Еманов — Под капотом серверного ПО
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных
 
Lesson1
Lesson1Lesson1
Lesson1
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Apache Kafka Cluster - Russian
Apache Kafka Cluster - RussianApache Kafka Cluster - Russian
Apache Kafka Cluster - Russian
 
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
Ускоряем и разгружаем веб-сервер, прозрачно кэшируя на SSD, Станислав Николов...
 
Cassandra
CassandraCassandra
Cassandra
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование систем
 

More from Alexey Bokov

Product Visions and Strategy - crash course for startups
Product Visions and Strategy - crash course for startupsProduct Visions and Strategy - crash course for startups
Product Visions and Strategy - crash course for startups
Alexey Bokov
 
Windows containers troubleshooting
Windows containers troubleshootingWindows containers troubleshooting
Windows containers troubleshooting
Alexey Bokov
 
Azure web apps - designing and debugging
Azure web apps  - designing and debuggingAzure web apps  - designing and debugging
Azure web apps - designing and debugging
Alexey Bokov
 
Azure Web App services
Azure Web App servicesAzure Web App services
Azure Web App services
Alexey Bokov
 
Azure: Docker Container orchestration, PaaS ( Service Farbic ) and High avail...
Azure: Docker Container orchestration, PaaS ( Service Farbic ) and High avail...Azure: Docker Container orchestration, PaaS ( Service Farbic ) and High avail...
Azure: Docker Container orchestration, PaaS ( Service Farbic ) and High avail...
Alexey Bokov
 
Creating a gallery image for Azure marketplace
Creating a gallery image for Azure marketplaceCreating a gallery image for Azure marketplace
Creating a gallery image for Azure marketplace
Alexey Bokov
 
All about Azure workshop deck
All about Azure workshop deckAll about Azure workshop deck
All about Azure workshop deck
Alexey Bokov
 
All about Azure - Kazan
All about Azure - KazanAll about Azure - Kazan
All about Azure - KazanAlexey Bokov
 
Microsoft Azure
Microsoft AzureMicrosoft Azure
Microsoft Azure
Alexey Bokov
 
Internet of Things in Tbilisi
Internet of Things in TbilisiInternet of Things in Tbilisi
Internet of Things in Tbilisi
Alexey Bokov
 
Azure and web sites hackaton deck
Azure and web sites hackaton deckAzure and web sites hackaton deck
Azure and web sites hackaton deck
Alexey Bokov
 
Asp.net 5 cloud
Asp.net 5 cloudAsp.net 5 cloud
Asp.net 5 cloud
Alexey Bokov
 
Tbilisi hackaton intro
Tbilisi hackaton introTbilisi hackaton intro
Tbilisi hackaton intro
Alexey Bokov
 
Azure for retails
Azure for retailsAzure for retails
Azure for retails
Alexey Bokov
 
Azure for IT pro - TechDays Armenia
Azure for IT pro - TechDays ArmeniaAzure for IT pro - TechDays Armenia
Azure for IT pro - TechDays Armenia
Alexey Bokov
 
Tech day armenia for developers
Tech day armenia   for developersTech day armenia   for developers
Tech day armenia for developers
Alexey Bokov
 
Alexey Bokov key note - TechDays Armenia 2014
Alexey Bokov key note - TechDays Armenia 2014Alexey Bokov key note - TechDays Armenia 2014
Alexey Bokov key note - TechDays Armenia 2014
Alexey Bokov
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014
Alexey Bokov
 
Windows Azure для стартапов
Windows Azure для стартаповWindows Azure для стартапов
Windows Azure для стартапов
Alexey Bokov
 
Train for trainers event in Warsaw / Intro
Train for trainers event in Warsaw / IntroTrain for trainers event in Warsaw / Intro
Train for trainers event in Warsaw / IntroAlexey Bokov
 

More from Alexey Bokov (20)

Product Visions and Strategy - crash course for startups
Product Visions and Strategy - crash course for startupsProduct Visions and Strategy - crash course for startups
Product Visions and Strategy - crash course for startups
 
Windows containers troubleshooting
Windows containers troubleshootingWindows containers troubleshooting
Windows containers troubleshooting
 
Azure web apps - designing and debugging
Azure web apps  - designing and debuggingAzure web apps  - designing and debugging
Azure web apps - designing and debugging
 
Azure Web App services
Azure Web App servicesAzure Web App services
Azure Web App services
 
Azure: Docker Container orchestration, PaaS ( Service Farbic ) and High avail...
Azure: Docker Container orchestration, PaaS ( Service Farbic ) and High avail...Azure: Docker Container orchestration, PaaS ( Service Farbic ) and High avail...
Azure: Docker Container orchestration, PaaS ( Service Farbic ) and High avail...
 
Creating a gallery image for Azure marketplace
Creating a gallery image for Azure marketplaceCreating a gallery image for Azure marketplace
Creating a gallery image for Azure marketplace
 
All about Azure workshop deck
All about Azure workshop deckAll about Azure workshop deck
All about Azure workshop deck
 
All about Azure - Kazan
All about Azure - KazanAll about Azure - Kazan
All about Azure - Kazan
 
Microsoft Azure
Microsoft AzureMicrosoft Azure
Microsoft Azure
 
Internet of Things in Tbilisi
Internet of Things in TbilisiInternet of Things in Tbilisi
Internet of Things in Tbilisi
 
Azure and web sites hackaton deck
Azure and web sites hackaton deckAzure and web sites hackaton deck
Azure and web sites hackaton deck
 
Asp.net 5 cloud
Asp.net 5 cloudAsp.net 5 cloud
Asp.net 5 cloud
 
Tbilisi hackaton intro
Tbilisi hackaton introTbilisi hackaton intro
Tbilisi hackaton intro
 
Azure for retails
Azure for retailsAzure for retails
Azure for retails
 
Azure for IT pro - TechDays Armenia
Azure for IT pro - TechDays ArmeniaAzure for IT pro - TechDays Armenia
Azure for IT pro - TechDays Armenia
 
Tech day armenia for developers
Tech day armenia   for developersTech day armenia   for developers
Tech day armenia for developers
 
Alexey Bokov key note - TechDays Armenia 2014
Alexey Bokov key note - TechDays Armenia 2014Alexey Bokov key note - TechDays Armenia 2014
Alexey Bokov key note - TechDays Armenia 2014
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014
 
Windows Azure для стартапов
Windows Azure для стартаповWindows Azure для стартапов
Windows Azure для стартапов
 
Train for trainers event in Warsaw / Intro
Train for trainers event in Warsaw / IntroTrain for trainers event in Warsaw / Intro
Train for trainers event in Warsaw / Intro
 

CAP теорема Брюера и ее применения на практике

  • 1. CAP ( Brewer ) theorem and distributed data processing Alexey Bokov / abokov @ microsoft.com / twitter: @abokov Senior Program Manager Technical Evangelist and Development team Microsoft Corp
  • 2. CAP теорема и немного Эрика БрьюераCAP теорема указывает, что распределенная система может иметь максимум два свойства из трех одновременно: 1. Согласованность (Consistency) (атомарность) - каждая операция чтения, должна возвращать значение, установленное в последней операции записи: то есть у каждого узла есть актуальные данные о определенном объекте ( или данные во всех узлах не противоречат друг другу ) 2. Доступность (Availability ) = Каждый запрос, полученный исправным узлом, влечет за собой ответ. Изначально было что : «почти все запросы должны получать ответы». Отсутствие ответа – это неответ по таймауту, и все ошибки вроде “сервер занят”. 3. Устойчивость к разделению (Partition Tolerance) . Кластер сохраняет работоспособность при условии потери произвольного количества сообщений, посылаемых между узлами сети. Разделение означает, что все пакеты от узлов одной партиции не доходят до узлов другой партиции Опубликована в 2000, доказана в 2002. @eric_brewer
  • 3. Теорема Брюера и реальность
  • 4. CAP теорема как двигатель прогресса CAP теорема в 2000х годах была воспринята ИТ индустрией на “ура” Потому что теперь (наконец то, как раз в бум доткомов !) : • Приложение стали больше использовать веб технологии, поэтому самое время перестать беспокоиться насчет гарантированной целостности данных • Доступность ( т.е. чтобы сайт работал ) для веб приложений совсем даже не подразумевает надежности • Более того – гарантированная консистентность ( т.е. корретные данные на сайте ) это как раз то чего у нас быть не может ( см. Теорему Брюера ) • Теперь любой у кого больше двух серверов может смело начинать интернет бизнес! В 2002 году утверждение Брюера было формально доказано в MIT
  • 5. Для начала это всё придумал не Брюер ;-) 4 июня 1976 году Sex Pistols выступили на сцене в первой раз – это было доказательством того что можно называться рок-группой и играть песни в которых будет не больше 2 аккордов. Наша группа знает 3 аккорда, но в одной песне может быть только 2*
  • 6. Всё придумал не Брюер ;-) * в коде и припеве используется еще один аккорд из основной тональности, но это не считается, т.к бас- гитарист все равно обыгрывает только два из них В последующем теорему 2 аккордов независимо доказали: • 1976 – ‘Judy is a Punk’ by The Ramones (Eb5, Bb5 ) • 1980 – Atmosphere by Joy Division (A, D ) * • 1985 – ‘Just Like Honey’ by Jesus and the Mary Chain (G#, D# ) • 1995 – Common People by Pulp (C, G) * • 2007 – ‘505’ by Arctic Monkeys (Dm, Em) • 2010 – ‘Bloodbuzz Ohio’ by The National (A, F#m ) * В России это целое музыкальное направление:
  • 7. IT теория vs IT реальность • Сетевые соединения не надежны и часто падают • Латентность всегда оказывает существенное влияние на работу приложения • Пропускная способность сети очень даже конечна • Сетевое соединение не безопасно • Топология сети меняется очень часто, и чем дальше узлы друг от друга, тем чаще меняется топология • У вашей системы множество администраторов, которые делают одни и те же вещи по-разному • Стоимость передачи данных бывает очень высока • Сеть гетерогенна – пакеты могут разделяться, их атрибуты могут быть затерты, часть из них может быть отфильтрована • Сетевые соединения надежны • Латентность связи всегда нулевая • Пропускная способность сети бесконечна • Сетевое соединение безопасно • Топология сети не меняется • У вашей системы всегда 1 администратор • Стоимость передачи данных нулевая • Сеть гомогенна Вернёмся обратно в IT
  • 8. Вернёмся обратно в IT: важные замечания Consistency подразумевает что при чтении мы получаем данные от _последней_ записи Availability включает в себя понятие разумного ответа за определенное время – то есть если система не отвечает по таймауту или выдает ответ вида “сервер занят”, или любой другой нерелевантный цели запроса ответ, то это приравнивается к неответу системы Partition tolerance – устойчивость к разделению. Мы считаем потерянными также те сообщения, доставка которых превысила определенный лимит времени. • Если узел вышел из строя – это не ситуация разделения, потому что все равно есть только одна партиция ( а не 1 и N-1 как можно полагать ). • При выходе узла из строя система как раз может быть одновременно и согласованной и доступной, т.к. этот узел в любом случае не обрабатывает запросы, а когда он восстановится и у нас будет 1 и N-1 это узел может быть инициализирован актуальной репликой _всех_ данных. Вывод: во время разделения мы выбираем либо доступность (минус консистентность) либо конситентность ( минус доступность ).
  • 9. Виды сервисов согласено CAP теореме 1) Доступность сервиса важнее всего = AP ( Availability + Partition Tolerance - best effort availability) системы – отвечаем на запросы, однако возвращенные данные не всегда могут быть актуальными и консистентными – например это DNS 2) Важнее всего целостность данных при разделении данных ( минус доступность ) = CP ( Consistency + Partition tolerance ) системы – отвечают на запросы всегда с корретными данными, но при проблемах с сетью, узлы могут не отвечать – Hbase, Google bigtable, большинство noSQL БД 3) Важнее всего консистеность и доступность,но без возможности разделения данных = AC ( Availability + Consistency ) – возвращают всегда корретные данные, однако не имеют возможности разделения данных по сети при этом – примеры большинство реляционных баз данных
  • 10. На самом деле все сложнее 1) До тех пор, пока не наступила ситуация разделения система может вести себя как CA и только в случае возникновения партиций ей нужно выбирать между согласованностью и доступностью. 2) Свойства ( С, A, P ) на практике не являются бинарными : 1) Доступность, очевидно, может измеряться по времени прошедшем между посылкой запроса и получением ответа. 2) Какие-то системы могут позволить себе долго отвечать на запрос, другие должны сделать за определенный промежуток времени. 3) Свойство устойчивости к разделению напрямую зависит от того, каким образом классифицировать сложившуюся ситуацию как разделение. 4) У консистентности данных тоже могут быть разные степени
  • 11. Степени консистентности 1) Сильная/строгая согласованность (strong consistency). Операции чтения, произошешие после выполнения операции записи, всегда возвращают результат последней операции записи. Данный тип согласованности используется в CA системах, в частности в классических реляционных базах данных 2) Слабая согласованность (weak consistency). При данном типе согласованности система не гарантирует того, что операция чтения вернет результат последней операции записи. 1) Существует ряд условий, необходимых для того, чтобы чтение вернуло самое последнее доступное значение. 2) Период, в течении которого операция чтения возвращает устаревшие данные называется периодом несогласованности.
  • 12. Степени cлабой консистентности Согласованность в конечном счете (eventual consistency) - если операций изменения объекта нет, то в конечном счете операции чтения начнут давать наиболее актуальное значение. Наиболее популярной системой, использующей согласованность в конечном счете, является DNS: изменения имени распространяются по заданному алгоритму Причинная согласованность: Если процесс А сообщил процессу Б, что А обновил объект, последующие запросы на чтение к Б вернут актуальное состояние объекта. Read-your-writes согласованность: процесс А, после того, как он обновил объект, всегда возвращает обновленное состояние объекта. Сессионная согласованность: процесс читает из системы хранения данных в контексте сессий. До тех пор, пока сессия существует, система гарантирует read-your-writes согласованность. Согласованность монотонной записи: в этом случае, система гарантирует, что запись будет произведена. Данный тип согласованности является практически повсеместным.
  • 13. Немного про разные варианты R – колиство read узлов, W – количество write узлов, N – количество узлов которые хранят реплику данных 1) R+W>N – строгая консистенстность, всегда найдутся такие узлы системы, которые будут участвовать как в операции записи, так и в операции чтения. 2) R = N/2, W=N/2 - когда операции записи и чтения имеют равную значимость для систем. 3) R->1, W->N - операция чтения выполняется намного чаще, чем операция записи, и перед системой не стоит требования «запись должна осуществляться всегда». Конфигурация (R=1, W=N) обеспечивает высокую доступность и устойчивость к разделению для операции чтения, т.к. узлу, чтобы возвратить ответ, не нужно соединение с другими узлами. 4) R->N, W->1 - переносит нагрузку с операции записи на операцию чтения. (R=N,W=1) характеризуется высокой доступностью и устойчивостью к разделению при операции записи, минус – отсутствие оптимистичкой блокировки 5) R+W<=N, то есть вероятность того, что узлов, участвующих в операции чтения и в операции записи, не будет, из чего следует, что система с такими настройками не может гарантировать сильную согласованность.
  • 14. Время ответа – от CAP к PACELC CAP теорема не учитывает время ответа узла системы на запрос в качестве свойства, задержка и ситуация разделения тесно связаны друг с другом Эту момент учитывает PACELC (in case of Partition, choose between Availability and Consistency, else – between Latency and Consistency ) – в случае разделения данных выбираем между CA ( доступностью и консистентностью ) и LC (задержкой и консистентностью) (Абади): 1. Разделение между доступностью и устойчивостью к разделению нечеткое. 2. Исходя из наблюдений Абади, те базы данных, которые предпочитают жертвовать консистетностью данных, имеют тенденцию жертвовать ей не только во время разделения, но также и при обычном функционировании. Вывод: в случае нормального функционирования системы, следует выбирать между уменьшением времени ответа и согласованностью.
  • 15. Минимизация эффектов 1) обработка ситуаций разделения как в вопросе обнаружения разделения 2) Процесс восстановления после разделения и поддержанию вариантов системы, которые могли быть нарушены • Для выполненных операций храним версионные векторы, представляющие собой пары узлов, на которых они выполнялись, и времени, когда они выполнялись. если в системе будет две версии объекта, система сможет узнать, какая из них актуальней. Иногда возможна ситуация, когда актуальность определить нельзя – в таком случае считается, что некоторые изменения объекта выполнялись параллельно (Amazon Dynamo, Voldemort, Apache Cassandra, Riak, MongoDB ) • Сегментирование архитектуры: • По данным • По операциям • По требованиям к функционалу • По пользователям • По иерархии
  • 16. Восстановление после разделения Задачи: 1. Состояние объектов на всех узлах должно стать полностью консистентным 2. Компенсация ошибок, допущенных в результате разделения Основным подходом к определению текущего состояния объекта является пошаговое исследование операций, происходившими с данными с момента начала разделения, и произведение корректирующих действий на каждом шаге.
  • 17. Компенсация ошибок 1) "последняя запись - финальная запись” 2) Перекладываем задачу на пользователя Пример из реальной жизни - Примером процесса компенсации ошибок после разделения является ситуация, когда на самолет было продано больше билетов, чем есть в наличии. Процедура посадки может рассматриваться в данном случае как своего рода компенсация ошибки - в самолет пройдет не больше, чем есть сидений Архитектурное решение - выполнение рискованных операций в ситуации разделения следует откладывать настолько, насколько это возможно
  • 18. Выводы Нет 100% работающего универсального решения, каким путем решать задачу обработки запросов при возникновении расщепления распределенной системы – выбирать доступность или же выбирать Этот выбор может быть сделан только разработчиком, на основе анализа бизнес-модели приложения. Более того, этот выбор может быть сделан не для всего приложения в целом, а отдельно для каждой его части: • Согласованность для процедуры покупки и оплаты в интернетмагазине; • Доступность для процедуры просмотра каталога товаров, чтения отзывов и т.п. Можем смириться с несогласованностью, в случае коротких периодов (1-2 минуты) разделения системы
  • 20. Что дальше Масштабируемость – опять же возвращаемся к выборы между масштабируемостью и консистентностью Устойчивость к атакам - например DDoS не укладывется в модель разделения данных. DDoS атаки и прерывание работы веб сервисов требуют другого понимания выбора между консистентностью и доступностью. Мобильные сети – параметры мобильных сетей (огромная вариативность всех параметров сети – скорость, доступность, задережки ) не укладываются в модель сетевого взаимодействия CAP теоремы: Модель CAP теоремы предполагает что у нас есть относительно стабильные партиции которые изменяется раз в несколько минут. Для беспроводных сетей изменения гораздо более сильные, потери пакетов и изменение задержек. Приложения в мобильных сетях больше ориентированы на геотаргетинг и социальное взаимодействие, в то время как CAP теорема больше ориентирована на веб 2000-х – большие веб порталы и e- commerce.
  • 21. Примеры из практики – рисуем на флипчарте 1) Сайт большого спортивного соревнования 2) Онлайн ресурсы для школы 3) Поисковая система – архитектуры, неответы, золотой шард 4) Системы по продаже авиабилетов

Editor's Notes

  1. У нас речь идет о асинхронной системе – нет возможности определить было сообщение не отправлено/не получиено или оно медленно идет из-за задержек Важно - теорема доказана только в контексте асинхронных систем, характеризующихся отсутствием хронометража, вследствие чего узлы системы принимают решения, только исходя из получаемых сообщений и локальных расчетов, и в контексте частично синхронных систем. Частично синхронные системы = обладают хронометражом, но совпадение времени на узлах не обязательно – главное, чтобы они одинаково учитывали скорость течения времени.
  2. Согласованность в конечном счете (eventual consistency) - если операций изменения объекта нет, то в конечном счете операции чтения начнут давать наиболее актуальное значение. При отсутствии каких-либо поломок/критических ошибок в узлах системы, максимальный период несогласованности может быть определен по таким факторам, как задержки коммуникаций, нагрузка на систему, количество реплик, используемых для репликации. Наиболее популярной системой, использующей согласованность в конечном счете, является DNS: изменения имени распространяются по заданному алгоритму – после того, как изменения дойдут до всех узлов системы и обновятся кэши, все операции чтения будут возвращать актуальный адрес. Типы согласованности могут быть скомбинированы. 1) К примеру, система может иметь согласованность монотонного чтения вместе с сессионной согласованностью одновременно. С практической точки зрения, эти свойства согласованность монотонного чтения и сессионная согласованность являются наиболее востребованными в системах с согласованностью в конечном счете, но не всегда обязательными. Они упрощают разработку приложения, одновременно позволяя системе хранения ослабить согласованность и обеспечить высокую доступность.
  3. R+W>N – строгая консистенстность, всегда найдутся такие узлы системы, которые будут участвовать как в операции записи, так и в операции чтения. Из-за их участия в операции записи, они будут хранить наиболее актуальное значение, что, в свою очередь, повлияет на результаты последующего чтения. R = N/2, W=N/2 - когда операции записи и чтения имеют равную значимость для системы, Таким образом, задержка, связанная с обеспечением согласованности, примерно равна. R->1, W->N - операция чтения выполняется намного чаще, чем операция записи, и перед системой не стоит требования «запись должна осуществляться всегда». Это позволяет сократить издержки на операцию чтения до минимума, переложив всю нагрузку на операцию записи. Стоит заметить, что конфигурация (R=1, W=N) обеспечивает высокую доступность и устойчивость к разделению для операции чтения, т.к. узлу, чтобы возвратить ответ, не нужно соединение с другими узлами. Недостатком такой настройки является отсутствие устойчивости к разделению при операции записи, т.к. для успешного ее выполнения требуется связь со всеми узлами сети, которые имеют реплику R->N, W->1 - переносит нагрузку с операции записи на операцию чтения. (R=N,W=1) характеризуется высокой доступностью и устойчивостью к разделению при операции записи, минус – отсутствие оптимистичкой блокировки R+W<=N, то есть вероятность того, что узлов, участвующих в операции чтения и в операции записи, не будет, из чего следует, что система с такими настройками не может гарантировать сильную согласованность. R – колиство read узлов, W – количество write узлов, N – количество узлов которые хранят реплику данных R+W>N – строгая консистенстность, всегда найдутся такие узлы системы, которые будут участвовать как в операции записи, так и в операции чтения. Из-за их участия в операции записи, они будут хранить наиболее актуальное значение, что, в свою очередь, повлияет на результаты последующего чтения. R = N/2, W=N/2 - когда операции записи и чтения имеют равную значимость для системы, Таким образом, задержка, связанная с обеспечением согласованности, примерно равна. R->1, W->N - операция чтения выполняется намного чаще, чем операция записи, и перед системой не стоит требования «запись должна осуществляться всегда». Это позволяет сократить издержки на операцию чтения до минимума, переложив всю нагрузку на операцию записи. Стоит заметить, что конфигурация (R=1, W=N) обеспечивает высокую доступность и устойчивость к разделению для операции чтения, т.к. узлу, чтобы возвратить ответ, не нужно соединение с другими узлами. Недостатком такой настройки является отсутствие устойчивости к разделению при операции записи, т.к. для успешного ее выполнения требуется связь со всеми узлами сети, которые имеют реплику R->N, W->1 - переносит нагрузку с операции записи на операцию чтения. (R=N,W=1) характеризуется высокой доступностью и устойчивостью к разделению при операции записи, минус – отсутствие оптимистичкой блокировки R+W<=N, то есть вероятность того, что узлов, участвующих в операции чтения и в операции записи, не будет, из чего следует, что система с такими настройками не может гарантировать сильную согласованность.
  4. Почему: 1. Разделение между доступностью и устойчивостью к разделению нечеткое. Данный пункт представляет собой следующий вопрос: что значит иметь свойство доступности, но не иметь свойство устойчивости к разделению и наоборот? Если произошло партицирование, то в чем разница поведений CA и CP баз данных? CA, согласно определениям свойств, прекращает работу, т.к. неустойчиво к разделению, а CP – становится недоступно, т.е. фактически тоже прекращает работу. 2. Исходя из наблюдений Абади, те базы данных, которые предпочитают жертвовать консистетностью данных, имеют тенденцию жертвовать ей не только во время разделения, но также и при обычном функционировании.
  5. - требования, предъявляемые системой к различным операциям и данным, могут разниться: от одних операций/данных может требоваться наличие строгой согласованности, от других – наличие высокого показателя доступности. Возможно применение сегментирование операций и данных на компоненты, требующие различных гарантий:
  6. Можно создать такой алгоритм разрешения конфликтов, который всегда будет выполняться в автоматическом режиме, что, однако, может повлечь за собой потерю информации, либо ввести определенные ограничения на операции, что, несмотря на уменьшение функциональности системы, что сделает создание неразрешимых конфликтов невозможным.