引言

始终想做 MMORPG 游戏,始终在学习,开一个系列把服务器开发的过程记录下来。

始终以来搜寻了许多材料,然而都四分五裂,短少一个残缺具体的概念,要么就是只对架构泛泛而谈,要么就是对某个算法的夸夸其谈。我作为纯正的业外人士,这些形象的材料根本无奈对我造成特地重要的指导作用,所以我还是得亲自尝试重构所有内容。

根本构想

查阅过泛滥材料之后,我对 MMORPG 服务器的整体架构有了一个根本的概念。恰好之前深刻理解了一下 ErlangElixir,它们人造反对高并发的个性以及监督树和尽早解体的思维深深感动了我,所以我决定用 Elixir 实现服务器的各个部件。

我的想法中服务器的大抵架构如下:

                                        |----------|                                        |  client  | x N                                        |----------|-----------------------------------------|-----|----------------------------------------------|-------------|            |--------------|         |-------------|        |--------------|| auth_server | x N     | auth_manager | x 1     | gate_server | x N    | gate_manager | x 1|-------------|         |--------------|         |-------------|        |--------------|-----------------------------------------|-----|----------------------------------------------                        |--------------|            |---------------|                        | agent_server | x N        | agent_manager | x 1                        |--------------|            |---------------|-----------------------------------------|-----|----------------------------------------------                    |-------------------|            |--------------|                    | scene_server(TBD) | x N         | world_server | x 1                    |-------------------|            |--------------|-----------------------------------------|-----|----------------------------------------------                |--------------|         |------------|         |--------------|                | data_service | x N     | data_store | x N     | data_contact | x 1                |--------------|         |------------|         |--------------|-----------------------------------------|-----|----------------------------------------------                                        |---------------|                                        | beacon_server | x 1                                        |---------------|
  • auth_server - 用户登录游戏用
  • auth_manager - 用于治理 auth_server,做负载平衡
  • gate_server - 网关服务器,用于承受客户端的tcp连贯,加解密音讯,并转发流量
  • gate_manager - 用于治理 gate_server,做负载平衡
  • agent_server - 用于执行非场景的用户逻辑(待定)
  • agent_manager - 用于治理 agent_server,做负载平衡
  • scene_server - 用于执行场景逻辑,如 AOI、地图区块治理等
  • world_server - 用于兼顾治理 scene_server 的调配,以及解决世界级逻辑
  • data_server - 数据库内存存储节点,用来对其余服务器提供服务
  • data_store - 数据库长久化存储节点,用来保留数据库数据
  • data_contact - 用来分割各个数据库节点,同时为其余服务器调配数据库节点,做负载平衡
  • beacon_server - 灯塔服务器,用于分割各个服务器,替换资源,在节点间建设连贯

数据库 打算采纳 Mnesia,人造具备集群能力,能够动静横向扩大。

客户端连贯打算采纳 one process per client,充分利用 BEAM 的轻量级线程能力,进步逻辑编写效率。当然这些都是我猜的,到时候理论性能如何还未可知。

我的项目地址

https://github.com/dyzdyz010/ex_mmo_cluster

因为找不到同好,只有我一个人在孤军奋战,不知能保持多久,然而心愿能有人一起。且行且珍惜吧。