Основная идея Горизонтального масштабирования состоит в том, чтобы добавить больше похожих экземпляров в существующую систему, чтобы оправдать ожидания.
Рассмотрим систему, описанную в разделе Вертикальное масштабирование.
Мы собираемся масштабировать ту же систему по горизонтали. Но перед этим давайте разберемся, зачем это нужно?
Вертикальное масштабирование помогло нам масштабировать систему с меньшими усилиями и меньшими затратами.
Но проблема вот в чем,
У нас есть один основной сервер, и мы увеличили его мощность за счетвертикального масштабирования, но если произойдет простой или какой-либо сбой, сервер какое-то время не будет работать, и если сервер не работает, перестает работать вся система.
Итак, Системе нужны дополнительные рабочие руки, которые будут работать, если что-то пойдет не так.
Теперь вернемся к проблеме. Ниже приведены фрагменты кода существующей системы.
Клиент: Код
Сервер: code
Теперь мощность сервера достаточно высока, чтобы обрабатывать максимум 5 тысяч запросов.
Чтобы масштабировать систему по горизонтали,
нам нужно добавить больше серверов, чтобы в случае сбоя другие серверы могли обработать запрос и обработать его. Набор серверовсоздает экосистему серверов или базу серверов.
и фрагмент кода для серверной базы будет выглядеть
Теперь нам нужны какие-то алгоритмы распределения, которые Server Base может использовать для маршрутизации запросов между серверами.
Возможные проектные решения для распределения запросов (аналогично выделению памяти операционной системой)
- Найдите следующий активный сервер. Начиная с сервера 1, найдите активный сервер, который может обслуживать запросы от клиентов. Направьте на него весь запрос, пока он не будет полностью занят. Как только сервер становится занятым, переходите к следующему активному серверу.
Недостаток:
- Время ответа увеличивается, так как серверная база должна найти следующий активный сервер и направить запрос.
- Большую часть времени некоторые серверы остаются бездействующими, поэтому их загрузка не равна 100%.
2. Найдите лучший активный сервер (тот, который наименее занят): Вместо того, чтобы искать следующий активный сервер, нам нужно найти лучший активный сервер и направить запрос на него.
Недостаток:
- Увеличение времени отклика по-прежнему является проблемой, поскольку серверная база должна найти следующий активный сервер и направить запрос.
- Использование системы также увеличивается, но не до 100.
Нам нужно использовать какой-то алгоритм для согласованной маршрутизации запросов между серверами, что уменьшит время отклика и максимизирует использование.
Балансировщик нагрузки используется для таких случаев использования, которые внутренне используют согласованное хеширование.
Мы собираемся рассказать о работе балансировщика нагрузки и последовательного хеширования в следующих блогах. Если у вас есть лучший подход, пожалуйста, прокомментируйте.
Преимущества горизонтального масштабирования:
- Проще запустить отказоустойчивость
- Легко обновить
- Infinite Scale может использовать бесконечное количество экземпляров для обеспечения безграничного роста
Недостатки горизонтального масштабирования:
- Архитектурный проект очень сложен
- Высокие коммунальные расходы, такие как (охлаждение и электроэнергия)
- Увеличенная площадь и влияние на центр обработки данных
- Требуется дополнительное сетевое оборудование, такое как маршрутизаторы и коммутаторы.
Источник кода: