Это похоже на эволюцию человечества. Изначально была установка одного сервера. По мере того, как система становилась сложной, возникла необходимость в настройке нескольких серверов.
Давайте углубимся в основные концепции системного проектирования.
База данных
- Реляционная база данных [хранится в таблицах и строках]
- Нереляционная база данных [хранилища ключевых значений, хранилища графов, хранилища столбцов, хранилища документов.
Репликация базы данных
Использует модель Master Slave:
- Основная база данных для операций записи
- Ведомая база данных для операций чтения
Масштабирование по вертикали и масштабирование по горизонтали
- Вертикальное масштабирование — увеличение масштаба — добавление процессора, оперативной памяти.
- Горизонтальное масштабирование — масштабирование — добавление дополнительных серверов — желательно для крупномасштабных приложений.
- Горизонтальное масштабирование также известно как сегментирование.
- Разбиение разделяет большие базы данных на более мелкие, что упрощает управление частями, называемыми сегментами.
- Повторное разбиение данных – когда в одном сегменте большие данные, а в другом – небольшие данные, решается с помощью согласованного хэширования.
- Задача о знаменитостях – hключевая проблема otspot – выделить каждый фрагмент для каждой знаменитости.
Балансировщик нагрузки
- Распределяет трафик между серверами
Кэш
- Сохраняет в памяти часто используемые файлы.
- Время отклика будет улучшено.
- Используйте, когда данные часто считываются, но редко изменяются.
- Установите некоторую политику истечения срока действия. Не должен быть слишком коротким (данные часто изменяются) или слишком длинным (устаревшие данные).
- Освобождение кэша — LRU, LFU, FIFO
Сеть доставки контента (CDN)
- Географически распределенные серверы, используемые для доставки статического контента.
Архитектура с отслеживанием состояния — запоминает все
- Запоминает данные клиента от одного запроса к другому.
- Запрос клиента будет отправлен на определенные серверы.
Архитектура без сохранения состояния — часто забывают
- Данные о состоянии хранятся в общем хранилище данных.
- Клиентский запрос будет отправлен на любые серверы.
- Поскольку он забывает, он полезен при автомасштабировании (добавляет или удаляет сервер в зависимости от трафика)
Очередь сообщений
Хранится в памяти, поддерживает асинхронную связь. Служит буфером и распределяет асинхронные запросы.
Пример использования: настройка фотографий