Один или несколько серверов для бэкенда, фронтенда и базы данных?
Всем привет!
Возник такой вопрос: разрабатываю сайт, у которого бэкенд написан на Django, фронтенд - на React, а в качестве базы данных используется PostgreSQL, подскажите, пожалуйста, насколько целесообразно бэкенд, фронтенд и бд распределить на разных машинах? Или лучше все разместить на одной машине, но +/- мощной? Как в таких ситуациях чаще всего поступают и на что лучше ориентироваться? К сожалению, так как проект новый, не могу оценить возможную нагрузку и дать вам ее в качестве "входных данных", но очень хотелось послушать советы более опытных коллег.
АртемЪ спасибо большое за ответ! Пока есть такая мысль: арендовать самый дешевый сервер, если увижу, что не вытягивает, то сменить тариф и менять до тех пор, пока арендовать 2-3 сервера не станет дешевле. Что думаете?
Ну хотя бы примерные нагрузочные тесты есть?
Заценить сколько вы ожидаете пользователей, какая будет нагрузка, запустить на минимальном оборудовании, посмотреть на сколько процентов оно занято. От этого и смотреть что лучше - на одном, или уже не вытягивает и надо разносить.
При запуске сайта, в среднем достаточно очень небольших ресурсов, и даже в пределах одного провайдера можно просто менять тариф, добавляя CPU и RAM до определенного предела.
Если же ожидается взрывной рост пользователей, то идеале написать так, чтобы в недалеком будущем было несложно разнести на разные машины, а желательно вообще архитектуру спланировать под горизонтальный рост.
Но это такое. Если будет прям настолько взрывной рост, то и деньги должны пойти рекой, а там может быть проще и выгоднее будет взять еще пару людей и с нуля переписать уже под новые требования.
Saboteur спасибо большое за ценный совет! Да, пока думаю примериться на минимальном оборудовании, потом в случае чего улучшать тариф до того момента, когда разнести на несколько машин не станет выгоднее. А так, уже сейчас бэкенд, фронт и бд разношу в разные Docker-контейнеры, чтобы быстро можно было разделить на другие машины.
Ориентироваться, конечно, на нагрузку.
Раз это Django и React, то это веб приложение.
Фронт - это браузер конечного пользователя на компьютере пользователя.
Бэкэнд и БД можно для начала разместить на одном сервере. Если не будет справляться - разнесете.
Если вам несложно - закидывайте сразу всё, кроме базы данных, в контейнеры. Тогда в будущем отмасштабировать/разделить это будет просто технически (ну разумеется тут надо еще и в коде приложения учесть масштабируемость, но это как раз учтете уже если проект взлетит, вкладываться в это сразу нецелесообразно).
Django, React, PostgreSQL = веб приложение.
В этой сфере давно все норм паралелится, как уже отвечали выше - изначально писать с закосом на расширение, ставить на мимнимум и мастштабировать по необходимости.
тотже PostgreSQL при минимальных нагрузках лучше держать локально для ускорения работы, при увеличении нагрузки - выпихнуть на соседний сервак или в кластер (главно в коде это норм прописать в виде глобальных констант, а не в каждом конекшене и запросе писать localhost/localdb)
фронт/бэк при необходимости теми же балансировщиками параллелится