Skip to content

Commit

Permalink
commit
Browse files Browse the repository at this point in the history
  • Loading branch information
MacHu-GWU committed Sep 4, 2022
1 parent 6056722 commit f8bc496
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@

到 2022-09-01 为止, 目前有这么 3 个主流核心, 它们都有强大的社区和代码贡献者 (其他的魔改核心不算):

MaNGOS:

- https://www.getmangos.eu/
- https://github.com/mangos/MaNGOS

TrinityCore:

- https://www.trinitycore.org/
Expand All @@ -14,24 +19,19 @@ TrinityCore:
- https://github.com/trickerer/Trinity-Bots
- https://github.com/trickerer/TrinityCore-3.3.5-with-NPCBots

MaNGOS:

- https://www.getmangos.eu/
- https://github.com/mangos/MaNGOS

AzerothCore:

- https://www.azerothcore.org/
- https://github.com/azerothcore/azerothcore-wotlk
- https://www.azerothcore.org/catalogue.html#/

TrinityCore 是一个超级老牌的开源项目. 目前市面上各种卖的 repack (自己编译打包后的服务端) 也是基于此. 它的目标是通用的, 不分版本的魔兽世界服务端, 一路支持所有的资料片到目前的 9.2 暗影国度. 这也导致了它无法对游戏内容和可玩性进行打磨, 只能专注于服务器技术. 而它的 3.3.5 是一个 branch, 也是它可玩性最好的版本.. 如果你是单机玩家, 由于项目本身不是专门为 3.3.5 版本服务的, 所以可玩性和修复上不如 AzerothCore. 如果你自己开服而且有技术团队, TrinityCore 的底层设计是最强大的, 你可以自己投入资源进行修复和魔改, 适合开服.
MaNGOS 是 2005 年开始的开源项目, 是所有魔兽世界单机版项目的祖先. 它专注于 经典旧世, 燃烧的远征, 巫妖王之怒, 大灾变, 熊猫人之谜 5 个版本.

MaNGOS 比 TrinityCore 新, 但是也很老的项目. 它专注于 经典旧世, 燃烧的远征, 巫妖王之怒, 大灾变, 熊猫人之谜 5 个版本.
TrinityCore (TC) 是 2009 年开始的开源项目. 目前市面上各种卖的 repack (自己编译打包后的服务端) 也是基于此. 它的目标是通用的, 不分版本的魔兽世界服务端, 一路支持所有的资料片到目前的 9.2 暗影国度. 这也导致了它无法对游戏内容和可玩性进行打磨, 只能专注于服务器技术. 而它的 3.3.5 是一个 branch, 也是它可玩性最好的版本.. 如果你是单机玩家, 由于项目本身不是专门为 3.3.5 版本服务的, 所以可玩性和修复上不如 AzerothCore. 如果你自己开服而且有技术团队, TrinityCore 的底层设计是最强大的, 你可以自己投入资源进行修复和魔改, 适合开服. 但是正因为适合开发, 每个开私服的都用这个, 但是他们都不遵守开原协议, 自己修复的工作都不跟开源分享.

AzerothCore 是三个中最年轻的, 但是正因为年轻, 代码架构, 文档, 社区都很先进和完善. 它专注于提供可玩性和修复的最好的 3.3.5 版本. 如果你不想做过多的改动就自己开服玩, 不是面向公众的私服, AzerothCore 是最合适的.
AzerothCore (TC) 是三个中最年轻的, 但是正因为年轻, 代码架构, 文档, 社区都很先进和完善. 它专注于提供可玩性和修复的最好的 3.3.5 版本, 并且社区都非常积极的将自己的代码贡献出来, 如果你不想做过多的改动就自己开服玩, 不是面向公众的私服, AzerothCore 是最合适的.


我的选择
------------------------------------------------------------------------------
由于我只有一个人, 我选择 **AzerothCore** 作为游戏性最好, 最容易部署, 支持适当魔改的服务端核心.
由于我只有一个人, 我选择 **AzerothCore**, 因为其游戏性最好, 最容易部署, 支持适当魔改的服务端核心.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
服务器架构 Server Architect
==============================================================================

