我是一个MMO游戏的开发者,目前我们在我的公司面临一些可伸缩性问题,我认为,这些问题可以通过适当的游戏世界聚类来解决.
我真的不想重新发明轮子,这就是为什么我认为Linux Virtual Server可能是一个不错的选择,特别是使用一些7级负载平衡技术.
我目前正在将ktcpvs视为负载平衡解决方案,并想知道它是否是一个合适的选择.
主要思想是在专用服务器上运行多个区域(就我的游戏而言"位置").当玩家决定前往某个特定位置时,负载均衡器会决定哪个区域服务器将实际为玩家提供服务(这实际上是我需要7级负载均衡器的原因)
你们对上述所有人都有什么看法?
更新:我向LVS用户发送了相同的问题邮件列表http://marc.info/?l=linux-virtual-server&m=124976265209769&w=2
更新:我也在gamedev.net论坛http://www.gamedev.net/community/forums/topic.asp?topic_id=544386上开始了类似的话题
为了解决您的问题,我们需要了解您是否需要音量或响应,但很难同时获得两者.
第7层负载均衡 - 基于数据的应用程序级别平衡,因此需要将网络数据包的数据内容路由到端点.您可以通过在应用程序级别,服务级别或内核级别实现路由来实现卷(更多用户).
可伸缩性 - 我假设您的内存,CPU资源和网络带宽不足.
应用程序级别 - 您的应用程序逻辑接收应用程序包并相应地路由
服务级别 - 您的系统框架(某种类型的前端服务)接收数据包并通过模块执行路由(考虑自定义apache模块,甚至是网络驱动程序模块 - 比如编写网络过滤器)
内核级别 - 在网络数据包级别执行路由.
你越接近金属,你的反应就越好.我建议使用专用的linux服务器预先执行路由 - 去本机,而不是虚拟.为WAN使用多个或组合网络适配器,为每个端点使用专用适配器(一个+ wan,每个连接的应用服务器各一个)
如果响应时间很重要,那么您需要一个内核/管理员状态解决方案,它将为您节省一些上下文切换,但要注意您需要不惜一切代价限制跳数,并且可以更好地由更少,更大的机器提供服务,并且您的可扩展性将始终如一有限.使用KTCPVS存在风险,它很老,没有主动更新.如果您判断它对您有用,那么只要它在系统状态下运行,就可以考虑写一些类似于网络过滤器的东西.
如果卷很重要但响应时间是次要的,请实现在问题/用户状态下运行的C++内置的自定义构建的高速套接字交换机.它是最容易维护的,并且将提供最佳的可扩展性.
您需要构建一些原型来确定最适合您需求的原型.
最后的想法 -
在执行上述任何操作之前,请先确保您已优化游戏设计.你可能知道大部分内容,我在这里列出它是为了所有人的利益.
(a)消息应舒适地放在一个网络数据包中,对于大多数家用路由器来说,小于1500字节
(b)尝试在您的游戏客户端而不是服务器中使用路由逻辑.只需将一个带有区域和IP地址的小表下载到客户端,就可以放弃以上所有内容.
(c)尝试将区域可见性限制为客户,他们应该只知道他们的区域和相邻区域(如果您实施上面的点b)
希望这会有所帮助,抱歉,对于KTCPVS,我不能更具体.