Skip to content

Commit

Permalink
c
Browse files Browse the repository at this point in the history
  • Loading branch information
MacHu-GWU committed Sep 3, 2022
1 parent eae8a42 commit 442f688
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,20 @@
一个魔兽世界游戏服务器有两个主要组件:

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

一个
这里的游戏服务器本身不储存任何数据, 数据都在内存里. 服务器定期会将数据写入数据库做持久化保存. 而为了防止崩溃导致丢数据, 服务器还有将数据落盘但不写入数据库的机制. 如果崩溃重启后检测到还未写入数据库的数据, 那么会从磁盘上读取这些数据并将其写入. 该机制不适用于容器的情况, 应为容器一般没有磁盘. 而数据库则是保存着服务器上所有事情的状态. 数据库上的数据没了那么这个服务器也就完了.

游戏服务器可以是单机, 也可以是集群, 可以是虚拟机, 也可以是容器. 集群比较适合随着玩家的增加和减少扩容, 以提高游戏体验. 而由哪个节点来处理某个具体玩家的数据是由 Load Balancer 来决定的, 也就是负载均衡器. 但是游戏服务器比较复杂, 例如在同一个副本中的玩家需要由同一台服务器来处理. 具体调度机制还未知. auth 服务器虽然由于不处理复杂逻辑, 是可以用集群部署的, 但因为它的负载并不高, 所以集群部署也意义不大. 而 world 服务器由于比较复杂, 而且在私服生产环境里, 由于没有暴雪那强大的团队把属于 公共世界, 位面, 副本 等流量分散到不同的机器上的技术, 所以通常 world 服务器是由性能强大的单机来部署, 并且通常使用虚拟机, 而不使用容器.

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

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

- 一个 VPC, 有 Public Subnet 和 Private Subnet, 并且提供一个 EIP 作为固定私服 IP 地址.
- 一个 Ubuntu, 4 vCPU, 16G 内存的 t3.large EC2 作为游戏服务器, 位于 Public Subnet
- 一个 MySQL 8.0 compatible Aurora 作为游戏数据库, 位于 Private Subnet
- 定期将数据库快照备份

