Architecture 扩展有状态服务器

Architecture 扩展有状态服务器,architecture,scaling,stateful,Architecture,Scaling,Stateful,我现在有一种建筑上的困惑。我正在构建一个德州Holdem扑克应用程序,我正在尝试一种方法来扩展我的有状态服务器 服务器位于NodeJS中,与Pomelo(如果我没有弄错的话,它是在Socket.io之上构建的库)一起工作。服务器管理所有游戏逻辑,因此是有状态的 我正在考虑使用像redis这样的“缓存即服务”解决方案,但我不确定它是否能完成这项工作 我真的很感兴趣,如果有人能给我指导或介绍我关于这个话题的好文章。如今,扩展无状态服务是小菜一碟,但它们的有状态对应项(几乎)从未被提及 谢谢大家! 编

我现在有一种建筑上的困惑。我正在构建一个德州Holdem扑克应用程序,我正在尝试一种方法来扩展我的有状态服务器

服务器位于NodeJS中,与Pomelo(如果我没有弄错的话,它是在Socket.io之上构建的库)一起工作。服务器管理所有游戏逻辑,因此是有状态的

我正在考虑使用像redis这样的“缓存即服务”解决方案,但我不确定它是否能完成这项工作

我真的很感兴趣,如果有人能给我指导或介绍我关于这个话题的好文章。如今,扩展无状态服务是小菜一碟,但它们的有状态对应项(几乎)从未被提及

谢谢大家!


编辑:显然,这是一个基于观点的问题,所以让我重新表述一下。。。如何扩展在缓存中维护表数据(用于每个扑克游戏)的有状态socket.io服务器?现在,我想到了两个解决方案。要么使用redis的pub/sub功能,要么使用缓存作为服务提供者,比如amazon的ElastiCache。任何人都可以向我推荐有助于我阐明并更好地理解这个问题的文章或任何东西?

我不清楚您真正的应用程序体系结构是什么,但请看以下两个示例:

如果您使用的是云,任务可能会更简单


如果您能详细描述您的组件,我可以试着帮助您。

您有哪些数据

是否正在使用外部数据库

我将使用缓存进行会话持久化,使用DB进行长期数据(SQL或NoSQL)

将其移动到这些服务可以使您自由地将服务移动到kubernetes或lambda。因为您的所有应用程序都将是无状态的


关于

使用Redis进行缓存和您最熟悉的数据库我有一个外部数据库来保存用户信息、Lobby等。但是这些表直接在内存中管理,因为将它们存储在数据库中会增加延迟(通常,您希望管理通过内存中的套接字来回发送的数据).所以没问题。您是否需要在请求之间保持这种操作?第一个请求由服务实例处理,用户的下一个请求是否需要此信息?如果是,则将此会话数据保留在缓存上。否确定我是否清除了哈哈哈