一个魔兽世界游戏服务器有两个主要组件:

简介
------------------------------------------------------------------------------
一个魔兽世界游戏服务器有两个主要组件

1. 游戏服务器. 包括 auth server 用于验证登录, world server 用于处理游戏内容相关的逻辑, 比如打怪, 做任务, 打副本等.
2. 游戏数据库, 里面存储了游戏中的各种状态. 比如人物登录状态, 身上的装备, 任务进行到什么程度了, 哪些副本有进度了等等.
Expand All @@ -14,12 +17,30 @@

游戏数据库往往是性能的瓶颈, 在玩家人数达到 1000 以上, 动辄 1000 每秒的写入是最大的挑战. 而如果把数据库和服务器在一起部署, 资源的占用也会很大, 并且两者一个挂掉也会影响另一个. 所以在生产环境中数据库要和服务器分开部署. 而数据库是你的服务器的命脉, 里面的数据是一定不能丢的. 所以有财力的情况下建议使用 AWS RDS 这一类的云数据库, 以获得更强大的性能, 扩容可能性, 网络安全 和 数据安全.

目前我们决定使用如下基于 AWS 的架构:

基于单机的架构
------------------------------------------------------------------------------
游戏服务器 和 游戏数据库 都在你玩魔兽世界的电脑上部署. 游戏服务器和数据库都会占用性能, 并且会占用网卡带宽. 这样留给真正游戏客户端的性能就不多了. 如果你玩多开的话, 你要至少 32G 内存的电脑, 而且单机多开虽然是 localhost, 但依然要走网卡, 而个人电脑的本地网络带宽一般不太行, 结果就会导致严重的网络延迟.

该架构适合于你自己玩, 或者和 3-5 个小伙伴在局域网中玩.


单台云服务器架构
------------------------------------------------------------------------------
游戏服务器 和 游戏数据库 都在云服务器上部署. 云服务器由于不运行其他系统软件, 性能会比较好也比较稳定. 你可以选择你需要的 CPU 数量, 内存 和 网络带宽. 云服务器的网络一般是虚拟网卡, 带宽要远远高于你的个人电脑. 缺点是如果云服务器崩溃, 两个服务全部都崩溃, 容错较低. 而且由于游戏数据库也在云服务器上. 如果云服务器挂了, 你不修复云服务器的话是无法把数据库中的数据导出. 也就是你的系统如果坏了, 你无法用云运维中常用的 "自动启动一个新的" 的方式来快速修复.


游戏服务器 和 游戏数据库 分离的的架构
------------------------------------------------------------------------------
我们这里以用 AWS 来部署为例. 该架构是用于商用生产环境的最终选择, 当然你也可以选择其他云服务提供商, 原理类似.

- 一个 VPC, 有 Public Subnet 和 Private Subnet, 并且提供一个 EIP 作为固定私服 IP 地址.
- 一个 Ubuntu, 4 vCPU, 16G 内存的 t3.large EC2 作为游戏服务器, 位于 Public Subnet
- 一个 MySQL 8.0 compatible Aurora 作为游戏数据库, 位于 Private Subnet
- 定期将数据库快照备份
- 一个 Ubuntu EC2 作为游戏服务器, 位于 Public Subnet, 可以从公网用特定端口访问.
- 一个 AWS RDS MySQL 8.0 作为游戏数据库, 位于 Private Subnet, 只能从 Public Subnet 上的游戏服务器访问.
- 每次构建后定期将 EC2 的 Image 打包成 AMI 备份到 S3, 以供以后重建一个一摸一样的 EC2.
- 定期将数据库快照备份并保存在 S3 上, 以供随时将数据恢复到某个时间节点.

.. raw:: html
:file: ./server-architect.drawio.html

该架构除了要花钱, 没有别的缺点.
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
.. _keep-server-up-to-date:

服务器更新 Keep Server Up to Date
==============================================================================


为什么要更新
------------------------------------------------------------------------------
AC 的开源社区会不断地修复 Bug, 提供更准确的数据, 你的服务器编译好之后, 需要有不断接受社区更新的能力. 除非你能自己开发, 不然你的服务器就永远是这个样子了. 就算你自己能开发, 你的能力和社区广大开发者加在一起的能力还是不能比得.


