CAP Theorem 101

Кто я

  • 14 лет в IT
  • Сначала админ
  • Потом разработчик
  • И всё это время работаю с распределёнными системами
@asm0di0 at Twitter  @asm0dey at Telegram

А что такое распределённые системы❓

@asm0di0 at Twitter  @asm0dey at Telegram

А что такое распределённые системы?

Распределённая система — система, для которой отношения местоположений элементов (или групп элементов) играют существенную роль с точки зрения функционирования системы, а следовательно, и с точки зрения анализа и синтеза системы.
-- Wikipedia

@asm0di0 at Twitter  @asm0dey at Telegram

💤

@asm0di0 at Twitter  @asm0dey at Telegram

Попробуем попроще

  • Много серверов
  • Много сервисов
  • Много процессов!
@asm0di0 at Twitter  @asm0dey at Telegram

И?

Что-то может пойти не так

CAP-теорема рассказывает о том, что пойдёт не так и к чему надо готовиться.

Так что же это за волшебные буквы?

@asm0di0 at Twitter  @asm0dey at Telegram

C for Consistency

@asm0di0 at Twitter  @asm0dey at Telegram

C for Consistency

ACID:

  • Данные соответствуют бизнес-правилам
@asm0di0 at Twitter  @asm0dey at Telegram

C for Consistency

ACID:

  • Данные соответствуют бизнес-правилам

CAP:

  • Все процессы содержат одни и те же данные
  • Linearizability
@asm0di0 at Twitter  @asm0dey at Telegram
@asm0di0 at Twitter  @asm0dey at Telegram

🛑Но это НЕ распределённая система

Рассмотрим Postgres 🐘 с асинхронной репликацией

@asm0di0 at Twitter  @asm0dey at Telegram
@asm0di0 at Twitter  @asm0dey at Telegram

Thanks Vlad Mihalcea for these images

They are from his excellent book

You can buy it at https://vladmihalcea.com/books/high-performance-java-persistence/

Also please subscribe to his blog at https://vladmihalcea.com

Consistency

Это когда данные так просто не испортишь потому что всё со всем синхронизировано 😄

@asm0di0 at Twitter  @asm0dey at Telegram

A for Availability

@asm0di0 at Twitter  @asm0dey at Telegram

A for Availability

Как думаете, что такое доступность?

@asm0di0 at Twitter  @asm0dey at Telegram

A for Availability

Что такое доступность? Ответ должен прийти!

А за сколько? Голосуем!

@asm0di0 at Twitter  @asm0dey at Telegram

A for Availability

Ответ должен прийти

Когда-нибудь
Какой-нибудь

@asm0di0 at Twitter  @asm0dey at Telegram

P for «Partition tolerance»

@asm0di0 at Twitter  @asm0dey at Telegram

P for «Partition tolerance»

  • Сети не бывают идеальными
  • Даже если админы говорят иначе
  • Особенно если админы говорят иначе
@asm0di0 at Twitter  @asm0dey at Telegram

P for «Partition tolerance»

  • Сети не бывают идеальными
  • Даже если админы говорят иначе
  • Особенно если админы говорят иначе

Partition tolerance — когда система продолжает работать даже если сединения между серверами нет

Как-нибудь

@asm0di0 at Twitter  @asm0dey at Telegram

Так что же это за теорема?

@asm0di0 at Twitter  @asm0dey at Telegram
@asm0di0 at Twitter  @asm0dey at Telegram

Критика

https://jvns.ca/blog/2016/11/19/a-critique-of-the-cap-theorem/

@asm0di0 at Twitter  @asm0dey at Telegram

Критика

Критика заключается в том, что CAP-теорема даёт нам мало знания.

Но так ли это? С моей точки зрения нет!

Потому что CAP нам говорит о том, что произойдёт в worst-case scenario!

Например?

  • В Postgres с асинхронной репликацией вы получите неконсистентные данные
  • С синхронной — не получите вообще
  • В RabbitMQ потеряете часть данных, а часть получите много раз
  • В кассандре получите не то, что исали

Выводы?

  • Знай CAP теорему
  • Знай где твоя система в ней
  • Не обманывайся — ты не достгнешь CAP

Что почитать?

Спасибо!

@asm0dey всюду
@asm0di0 🐦