Пошаговый алгоритм разработки высоконагруженных систем

Алгоритм проектирования высоконагруженной системы очень прост :) Выясняете всё о данных, которые циркулируют внутри вашего проекта. Их объём, характеристики, требования к хранению, скорости доступа и обработки. Из этих требований естественным образом вытекает схема хранения и архитектура.

На словах всё просто, а на деле?

Первая часть доклада будет посвящена архитектурным паттернам — инструментам, которые используются при проектировании: масштабирование, шардирование, партиционирование, очереди, конвейерная обработка, репликация, кеширование, денормализация, концепция толстого клиента и другие технологии.

Вторая часть — анализ схемы движения данных и принятие решения о том, какие именно паттерны подходят нам для построения высоконагруженной отказоустойчивой архитектуры.

Приходите! Мы не будем говорить о настройках конкретных баз данных и веб-серверов, мы будем говорить о принципах. А знание нескольких принципов, как известно, заменяет знание множества фактов.

О чём всё это?

Знание нескольких принципов заменяет знание множества фактов. Мы не будем говорить о конкретном программном обеспечении, о конкретных утилитах, о конкретных базах данных или веб-серверах. Мы будем говорить о принципах, применяемых в проектировании высоконагруженных проектов.

Сначала мы изучим с тобой конкретные архитектурные паттерны, которые применяются в мире высоких технологий:
  • Сервисно-ориентированная архитектура;
  • Вертикальное масштабирование;
  • Горизонтальное масштабирование;
  • Отложенные вычисления;
  • Асинхронная обработка;
  • Конвейерная обработка;
  • Использование толстого клиента;
  • Кеширование;
  • Функциональное разделение;
  • Шардинг;
  • Виртуальные шарды;
  • Центральный диспетчер;
  • Репликация;
  • Партиционирование;
  • Кластеризация;
  • Денормализация;
  • Введение избыточности;
  • Нереляционные СУБД;
  • Параллельное выполнение и многое другое...
А затем научимся эти паттерны правильно применять в пошаговом алгоритме проектирования высоконагруженной системы:
  1. Опишем бизнес-логику будущей системы, включая потенциальные пути развития;
  2. Подсчитаем объёмы хранимых данных и скорость их приращения. Выбираем критический путь — хранение, запись или чтение данных?
  3. Определим допустимую деградацию системы;
  4. Построим схему движения данных и примем решение, какие из особенностей проектируемой системы мы будем использовать;
  5. Проектируем систему :)
  6. Ищем и устраняем узкие места.
А потом примеры, примеры
и ещё раз примеры!