2016-11-29 7 views
0

Я решил использовать докер с node-js и mongoDB для создания игры и установить все разделы моей игры (битвы, чаты, ресурсы и т. Д.) На разные серверы, чтобы каждый раздел имел свои собственный процесс, потому что, например, мой сервер ресурсов будет работать много, поскольку он будет выполнять все вычисления ресурсов каждого пользователя каждую секунду и будет обрабатывать запросы с других серверов, например, если у пользователя достаточно ресурсов для построения здания или как много ресурсов игрок проиграет, если атакует и т. д.mongoDB несколько экземпляров или несколько баз данных

Для моих альфа-и бета-версий я планирую запустить один сервер, который будет запускать все разделы моей игры, но так, как я делаю это сейчас, каждый раздел имеет свой собственный экземпляр mongodb, поэтому у меня есть ресурсыDB, mainDB (информация для пользователей, информация для входа и), все экземпляры не будут иметь много коллекций, например resourcesDB имеет только 2 коллекции, коллекции ресурсов, каждый из которых будет иметь 1 документ с материалами, связанными с ресурсами, и коллекцию журналов, которая будет хранить все использование пользователя (обновления зданий, битвы потеряны и т. д.)

Я читал о нескольких экземплярах на тех же серверах, и все они говорили, что это не лучший способ сделать это, так как это повлияет на мою производительность, в будущем я планирую отделить все мои разделы на разных серверах, чтобы каждый раздел имел собственный сервер и сервер БД, если это необходимо.

  1. Должен ли я построить 1 экземпляр и разделить его на уровне базы данных? это означает, что мне нужно будет подключиться к одному экземпляру с нескольких серверов, сервер ресурсов будет обновлять все ресурсы пользователя каждый раз, объединить это с боевым сервером, который будет обновлять состояние войск в БД и больше для каждой войны, которая идет на, у меня также будет база данных чата, которая будет обновляться с каждым частным сообщением или сообщением чата, вызовет ли это какие-либо проблемы? или это вызовет проблемы только в том случае, если я подключусь к одной базе данных и разделим ее на уровне коллекций?

  2. Есть ли причина, по которой я не должен продолжать создавать несколько экземпляров? я читал, что может возникнуть проблема с конфигурационными файлами, если вы используете несколько экземпляров на одном сервере, но я предполагаю, что это часть дескриптора.

UPDATE - я нашел отличный ответ здесь: https://dba.stackexchange.com/questions/156811/mongodb-in-micro-services-structure/156984#156984

ответ

2

Использование microservice архитектуры для вашего приложения является хорошей идеей, но я не вижу хороший повод для разделения базы данных. MongoDB может справиться с этим для вас (Sharding). Также MongoDB не блокирует запись в коллекцию A, когда вы пишете в коллекцию B. Если вы отделите свое приложение от нескольких баз данных, будет сложно сделать резервные копии и поддерживать приложение.

Вы можете прочитать здесь о параметрах параллелизма для MongoDB и посмотреть, как MongoDB обрабатывает блокировку уровня сбора. https://docs.mongodb.com/manual/faq/concurrency/

Смежные вопросы