У меня есть игра, в которой пользователи обращаются к серверу, чтобы найти пользователя своего уровня, который хочет играть в игру. Вот основная архитектура игрового запроса.Match Making using GAE + ndb
Я использую ndb
для хранения очереди ожидания для каждого уровня пользователя в Google DataStore.
Я обращаюсь к этим очередям по их ключам, чтобы обеспечить прочную согласованность (за this article). Объекты хранятся в очереди с использованием повторного (списка) LocalStructuredProperty.
Вопросы:
- Объект удаляется из очереди ожидания, потому что она соответствует к запросу. Сделка совершена, но пока не применяется. Тот же объект сопоставляется с другим запросом и удаляется. Это будет ошибка?
- Эти строго согласованные обращения ограничены ~ 1 записью/сек. Есть ли лучшая архитектура, которая устранит это ограничение?
Одна вещь, которую я рассмотрел для последнего вопроса, состоит в том, чтобы поддерживать несколько очередей (число которых растет и сокращается со спросом).
Да, надеялся, кто знал теорию :). Был обеспокоен тем, что [memcache становится недоступным] (https://cloud.google.com/appengine/articles/scaling/memcache#what). Любая идея, как часто это происходит? – Alex
Я не знаю, как часто отбрасывается memcache, я понимаю, что это зависит от общей нагрузки/спроса на memcache (включая других пользователей). Вы можете это сделать, написав как NDB, так и memcache. Если ваша очередь не имеет никаких предков в ключе, вы не должны ограничиваться одним ограничением записи/сек, она применима только к родительским ключам. –