Tel*_*kis 11 scalability node.js docker docker-swarm
我目前正在开发基于网络的MMORPG游戏,并希望设置基于Docker和DigitalOcean水滴的自动缩放策略.
但是,我想知道如何才能做到这一点:
我的游戏服务器必须可以跨不同的Docker容器进行拆分但是每个游戏服务器实例应该就好像它只是一个巨大的游戏服务器.这意味着在一个(角色移动)中发生的每个修改也应该在每个其他游戏服务器中进行镜像.
我试图让它工作(至少在概念上),但无法找到一种方法来正确同步我的所有实例.我应该只使用主设备广播活动还是有替代方案?
我想知道我的MySQL数据库是一样的:因为每个游戏服务器都必须从/向数据库读取/写入,当游戏变得越来越大时,我将如何使其正确扩展?我能想到的最好的解决方案是将数据库保存在一台非常强大的服务器上.
据我所知,如果所有游戏服务器都不必"共享"他们的状态,这可能很容易,但这主要是因为我可以在活动突然激增的情况下快速扩展.
(将有不同的"全球"游戏服务器,如A,B,C ......但是这些全球游戏服务器中的每一个都应该在幕后由运行"真实"游戏服务器的1-X docker容器组成,以便"全球"游戏服务器只是一个概念)
你说的问题太笼统了,很难给出具体的回应.但是,让我肆无忌惮,给你一些通用的扩展建议:
从数据库中删除计数器 而是自动递增ID的主键,尝试分配随机UUID.
更改必须通过自包含数据对中心点进行验证的数据.例如,对于身份验证,使用可由任何主机验证的JSON Web令牌,而不是在DB中使用用户凭据.
使用诸如Consistent Hashing之类的技术来平衡负载而无需负载平衡器.当然,使用散列函数可以很好地分配,以避免/最小化冲突.
上述建议主要是关于将设计从有状态迁移到无状态的方式,尽可能多的方面.如果您无论如何需要提供有状态部分,请尝试猜测哪些实体将有更多机会共享有状态数据并将它们分配到同一个(或接近服务器).例如,如果您的游戏中有城市,请尝试在同一服务器中分配同一城市中的用户,因为他们更愿意在这些城市之间进行交互(并共享有状态数据),而不是在不同城市中的用户.
当然,如果城市太大而且非常拥挤,您可能需要在更多服务器中对城市进行分区以避免服务器过载.
| 归档时间: |
|
| 查看次数: |
998 次 |
| 最近记录: |