.. raw:: html
:file: ./server-architect.drawio.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile host="Electron" modified="2022-09-03T15:59:55.772Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/17.4.2 Chrome/100.0.4896.60 Electron/18.0.1 Safari/537.36" etag="YG7Akc2JIjOPE-6o8yWl" version="17.4.2" type="device"><diagram id="xZh6Z2dOMou8Wot6SitT" name="Page-1">7VnbbuM2EP0aP8bQzZb8aMty2iLbTWu02TwFtETL3KVFgaJ82a8vKVE3kom7hZMs0BgBojm8z8w5HNkjN9yfbinId59IAvHIsZLTyF2OHMeeTab8n0DOLeLUSEpRIrEOWKPvUIKWREuUwGLQkRGCGcqHYEyyDMZsgAFKyXHYbUvwcNUcpFAD1jHAOvqAErar0WBidfgvEKW7ZmXbki170HSWQLEDCTn2IDcauSElhNVP+1MIsfBe45d63OqZ1nZjFGbs3wxAc588AGA5yZMbPW63vz9F2Y0to3EAuJQn/vs+lBtm58YLOUEZqzw5WfA/vlBojSa8JRTW2JkogGr7Q8DWLTHHEFBtfwjY6vS2sr6tbrAHaNZgektZ3+ptkP+5C1IyjDIYtjlncTClIEE8FiHBhHIsIxn33mLH9phbNn887hCD6xzEwqtHThiObUnGZNbzWEhbOl7MyvOaAb4WlXNUkYA0OsA6IHUfjEFeoE07isK4pAU6wD9hUU8uUJ6BuXjen1LB1jE4Ft44paTMq+3/ytcytj4d8lgMZ5R8g83xRo7reEFge2LTCGPl2AdIGeI0mmOUilkZEYsAaWG4ZWJG7guUpXeVtXQtef7eEvP5wl8EHE9AsYNJc5BqJw0fhdt0Mkh+iH3AUw+S5LiFZA8ZPfMusvVm2lBXatVNEEjg2DHfa7Bdj/Vuw3Eg1SZtZ+8IyR8kJ3+EnzONn/flBqNY8LPcZJB9cPWDq32uFmI6xM5PXed1RZcBdy6xmOPRbOVG0+tRuV1nQOVrEHcyVYnr6cS1pwbiOt5rEbdRhD5xKToABj+Y+8Hc6zDX9vxoMTcwd7pyVsH1mNuuc3XmthfnT8RcXyPuLSYbIMbdgj1PEZW2vdxrHH4HNhDfkwIxVEV7Qxgj+57vYyjyiwNY9FyA+JsIepb0vL6tPs9GUa+BtPywrMBayZSsXz0srZJSkhWRwh8jnqLFOOWnhleKs68ptKG0MlVWwasVVoEW5vnDmgPzkhIKRs4UC3JseLinqXj6dF7/cTcS+aq2iKzgDUvAwAYUUMuP4htk8U463KjxRp03ab1R73XNH3SrVNiwggqaMF8Hbb1bI9w6aMJMt5Q62jaMtpXRz98RauHhOiuRGdrdwdu8pc8be21LxFVdsjYjVOSmKq/84y1mJsK1lB1w7KIovCzTrVT0dObSfQaKvHbHFp3EPsyXEoUFKWkM6yuJX2eF6XICNSGuIwQtoc+qMryXEDj6NyC1EISYlMnLZH7DCuU/VxX88SmujmK8IcTnVd/g2yXe4g3eU7Jr5ujZNTGVE551hfz6zZ/SfY6h8/ngfX3MNovZNLvxtBSCSQqb0AqFISnJAI46dFGVAq2vuj53RMSgyqGvkLGzTBhQMjLMMHhC7Evv+VFMxfW0tpYnOXNlnHvGPaSIH7uqg7saT2x4EBJDlGolecEPzZe3gKaQXbyY9RhTiAHjtfZg1atHq8k5VQyi0NEv/r82ZcbKZwuCNaQHQ7n4UQ78vOXAyg8iy/uxcmBpTULb/9+UAzDu1FqTZoM0vPC1jfry95a1gJH97rtodca3/qURYWH01FqYnVxX1rlvvaJgO7pgPy+Z76XXevH28PmhKt4Ee7VwXuSe4V3+Ag2HrJe1kyIRlrWIVo6Jd99LCscx2edlPZv6xZN9Ja5pL+CvyDVudr9qVm29H4fd6B8=</diagram></mxfile>
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=5,IE=9" ><![endif]-->
<!DOCTYPE html>
<html>
<head>
<title>server-architect</title>
<meta charset="utf-8"/>
</head>
<body><div class="mxgraph" style="max-width:100%;border:1px solid transparent;" data-mxgraph="{&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;nav&quot;:true,&quot;resize&quot;:true,&quot;toolbar&quot;:&quot;zoom layers tags lightbox&quot;,&quot;edit&quot;:&quot;_blank&quot;,&quot;xml&quot;:&quot;&lt;mxfile host=\&quot;Electron\&quot; modified=\&quot;2022-09-03T16:00:01.268Z\&quot; agent=\&quot;5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/17.4.2 Chrome/100.0.4896.60 Electron/18.0.1 Safari/537.36\&quot; etag=\&quot;q0HtrwslI5cX89J7XHsM\&quot; version=\&quot;17.4.2\&quot; type=\&quot;device\&quot;&gt;&lt;diagram id=\&quot;xZh6Z2dOMou8Wot6SitT\&quot; name=\&quot;Page-1\&quot;&gt;7VnbbuM2EP0aP8bQzZb8aMty2iLbTWu02TwFtETL3KVFgaJ82a8vKVE3kom7hZMs0BgBojm8z8w5HNkjN9yfbinId59IAvHIsZLTyF2OHMeeTab8n0DOLeLUSEpRIrEOWKPvUIKWREuUwGLQkRGCGcqHYEyyDMZsgAFKyXHYbUvwcNUcpFAD1jHAOvqAErar0WBidfgvEKW7ZmXbki170HSWQLEDCTn2IDcauSElhNVP+1MIsfBe45d63OqZ1nZjFGbs3wxAc588AGA5yZMbPW63vz9F2Y0to3EAuJQn/vs+lBtm58YLOUEZqzw5WfA/vlBojSa8JRTW2JkogGr7Q8DWLTHHEFBtfwjY6vS2sr6tbrAHaNZgektZ3+ptkP+5C1IyjDIYtjlncTClIEE8FiHBhHIsIxn33mLH9phbNn887hCD6xzEwqtHThiObUnGZNbzWEhbOl7MyvOaAb4WlXNUkYA0OsA6IHUfjEFeoE07isK4pAU6wD9hUU8uUJ6BuXjen1LB1jE4Ft44paTMq+3/ytcytj4d8lgMZ5R8g83xRo7reEFge2LTCGPl2AdIGeI0mmOUilkZEYsAaWG4ZWJG7guUpXeVtXQtef7eEvP5wl8EHE9AsYNJc5BqJw0fhdt0Mkh+iH3AUw+S5LiFZA8ZPfMusvVm2lBXatVNEEjg2DHfa7Bdj/Vuw3Eg1SZtZ+8IyR8kJ3+EnzONn/flBqNY8LPcZJB9cPWDq32uFmI6xM5PXed1RZcBdy6xmOPRbOVG0+tRuV1nQOVrEHcyVYnr6cS1pwbiOt5rEbdRhD5xKToABj+Y+8Hc6zDX9vxoMTcwd7pyVsH1mNuuc3XmthfnT8RcXyPuLSYbIMbdgj1PEZW2vdxrHH4HNhDfkwIxVEV7Qxgj+57vYyjyiwNY9FyA+JsIepb0vL6tPs9GUa+BtPywrMBayZSsXz0srZJSkhWRwh8jnqLFOOWnhleKs68ptKG0MlVWwasVVoEW5vnDmgPzkhIKRs4UC3JseLinqXj6dF7/cTcS+aq2iKzgDUvAwAYUUMuP4htk8U463KjxRp03ab1R73XNH3SrVNiwggqaMF8Hbb1bI9w6aMJMt5Q62jaMtpXRz98RauHhOiuRGdrdwdu8pc8be21LxFVdsjYjVOSmKq/84y1mJsK1lB1w7KIovCzTrVT0dObSfQaKvHbHFp3EPsyXEoUFKWkM6yuJX2eF6XICNSGuIwQtoc+qMryXEDj6NyC1EISYlMnLZH7DCuU/VxX88SmujmK8IcTnVd/g2yXe4g3eU7Jr5ujZNTGVE551hfz6zZ/SfY6h8/ngfX3MNovZNLvxtBSCSQqb0AqFISnJAI46dFGVAq2vuj53RMSgyqGvkLGzTBhQMjLMMHhC7Evv+VFMxfW0tpYnOXNlnHvGPaSIH7uqg7saT2x4EBJDlGolecEPzZe3gKaQXbyY9RhTiAHjtfZg1atHq8k5VQyi0NEv/r82ZcbKZwuCNaQHQ7n4UQ78vOXAyg8iy/uxcmBpTULb/9+UAzDu1FqTZoM0vPC1jfry95a1gJH97rtodca3/qURYWH01FqYnVxX1rlvvaJgO7pgPy+Z76XXevH28PmhKt4Ee7VwXuSe4V3+Ag2HrJe1kyIRlrWIVo6Jd99LCscx2edlPZv6xZN9Ja5pL+CvyDVudr9qVm29H4fd6B8=&lt;/diagram&gt;&lt;/mxfile&gt;&quot;}"></div>
<script type="text/javascript" src="https://viewer.diagrams.net/js/viewer-static.min.js"></script>
</body>
</html>
2 changes: 1 addition & 1 deletion wotlkdoc/server/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ def create_restore_image_task(
):
"""
从 S3 恢复 AMI 镜像.
Reference:
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.create_restore_image_task
Expand Down

0 comments on commit 442f688

Please sign in to comment.