我为一个小众游戏运行一个小型游戏服务器托管业务,我租用专用服务器来降低成本,每个服务器都运行许多游戏服务器实例。游戏服务器可以在任何时候创建和删除,我需要决定游戏服务器在创建时安装在哪台机器上。创建服务器后,如果管理员愿意,可以将其传输到另一台计算机。
我正在改进后端,我主要关心的是将游戏服务器分配给机器。我目前使用的是一种天真的算法:
我给每台机器分配了一个权重,大致与CPU/RAM的数量成正比。
为了大致近似每个游戏服务器使用的资源,我根据可能在该服务器上玩的玩家的最大数量为每个游戏服务器分配一个权重。
每当有人创建一个游戏服务器,或者请求将他们现有的游戏服务器转移到另一台机器时,我将为每台机器计算以下内容:
(游戏服务器在机器上的权重之和)/(机器的重量)
我把游戏服务器分配给结果最低的机器。
我主要关心的是计算每个游戏服务器的权重。有许多不同的因素决定了资源的使用,比如当前在线播放器的数量、安装的mods、服务器设置等等。因此,我认为不可能根据服务器属性来精确地分配权重,即使与我目前使用的最大玩家数相比,我制定了一个更复杂的公式。
我认为,使用某种形式的负载平衡软件或使用自定义的解决方案,根据资源使用情况的经验数据分配服务器会更有效。但我不知道如何做到这一点,我也意识到,可能有完全不同的方法,我还没有考虑,所以任何提示都会非常感谢!
发布于 2018-09-29 12:24:57
您可以在一个节点上标准化,获取固定数量的不同大小的游戏,并多次克隆该节点。但是,只有在您的使用模式相对恒定的情况下,这才有效。
基于利用的集群软件的存在。用于非隔离应用程序、容器实例或完整VM。您没有提到容器或其他任何东西,所以我假设它们没有在使用。您还没有提到操作系统平台,所以假设Linux。
举个例子,心脏起搏器集群,如在RHEL。这样的集群中的资源可以有定义资源利用。因此,您的大服务器和小型服务器有不同的CPU和内存需求,并被适当地放置。作为奖励,您可以从节点故障中恢复,并将资源迁移到另一个节点。在负幻灯片上,HA集群很难构建,需要进行测试以确保它们做正确的事情。
如果您有一个要部署的容器,Kubernetes可以在集群中管理它。同样,要获得这些特性也需要相当大的复杂性。
您可以重新考虑裸金属节点方法,并为每个服务器提供自己的VM。系统管理程序可以由您运行,也可以由云提供商运行。在这两种情况下,都可以找到不同大小的vCPU和vRAM计数的最佳值。节点上的位置要么是为您在云中完成的,要么是使用像VMware DRS这样的产品,或者是手动的。
https://serverfault.com/questions/933177
复制相似问题