Я работаю над API Node + MongoDB, и API развернут на виртуальной машине на платформе Google Cloud. В настоящее время данные хранятся в экземпляре MongoDB, работающем на виртуальной машине.
Является ли запуск локального экземпляра MongoDB для производства хорошей практикой? И как различные облачные сервисы, предоставляющие MongoDB, соотносятся друг с другом? И каковы некоторые хорошие практики для обеспечения масштабируемости API? Также может ли развертывание API в Kubernetes в качестве контейнера дать лучшие результаты по сравнению с виртуальными машинами?
Наличие и сервера, и базы данных, работающих в одном экземпляре виртуальной машины, всегда будет плохой идеей для службы, которую вы хотите масштабировать. Давайте подумаем, что произойдет, если ваш экземпляр больше не сможет обрабатывать количество отправляемого трафика?
Сначала вы можете просто выполнить вертикальное масштабирование, добавив больше ЦП и ОЗУ к текущему запущенному экземпляру, и да, это будет нормально в течение некоторого периода времени. Но на самом деле это больше похоже на временный план продления жизни, поскольку в какой-то момент ваш экземпляр больше не сможет выполнять вертикальное масштабирование. А вот и горизонтальная шкала...
Необходимо создать новый экземпляр, чтобы справиться с растущим объемом трафика, и как бы вы спроектировали новый экземпляр для этого?
Лучше всего иметь экземпляр, который выглядит точно так же, как первый. Поэтому сервер необходимо проектировать как лица без гражданства. В этом случае ваш экземпляр сможет масштабироваться на любое количество машин.
Вот почему вы не должны запускать интерфейс API и базу данных в одном и том же экземпляре. Его нельзя было масштабировать.
Так как насчет базы данных? Это довольно просто. Просто поместите его в другой экземпляр виртуальной машины! Если база данных все еще может обработать запрос, вы можете просто разделить сервер базы данных между экземплярами сервера. Но если есть узкое место на стороне базы данных, вы можете масштабировать свою mongoDB отдельно с помощью кластера или около того.
Если у вас нет времени, вы можете рассмотреть возможность использования готового к использованию сервиса, такого как надстройка Heroku, например, монголаб, для управления экземпляром MongoDB за вас.
Ваше здоровье.
Спасибо за ответ
Одна из возможных идей — использовать одну из собственных баз данных Google для хранения данных. Эти базы данных, такие как Google Datastore — cloud.google.com/хранилище данных — предоставляют управляемые базы данных как услугу. Вам нечем управлять, и масштабирование просто встроено.