Является ли Membase хорошим уровнем настойчивости для сервера Erlang Gamer?
-
27-10-2019 - |
Вопрос
Я стремлюсь создать игру в браузер, в которой игроки могут создавать здания.
В каждом здании будет несколько модулей (двигатели, офисы, производственные линии, ...). Каждый модуль будет иметь одно или несколько действий, выполняемых, например, создание 2OO 'Item X' с ингредиентами Y, Z.
Сервер игры будет настроен с Erlang: OTP -приложение в качестве самого сервера и азот в качестве веб -фронта. Мне нужна настойчивость данных. Я думал о следующем:
Когда кто -то или что -то взаимодействует со зданием или таймером, представляющим какую -то производственную линию, руководитель не порождает Gen_Server (если еще не появляется), который загружает состояние здания из базы данных, чтобы Gen_Server мог отвечать на сообщения, такие как 'добавить Этот модуль ', «начинает это действие», «хранить это производство на склад», «Die» и т. Д. (
Но когда здание не получает никаких сообщений в течение X секунд или минут, он прекратит (благодаря функции тайм -аута Gen_Server) и отбросит свое текущее состояние обратно в базу данных.
Таким образом, так как это будет (мягкая) игра в реальном времени, Gen_Server должен быть настроен очень быстро. Я думал о Мембазе как о базе данных, потому что, как известно, у нее очень хорошее время отклика.
Мой вопрос: Когда сервер Gen встает на работу, его состояния заполняют некоторую память, и это состояние присутствует в памяти, обрабатывающей Membase, поэтому состояние в два раза использует его размер в памяти. Это плохой дизайн?
Является ли Membase хорошим решением для устойчивости в моем случае? Будет ли использовать Mnesia лучшим выбором или что -то еще?
Я боюсь Mnesia 2 Go (или 4?) Предел размера таблицы, потому что в настоящее время я не знаю, как средний размер состояния моего Gen_Servers (здания в этом примере, игроки Butalso, производственные линии, что угодно), и я мог бы когда -нибудь больше, чем 1 игрок :)
Спасибо
Решение
Я согласен с Hynek -Pich -vychodil. Riak-отличная вещь для хранения Key-Valey.
Мы используем Riak почти на 95% для того же, что вы описали. Все работает до сих пор без каких -либо проблем. В случае, если вы достигнете ограничения производительности Riak - добавьте больше узлов, и это хорошо!
Еще одна классная вещь о Riak - это очень низкое снижение производительности за время. Вы можете найти больше информации о сравнительном анализе Riak здесь: http://joyeuur.com/2010/10/31/riak-smartmachine-benchmark-the-technical-details/
Если вы пойдете с этим:
- водитель: https://github.com/basho/riak-erlang-client
- Пул соединений, который вам может понадобиться с ним: https://github.com/dweldon/riakpool
Об использовании мембазы и памяти: я также попробовал Membase, но я обнаружил, что она не подходит для моих задач - (Membase объявляет о достойке разлома, но я не мог установить ее так, как это должно работать с недостатками, даже с помощью парней из мембазы Я не преуспел). Таким образом, на данный момент я использую следующую архитектуру: все игроки, которые находятся в Интернете и играют в игру, представлены в качестве игроков (Gen_Server). Все данные данных и бизнес-логика для каждого игрока находятся в процессе игрока. Время от времени каждый игрок-процесс желает спасти свое состояние в Риаке.
Пока кажется, очень быстрый и эффективный подход.
Обновление: теперь мы с PostgreSQL. Это превосходно!