@Nexuus

Горизонтальное масштабирование. С чего начать?

Добрый день.
Работаю над одним проектом на PHP. Это монолит. Все крутится на одном сервере: Intel Core i7, 32 Гб RAM, 500 Гб SSD. В принципе все хорошо и нагрузку пока держит. Но хожу немного забежать вперед и понять, как правильно масштабироваться.
В проекте используются такие технологии: PHP Yii2, есть memcached, сессии хранятся в redis, также используются очереди, которые работают также через redis.
Первое что приходит в голову - это вынести БД на отдельный сервер. Потом ставить балансировщик и распределять на несколько серверов входящие запросы. Что делать с memcached и redis, их тоже на отдельный сервер выносить?
Вот тут хочется понять, как правильно подбирать сервера для этих задач? Как посчитать, какой нужен процессор, память и т.д. Хочется сделать надежную систему и в то же время не разбрасываться ресурсами, т.к. бюджет очень ограничен.
Заранее спасибо за ответы!
  • Вопрос задан
  • 189 просмотров
Пригласить эксперта
Ответы на вопрос 3
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Начать надо с замеров. Собрать профиль выполнения, посмотреть на самые горячие места, оценить возможно ли эти места как-то распараллелить, если да, то как, и какие издержки могут возникнуть. От ответов на эти вопросы зависит всё остальное.
Ответ написан
Комментировать
Sanes
@Sanes
Если большая нагрузка на БД, то можно сделать репликацию.
Ваше приложение должно поддерживать несколько БД с разделением на операции.
Вот с него и можете начать.
Ответ написан
@rPman
Все вышеописанное отлично поможет вам с горизонтальным масштабированием... но почти наверняка, к сожалению, линейно, т.е. увеличилась нагрузка в 2 раза - удваивайте количество серверов.

---------- не воспринимайте как наезд ---------------
дальше нижеописанное можно сказать одним словом - переписывайте ;)

В первую очередь я бы избавился от корневых проблем, которые почти наверняка у вас сидят из-за основы Yii - http rest технология (кстати не факт) и построение представления на сервере.

Если вы начнете переносить все связанное с отображением и построением внешнего вида на клиент, вы почти наверняка поднимите скорость на порядок, отложив необходимость масштабирования на большой срок, но тогда непонятно, зачем вам Yii :) т.е. вместо разработки приложения на сервере на php вам лучше писать все связанное с интерфейсом пользователя на javascript, а сервер пусть обрабатывает логику и держит базу данных. Т.е. выносите view наружу (фактически ваши view превратятся в просто поток данных в виде json а ui переносите на client js).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы