Высоконагруженные приложения

Серия интеллект-карт, посвященная книге Мартина Клеппманна «Высоконагруженные приложения».

Высоконагруженные приложения - Глава 12 - Будущее систем данных

Высоконагруженные приложения - Глава 12 - Будущее систем данных

Переводы: EN

Ранее книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно, я подготовил краткий обзор и майнд-мапу.

Глава 12 - это саммари книги и визионерский взгляд на будущее.

  • Интеграция данных.
    • Обзор способов интеграции данных.
    • Причинность и зачем нам нужен тотальный порядок и идемпотентность.
    • Транзакции и линеаризуемость
    • Ограничения тотального порядка.
    • Лямбда-архитектура и унификация пакетной и потоковой обработки как наиболее перспективный подход.
  • Разделение баз данных.
    • Обзор выстраиваний композиции из хранилищ данных вместе.
    • Разработка приложений вокруг потока данных.
    • Использование производных состояний.
  • Стремление к правильности: какие проблемы учитывать и как с ними бороться.
    • Жетон сквозного прохода.
    • Как обрабатывать многораздельные запросы.
    • Вопросы своевременности и целостности. Извинения в бизнесе.
    • Мета-подход: доверяй, но проверяй.
  • Делать правильные вещи.
    • Предиктивная аналитика дискриминирует людей! Мы несем ответственность и подотчетность.
    • Конфиденциальность противоречит отслеживанию. Тотальный надзор должен быть законодательным и саморегулируемым.

Скачать всю майнд-мапу в PDF

Высоконагруженные приложения - Глава 11 - Потоковая обработка

Высоконагруженные приложения - Глава 11 - Потоковая обработка

Переводы: EN

Ранее книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно, я подготовил краткий обзор и майнд-мапу.

Глава 11 раскрывает все аспекты потоковой обработки. Если вашей системе необходимо обрабатывать некоторые данные на лету, ваша команда разработчиков должна изучить эту информацию.

  • Подходы для передачи событий: прямой обмен сообщениями, системы обмена сообщениями и партиционированные журналы. Их реализации, плюсы и минусы.
  • Как использовать потоки для баз данных. Синхронизация баз данных, Change Data Capture (CDC), Event Sourcing. Состояние, потоки и иммутабельность.
  • Нюансы обработки потоков. Полезные варианты использования, рассуждения о времени, 3 типа потоковых joins, отказоустойчивость.

Скачать всю майнд-мапу в PDF

Высоконагруженные приложения - Глава 10 - Пакетная обработка

Высоконагруженные приложения - Глава 10 - Пакетная обработка

Переводы: EN

Ранее книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно, я подготовил краткий обзор и майнд-мапу.

Глава 10 раскрывает все аспекты пакетной обработки больших данных. Если вашей системе необходимо обрабатывать данные, ваша команда разработчиков должна изучить это.

  • Инструменты Unix для пакетной обработки и блестящей концепции пайпов.
  • MapReduce и распределенные файловые системы. Как этот подход решает проблемы пайпов Unix. Отказоустойчивость и партиционирование. Использование и реализация Joins, Grouping, Mapping. Доступные инструменты и проблемы этого подхода.
  • Что выходит за рамки MapReduce. Движки обработки данных, обработка графов, высокоуровневые API и базы данных MPP. Работа с отказоустойчивостью и партиционированием. Реализации, проблемы, что и когда использовать.

Скачать всю майнд-мапу в PDF

Высоконагруженные приложения - Глава 9 - Согласованность и Консенсус

Высоконагруженные приложения - Глава 9 - Согласованность и Консенсус

Переводы: EN

Ранее книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно, я подготовил краткий обзор и майнд-мапу.

В главе 9 рассказывается о согласованности и консенсусе в распределенных системах. Она охватывает следующие темы:

  • Что такое согласованность и согласованность в конечном счете.
  • Линеаризуемость. Зачем это нужно. Отличие от сериализуемости. Как реализовать линеаризуемость. Стоимость линеаризуемости. Теорема CAP.
  • Гарантии определения порядка. Что такое порядок и причинность. Их отношение к линеаризуемости. Sequence Number Ordering и как его реализовать. Total Order Broadcast и как его реализовать.
  • Распределенные транзакции и консенсус. Зачем нужны консенсус и распределенные транзакции. Как их реализовать, связанные с ними проблемы и программное обеспечение, которое помогает.

Резюме:

Высоконагруженные приложения - Глава 8 - Проблемы с распределенными системами

Высоконагруженные приложения - Глава 8 - Проблемы с распределенными системами

Переводы: EN

Ранее книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно, я подготовил краткий обзор и майнд-мапу.

В главе 8 раскрываются проблемы распределенных систем, не связанные с базами данных. Команды разработчиков должны учитывать их при разработке распределенного программного обеспечения.

  • Неисправности и частичные отказы. Необходимость строить надежную систему из ненадежных компонентов.
  • Проблема 1: ненадежные сети. Почему такое случается. Как это обнаружить. Как с этим бороться. Синхронные и асинхронные сети. Гибридные сети и эмуляция гибридных сетей.
  • Проблема 2: ненадежные часы. Монотонные часы и часы времени суток. Что использовать, а что не использовать в разных случаях. Хорошие практики.
  • Проблема 3: знание, правда и ложь. Что такое правда в распределенных системах. Проблема византийских генералов. Модель системы и реальность: что использовать в каких случаях.

Скачать всю майнд-мапу в PDF

Высоконагруженные приложения - Глава 7 - Транзакции

Высоконагруженные приложения - Глава 7 - Транзакции

Переводы: EN

Ранее книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно, я подготовил краткий обзор и майнд-мапу.

Глава 7 - это все, что ваша команда разработчиков должна знать о транзакциях:

  • Предназначение транзакций
  • Концепция транзакций: ACID, BASE, одно-объектные и много-объектные транзакции.
  • Уровни слабой изоляции: Read Committed, Snapshot Isolation и Repeatable Read. Проблемы и их предотвращение: утерянные обновления, перекосы при записи и фантомы
  • Serializability и три подхода: фактическое последовательное выполнение, двухфазная блокировка (2PL), изоляция сериализуемых снэпшотов (SSI). Возможные проблемы и производительность.

Скачать всю майнд-мапу в PDF

Высоконагруженные приложения - Глава 6 - Партиционирование

Высоконагруженные приложения - Глава 6 - Партиционирование

Переводы: EN

Ранее книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно, я подготовил краткий обзор и майнд-мапу.

Глава 6 содержит все, что следует учитывать команде разработчиков при проектировании хранилища для больших данных:

  • Партиция, она же шард, она же регион, он же tablet, она же vNode, она же vBucket. Это еще один подход к хранению данных в дополнение к Репликации (рассмотренной в предыдущей главе).
  • Как партиционировать данные со структурой ключ-значение (первичный индекс). Проблемы с партиционированием - skew и hotspot. Подходы: диапазон ключа и хэш ключа.
  • Партиционирование для вторичных индексов: локальный индекс и глобальный индекс
  • Ребалансировка партиций по мере роста. Плохие и хорошие подходы, проблемы и способы их решения. Ручная и автоматическая перебалансировка.
  • Маршрутизация запросов. Разные подходы, проблемы и решения.

Скачать всю майнд-мапу в PDF

Высоконагруженные приложения - Глава 5 - Репликация

Высоконагруженные приложения - Глава 5 - Репликация

Переводы: EN

Ранее книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно, я подготовил краткий обзор и майнд-мапу.

Глава 5:

  • Вступление. Как масштабировать приложения. Репликация и партиционирование.
  • Три алгоритма репликации
  • Репликация с одним лидером
    • Лидеры и последователи
    • Синхроная и асинхронная репликация
    • Добавление новых последователей
    • Обработка перебоев в работе узлов
    • Технические реализации и все возможные проблемы
  • Многолидерная репликация
    • Случаи использования, когда это хорошо
    • Обработка конфликтов на запись
    • Три топологии и потенциальные проблемы
  • Репликация без лидера
    • Запись в базу данных, когда узел не работает
    • Кворумы и проблемы с ними
    • Обнаружение одновременных записей и способы разрешения конфликтов

Скачать всю майнд-мапу в PDF

Высоконагруженные приложения - Глава 4 - Кодирование и эволюция

Высоконагруженные приложения - Глава 4 - Кодирование и эволюция

Переводы: EN

Ранее в этом году книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно, я подготовил краткий обзор и майнд-мапу.

Глава 4:

  • Что такое эволюционируемость. Обратная и прямая совместимость
  • Подходы к кодированию данных:
    • JSON, XML и их двоичные варианты
    • Thrift и Protobuf
    • Apache Avro
  • Модели работы с потоком данных
    • Через базы данных
    • Через сервисы: REST, SOAP, RPC и их будущее развитие
    • Через брокеры сообщений - когда они лучше, а когда нет

Намного больше деталей в майнд-мапе:

Высоконагруженные приложения - Глава 3 - Подсистемы хранения и извлечение данных

Высоконагруженные приложения - Глава 3 - Подсистемы хранения и извлечение данных

Переводы: EN

Ранее в этом году книжный клуб нашей компании изучил отличную книгу:

Martin Kleppmann - Designing Data-Intensive Applications

Мартин Клеппман - Высоконагруженные приложения. Программирование, масштабирование, поддержка

Это - лучшая книга о создании комплексных масштабируемых программных систем, которые я когда-либо читал. 💪

Как обычно, я подготовил краткий обзор и майнд-мапу.

Глава 3:

  • Структуры данных:
    • Log-structured. SSTables / LSM-деревья (когда мы ничего не обновляем, а пишем в конец). Очень крутая идея, как хранить данные.
      • Отсортированные файлы.
      • Индексы для каждого.
      • Более того, индексы могут быть созданы не для всех записей, потому что они отсортированы, и если размеры записей одинаковы, то поиск между двумя известными проиндексированными записями является бинарным поиском O(log n).
      • Мы всегда пишем в последний файл.
      • Процесс слияния файлов - это школьный алгоритм: как записать O(n) слияние двух отсортированных массивов в один отсортированный массив.
    • Обновление-на-месте. B-деревья (когда мы напрямую обновляем записи). Тоже очень умно.
      • Деревья - более простая идея, но тут классно придумано с сегментами заточенными под работу дисков - и отсюда возможные проблемы с SSD т.к. много перезаписей сегментов
  • Индексирование: первичное, вторичное, многоколоночное, полнотекстовое
    • По поводу индексов - очевидно, что чудес не бывает и нужны дополнительные конструкции.
    • Интересно, что иногда значения могут храниться внутри индексов.
    • К сожалению, о полнотекстовом поиске написано очень мало - интересно узнать о нем больше.
  • OLTP vs OLAP. Четкое разделение OLAP / OLTP очень интересно.
  • Столбцово-ориентированное хранилище.
    • Есть очень интересный аспект сжатия данных: сколько нулей, сколько единиц - своего рода компрессор. Это возможно только в памяти - только на одну следующую SSTable

Намного больше деталей в майнд-мапе: