Высоконагруженные приложения - Глава 9 - Согласованность и Консенсус
Ранее книжный клуб нашей компании изучил отличную книгу:
Martin Kleppmann - Designing Data-Intensive Applications
Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка
Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪
Как обычно, я подготовил краткий обзор и майнд-мапу.
В главе 9 рассказывается о согласованности и консенсусе в распределенных системах. Она охватывает следующие темы:
- Что такое согласованность и согласованность в конечном счете.
- Линеаризуемость. Зачем это нужно. Отличие от сериализуемости. Как реализовать линеаризуемость. Стоимость линеаризуемости. Теорема CAP.
- Гарантии определения порядка. Что такое порядок и причинность. Их отношение к линеаризуемости. Sequence Number Ordering и как его реализовать. Total Order Broadcast и как его реализовать.
- Распределенные транзакции и консенсус. Зачем нужны консенсус и распределенные транзакции. Как их реализовать, связанные с ними проблемы и программное обеспечение, которое помогает.
Резюме:
- Нам не нужен Консенсус для КАЖДОЙ операции:
- Мы можем использовать одного лидера с возможностью линеаризации, а консенсус использовать для выбора нового лидера.
- Или мы можем использовать причинную согласованность, а консенсус использовать для некоторых проблемных случаев.
- Также у нас есть специальное программное обеспечение, реализующее Консенсус.
- Некоторые системы (без лидера / с несколькими лидерами) не нуждаются в линеаризуемости и могут работать с ветвлением и слиянием.