首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何平衡地在服务器之间分配(纸牌游戏表)经销商?

如何平衡地在服务器之间分配(纸牌游戏表)经销商?
EN

Stack Overflow用户
提问于 2019-08-10 02:47:03
回答 1查看 77关注 0票数 0

我目前正在开发一个类似于blackjack的在线纸牌游戏,它将由一系列的组成,其中每个表都有一个“经销商”和多个人玩家。经销商(计算机机器人)负责牌的交易和洗牌。将存储在PostgreSQL数据库表中,人工管理员可以添加/删除/编辑表。

游戏将由一个网络前端和一个REST/websocket后端组成。我可能会使用Kubernetes和Nginx作为后端服务器的负载均衡器。

回答我的问题。假设我只有一台服务器,我可以让它从数据库中读取表列表,然后在每个表中启动一个交易商进程/线程。然而,如果我有两个或更多的服务器,事情就会变得更加混乱。

如何确保在所有服务器之间以平衡的方式分配(例如,如果有10个表和3个服务器,则分布应该大约为3-3-4)。

如果服务器发生故障,如何确保将其重新分配到活动服务器?

如何确保在新服务器上线时,重新分配一些现有的表(),以减少其他服务器的工作量?

EN

回答 1

Stack Overflow用户

发布于 2019-11-27 18:14:44

我假设每个状态更改都通过websockets转发给玩家,并存储到数据库中以保持持久性(仅用于故障恢复和一些统计)。因此,如果由于某种原因,server1停止工作,而nginx开始将table1的客户端连接到server2,那么它(Server2)在获取游戏状态方面就不会有问题,而server1在失败之前就提供了服务。

您可以使用URI或参数的散列将与同一表相关的所有请求转发到特定服务器。

当nginx看到该服务器脱机时,它将停止使用它作为池成员,并以一致的方式将所有请求迁移到另一台服务器。

当然,当新服务器上线时,现有表将不会在游戏期间重新分配到新服务器(因为您需要保持websocket连接处于工作状态)。

但是,当游戏结束时,您可以告诉客户端(通过现有的websocket连接)重新打开新的websocket连接,稍微修改URL,从而迫使nginx重新平衡服务器之间的连接。

代码语言:javascript
复制
upstream backend {
    hash $request_uri consistent;
#    hash $arg_table consistent;
    server bj-1.card-games.com max_fails=2 fail_timeout=2s;
    server bj-2.card-games.com max_fails=2 fail_timeout=2s;
    server bj-3.card-games.com max_fails=2 fail_timeout=2s;
}

server {
 location / {
  proxy_pass http://$backend;
 }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57438912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档