服务器更新原理
------------------------------------------------------------------------------
服务器核心本身就是一个从源码编译过来的可执行文件, 通常是二进制格式. 你是无法直接对二进制格式内部进行修改的. 唯一的办法是编译一个新的, 然后替换掉原来的核心. 比如你原来的服务器核心在 ``${HOME}/azeroth-server`` 目录, 你就可以再在 ``${HOME}/azeroth-server-new`` 上编译一个新的, 然后把配置文件考过去, 然后关闭服务器, 将新文件夹替换原文件夹, 然后重启服务器即可.

服务器更新的命令就只有以下几条:

.. code-block:: bash
# CD 到 azerothcore 仓库目录
cd ~/azerothcore/
# 拉取最新的代码
git pull origin master
# 进入到 build 目录
cd build
# 重新构建服务器, 你可以把 8 替换成你的服务器的 CPU 核心数量
make -j 8; make install
参考资料:

- Keeping the Server Up-to-Date: https://www.azerothcore.org/wiki/keeping-the-server-up-to-date

服务器更新具体操作
------------------------------------------------------------------------------
以上的方法只是阐述原理, 还是在原先的 $HOME/azeroth-server 目录编译, 会覆盖已有的服务器核心, **肯定是不合适的**. 下面我们来介绍正确的做法.

**个人电脑单机的架构**

1. 关闭已经正在运行的服务器核心
2. 将服务器核心文件夹改个名字做一个备份
3. 执行服务器更新命令, 重新构建一个新的, 并且把配置文件复制过去
4. 用新的服务器进行测试, 没问题以后就可以正式上线了

**单台云服务器架构**

和个人电脑单机架构一样, 仅仅是 SSH 到服务器上操作而已.

**游戏服务器 和 游戏数据库 分离的的架构**

在这种架构下你就可以做到游戏停机时间很短 (小于 1 分钟).

1. 先在另一台 EC2 上重新构建服务器.
2. 使用数据库的 Snapshot 恢复一台数据库.
3. 用新的服务器 + 数据库做测试
4. 测试成功后把新构建的服务器压缩打包上传到 S3.
5. 在旧的服务器从 S3 上下载编译好的新服务器并解压.
6. 停止旧服务器, 替换服务器核心, 重新启动即可.
2 changes: 1 addition & 1 deletion docs/source/01-管理服务器-Manage-Server/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

管理服务器 (Manage Server)
==============================================================================

这部分包含了搭建, 维护, 管理魔兽世界巫妖王之怒私服的所有知识.

目录
------------------------------------------------------------------------------
Expand Down
14 changes: 8 additions & 6 deletions docs/source/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,17 @@
- 魔兽世界私人服务器上游戏时的常用命令, 技巧, 以及资料速查
- 魔兽世界官方服务器中的游戏攻略, 涵盖了 职业, 技能, 专业, 副本, 声望等方方面面

**关于作者**

1. 从 2005 年起的魔兽法师玩家, 曾参与二区洛萨星辰的 经典旧世克尔苏加德首杀, 燃烧的远征伊利丹开荒.
2. Warmane 服务器上可能是第一个只用宏和同步器多开单刷了 10 人 ICC, 以及各种 10/25 人团本的多开玩家.
3. 亚马逊云计算 Principal Architect 架构师, 多年的服务器架构运维经验.


目录
------------------------------------------------------------------------------
.. autotoctree::
:maxdepth: 1


作者
------------------------------------------------------------------------------
**关于作者**

1. 从 2005 年起的魔兽法师玩家, 曾参与二区洛萨星辰的 经典旧世克尔苏加德首杀, 燃烧的远征伊利丹开荒.
2. Warmane 服务器上可能是第一个只用宏和同步器多开单刷了 10 人 ICC, 以及各种 10/25 人团本的多开玩家.
3. 亚马逊云计算 Principal Architect 架构师, 多年的服务器架构运维经验.

0 comments on commit f8bc496

Please sign in to comment.