@chipstore

Как организовать масштабирование/отказоустойчивость интернет-магазина?

Имеется интернет-магазин с посещаемостью ~350к посетителей в месяц, крутится на VDS (Intel Xeon 2,4 х 6 ядер, 8 Гб Оперативы, SSD диск, debian 9 OVZ), стек стандартный nginx/php7.4/mysql, движок уже не актуальный, большей частью переписанный, но в общем все успешно работает... Заказы сливаются в 1С, остатки по товарам из нее загружаются.
Бывает случаются проблемы, да еще и в не удобное время, различного характера: то у хостера родительский сервер упадет, то nginx отвалится, то в php количество активных процессов границы достигнет (на ожидании внешних ресурсов повисли).
Хотелось бы увеличить стабильность работы в целом и с заделом на будущий рост нагрузки. Вопрос в следующем, какие есть пути достижения цели (концептуально)? Увеличение затрат не проблема, но и многократного роста затрат не хочется... И важно чтоб было приемлемо по количеству телодвижений для реализации (менять движок, глобально переписывать обмены и т.п. не хочется).
Поменять хостера? Взять второй VDS у другого и поставить в параллель? Как лучше и какие еще варианты?)
  • Вопрос задан
  • 176 просмотров
Пригласить эксперта
Ответы на вопрос 4
smilingcheater
@smilingcheater
Если без значительного переписывания кода:
Вынести БД на отдельный сервер. При росте нагрузки - добавлять сервера и настраивать репликацию между ними.
Сделать отдельный балансировщик - сервер, на который приходят запросы, и который раскидывает их на разные сервера, выполняющие код. При увеличении нагрузки - увеличивать число нод, выполняющих код. Если одна из нод по какой-то причине перестаёт отвечать - остальные продолжают работать.
Если у вас сессии хранятся в файлах - придётся переносить их хранение в базу/Redis/...
Ответ написан
trapwalker
@trapwalker
Программист, энтузиаст
smilingcheater всё правильно написал. Дабвлю лишь, что нужно анализировать бутылочные горлышки и исправлять узкие места в первую очередь.
Разбирайтесь с проблемами детально. Что значит "nginx твалится"? Годами работает и ничего с ним не происходит. Выясняйте что произошло, если такое поторяется, то нужно разбираться, а не надеяться, что кто-то даст универасльный простой, но концептуальный совет, который победит все возможные проблемы наперед.
Правила тут простые: находим узкое место и расширяем его пока общая производительность в часы пик не будет удовлетворительной.
Надальте сохранение логов, протоколируйте нагрузки, помониторьте базу. Если проблема извне, то попробуйте подобрать хостинг понадёжнее, сменить OVZ на KVM, разнести БД и бэк на разные инстансы, прикрутите балансировщик,
Если где-то скорость не принципиальна и можно что-то отложить, добавляйте очередь.
Ответ написан
@neol
то у хостера родительский сервер упадет

Насколько часто это происходит? В принципе падают все, тут важнее как быстро реагирует поддержка и восстанавливается работа.

то nginx отвалится

Соглашусь с Сергей Паньков: nginx просто так не отваливается.

то в php количество активных процессов границы достигнет (на ожидании внешних ресурсов повисли).

Если вынести обращения к внешним ресурсам в фон невозможно, то создать отдельный пул php-fpm(возможно несколько: для каждого сервиса свой), который будет отвечать только за обращение к этим внешним ресурсам. Даже если внешний сервис упадёт, то у вас отвалятся только обращения к нему, а сайт продолжит работать.
Ответ написан
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
Для того, чтобы взять второй VPS, понадобится третий - для балансировки нагрузки\подключений между двумя. Он тоже может быть недоступен

Я бы посоветовал рассмотреть вариант облачных сервисов. Не VPS\VDS, а именно сервисов, которые могут сами следить за отказуйсточивостью и масштабированием, например https://docs.microsoft.com/en-us/azure/app-service...

Либо или полный перезд виртуальных машин в облако типа янжекса с использованием их балансера, или хотя бы использование их балансера https://cloud.yandex.ru/services/network-load-balancer либо другого аналогичного сервиса
Ответ написан
Ваш ответ на вопрос

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

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