微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 大型游戏网站的可扩展性建议

我正在建立一个网站,玩家可以在这里玩虚拟积分的回合制游戏(如扑克网站,但不同).我提出的设置:

>一个数据服务器,包含所有具有关联数据的玩家帐户(数据库服务).如果有帮助,数据库和API可以分成两个服务器.
>一个或多个为网站服务的网络服务器,在需要时连接到数据服务器.
>一个大厅服务器,玩家可以找到彼此并设置游戏(多个可能,但用户友好性较差)
>运行游戏的多个游戏服务器(所有规则都在服务器上,客户端只是一个远程控制和查看器),带有一个负载均衡器.
>游戏客户端

客户端将使用Flash制作,网络服务器将使用PHP.其余的都是Java.

通讯

>播放器登录网站. Web服务器将用户名/密码发送到数据服务器,从而创建会话密钥(如cookie)
>玩家启动客户端.客户端连接到大厅服务器,传递会话密钥.大厅服务器使用数据服务器检查此密钥
>一旦创建了大厅并且必须开始游戏,大厅服务器从负载平衡器获取游戏服务器并在该游戏服务器上设置游戏.
>大厅服务器告诉客户连接到游戏服务器并播放游戏.
>游戏结束后,游戏服务器会让大厅服务器知道.大厅服务器将检查分数并更新数据服务器中的信用.

协议:

> Java to Java:RMI
> PHP或Flash to Java:通过套接自定义二进制协议.此协议支持在空闲时关闭套接字,同时保持虚拟连接的活动和可恢复性.

如果客户有他的意愿,该网站将需要支持数以千计的并发玩家.有了这些信息,你能看到我设置中的任何瓶颈吗?我个人有点担心只存在一个数据服务器,但我不确定如何分解它.其他可扩展性(或其他)评论也是受欢迎的.

解决方法:

您的体系结构具有许多单一服务,这些服务对于任何用户的系统任何部分都至关重要.我认为这些SPOFs.

>您可能需要考虑数据服务器的sharding(或水平分区).
>考虑多个大厅服务器.如果您愿意,Flash客户端仍然可以将它们伪装成单个大厅.就个人而言,我不喜欢和我不懂的任何语言的人交游戏.此外,我不喜欢加入大堂服务器找到n千游戏而不认识任何人.让多个大厅成为一个特征(当你把思想放入其中时,你真的可以).拥有10000人的大堂没有真正的用途.如果您仍然想要使用它,您仍然可以尝试分区,基于玩家过滤特定参数(对手级别,游戏类型等)的假设,尝试沿一个或甚至多个标准分割大厅.
>我认为负载均衡器实际上并不需要足够的电力来成为物理服务器.为什么不在所有大厅服务器上复制它?它必须知道的是可用性/服务器.假设你有10000个游戏服务器(在这种情况下我认为这是一个完整的他妈的很多),刷新率为1秒(这里远远不够),你同步的每秒10000个整数(让我们假设你可以将可用性表示为数字(我想你可以)).如果你找出比将每个游戏服务器连接到每个大厅服务器更好的东西,这甚至不需要在一台机器上有太多的连接.

在这种类型的应用程序中,我认为水平分区是一个好主意,因为对于一个应用程序,它可以轻松完成并为系统增加可靠性.假设您的SPOF是分区的,而不是冗余的.这更容易,也可能更便宜.如果SPOF的一部分出现故障(假设您的20个独立和物理分布式数据服务器中有1个),这很糟糕,因为5%的玩家被锁定了.但可能很快就会起床.如果您的SPOF是多余的,那么任何失败的可能性都会降低.但如果确实如此,那么每个人都会被锁定.这是一个问题,因为你会让所有人同时尝试重新上线.一旦你的SPOF回来了,它会受到一些高于它通常要处理的请求数量级的命中.并且您仍然可以同时使用水平分区和冗余,如平衡服务所建议的那样.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