我目前正在开发一款类似于二十一点的在线纸牌游戏,它将由一系列桌子组成,每张桌子都有一个“经销商”和多个人类玩家。庄家(计算机机器人)负责发牌和洗牌。这些表将存储在 PostgreSQL 数据库表中,并且人类管理员可以添加/删除/编辑表。
游戏将包含一个 Web 前端和一个 REST/websocket API 后端。我可能会使用 Kubernetes 和 Nginx 作为后端服务器的负载均衡器。
到我的问题上。假设我有一个服务器,我可以简单地让它从数据库中读取表列表并为每个表启动一个经销商进程/线程。但是,如果我有 2 台或更多服务器,事情就会变得更加混乱。
如何确保在所有服务器上以平衡的方式分配表(例如,如果有 10 个表和 3 个服务器,则分布应大致为 3-3-4)?
如何确保如果服务器出现故障,其表会重新分配给实时服务器?
我如何确保当新服务器上线时,一些现有的表被重新分配给它,以减少其他服务器的工作量?