iohao / ioGame

无锁异步化、事件驱动架构设计的 java netty 网络编程框架; 轻量级,无需依赖任何第三方中间件或数据库就能支持集群、分布式; 适用于网络游戏服务器、物联网、内部系统及各种需要长连接的场景; 通过 ioGame 你可以很容易的搭建出一个集群无中心节点、集群自动化、分布式的网络服务器;FXGL、Unity、UE、Cocos Creator、Godot、Netty、Protobuf、webSocket、tcp、socket;java Netty 游戏服务器框架;
http://game.iohao.com
GNU Affero General Public License v3.0
904 stars 201 forks source link

服务器通服架构设想提问 #214

Closed yanisCC closed 1 year ago

yanisCC commented 1 year ago

如果假设一个MMO项目,是一个通服的服务器架构

1. 假设逻辑服是一个有状态的(数据)

那么每个逻辑服可能连接不同的数据库,获取不同玩家的相关数据,无法做到通服这样的感觉 这种情况该如何设计?

2. 假设逻辑服是一个无状态的(数据)

玩家每次登录时,都会选择负载最小的逻辑服进行登录,那么这样所有的逻辑服是不是都访问一个数据库? 并发量足够的话,是否会考虑到单数据库的承载能力?是否有优化的空间? 那么,跨场景匹配,或者进行跨逻辑服战斗时,如何做玩家的数据迁移,将两个在逻辑服中有缓存的数据,同步到一个逻辑服中?

iohao commented 1 year ago

如果假设一个MMO项目,是一个通服的服务器架构

1. 假设逻辑服是一个有状态的(数据)

那么每个逻辑服可能连接不同的数据库,获取不同玩家的相关数据,无法做到通服这样的感觉 这种情况该如何设计?

2. 假设逻辑服是一个无状态的(数据)

玩家每次登录时,都会选择负载最小的逻辑服进行登录,那么这样所有的逻辑服是不是都访问一个数据库? 并发量足够的话,是否会考虑到单数据库的承载能力?是否有优化的空间? 那么,跨场景匹配,或者进行跨逻辑服战斗时,如何做玩家的数据迁移,将两个在逻辑服中有缓存的数据,同步到一个逻辑服中?

A1: 使用同一个数据库;

A2: 2.1 是不是访问一个数据库取决于你的业务需求,还有你配置数据库的方式。 2.2 框架不关心数据库方面的问题,也不属于框架应该关心的;关于数据库可以到对应的产品中找解决方案。 2.3 对于跨场景、跨服是简单的,只需要启动一个公用的战斗逻辑服,各服务器之间就可以交互了,不需要考虑太多。可以参考 ioGame 架构多样性 (yuque.com) 文档中的同进程亲和性的部署方式;

关于通服的服务器架构,可以适当的参考 动态绑定游戏逻辑服 (yuque.com) 文档;当有多个战斗逻辑服时,可以将玩家与这些战斗逻辑服绑定。