Это похоже на эволюцию человечества. Изначально была установка одного сервера. По мере того, как система становилась сложной, возникла необходимость в настройке нескольких серверов.

Давайте углубимся в основные концепции системного проектирования.

База данных

  1. Реляционная база данных [хранится в таблицах и строках]
  2. Нереляционная база данных [хранилища ключевых значений, хранилища графов, хранилища столбцов, хранилища документов.

Репликация базы данных

Использует модель Master Slave:

  • Основная база данных для операций записи
  • Ведомая база данных для операций чтения

Масштабирование по вертикали и масштабирование по горизонтали

  • Вертикальное масштабирование — увеличение масштаба — добавление процессора, оперативной памяти.
  • Горизонтальное масштабирование — масштабирование — добавление дополнительных серверов — желательно для крупномасштабных приложений.
  • Горизонтальное масштабирование также известно как сегментирование.
  • Разбиение разделяет большие базы данных на более мелкие, что упрощает управление частями, называемыми сегментами.
  • Повторное разбиение данных – когда в одном сегменте большие данные, а в другом – небольшие данные, решается с помощью согласованного хэширования.
  • Задача о знаменитостях – hключевая проблема otspot – выделить каждый фрагмент для каждой знаменитости.

Балансировщик нагрузки

  • Распределяет трафик между серверами

Кэш

  • Сохраняет в памяти часто используемые файлы.
  • Время отклика будет улучшено.
  • Используйте, когда данные часто считываются, но редко изменяются.
  • Установите некоторую политику истечения срока действия. Не должен быть слишком коротким (данные часто изменяются) или слишком длинным (устаревшие данные).
  • Освобождение кэша — LRU, LFU, FIFO

Сеть доставки контента (CDN)

  • Географически распределенные серверы, используемые для доставки статического контента.

Архитектура с отслеживанием состояния — запоминает все

  • Запоминает данные клиента от одного запроса к другому.
  • Запрос клиента будет отправлен на определенные серверы.

Архитектура без сохранения состояния — часто забывают

  • Данные о состоянии хранятся в общем хранилище данных.
  • Клиентский запрос будет отправлен на любые серверы.
  • Поскольку он забывает, он полезен при автомасштабировании (добавляет или удаляет сервер в зависимости от трафика)

Очередь сообщений

Хранится в памяти, поддерживает асинхронную связь. Служит буфером и распределяет асинхронные запросы.

Пример использования: настройка фотографий