多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# EVE 在线架构 > 原文: [http://highscalability.com/blog/2008/10/22/eve-online-architecture.html](http://highscalability.com/blog/2008/10/22/eve-online-architecture.html) *抱歉,这篇文章的内容显然没有从旧的 HighScalability 网站过渡,这一切都弄糟了,但仍有一些有用的内容...* [EVE Online](http://www.eve-online.com/) 是“世界上最大的游戏宇宙”,这是 CCP 制作的大型多人在线游戏( [MMO](http://en.wikipedia.org/wiki/MMO) )。 对于 MMOG,EVE Online 的体系结构不常见,因为它不会将播放器负载分配给不同的服务器或分片。 而是,同一集群处理整个 EVE Universe。 将此与第二生命网格的[体系结构进行比较很有趣。 他们如何设法扩展规模?](http://highscalability.com/second-life-architecture-grid) ## 信息来源 * [EVE Insider Dev Blog](http://myeve.eve-online.com/devblog.asp) * [EVE 在线常见问题解答](http://www.eve-online.com/faq/faq_07.asp) * [大规模-Eve 演变:Eve Online 的服务器模型](http://www.massively.com/2008/09/28/eve-evolved-eve-onlines-server-model/)及其在 Slashdot 上的[讨论](http://games.slashdot.org/games/08/10/02/2137251.shtml) * [EVE 在线论坛](http://myeve.eve-online.com/ingameboard.asp?a=topic&threadID=682229) * [大型多人游戏开发 2](http://www.amazon.com/gp/product/1584503904?ie=UTF8&tag=innoblog-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=1584503904) ## 平台 * [用于服务器和客户端游戏逻辑的无堆栈 Python](http://www.stackless.com/) 。 它使程序员可以享受基于线程的编程的好处,而不会出现与常规线程相关的性能和复杂性问题。 * SQL 服务器 * 具有 [SSD](http://en.wikipedia.org/wiki/Solid-state_drive) 的刀片服务器,可实现高 IOPS * 计划将 [Infiniband](http://en.wikipedia.org/wiki/Infiniband) 互连用于低延迟网络 * 成立于 1997 年 * 约 30 万活跃用户 * 多达 40K 并发用户 * 涉及数百艘船的战斗 * 每天 2.5 亿笔交易 * **代理刀片**-这些是 EVE 集群的面向公众的部分-它们负责建立玩家连接并在集群的其余部分内建立玩家通信。 * **SOL 刀片**-这些是宁静的主力军。 集群分为 90-100 个 SOL 刀片,每个刀片运行 2 个节点。 节点是在一个核心上运行的主要 CPU 密集型 EVE 服务器进程。 有一些 SOL 刀片专用于一个繁忙的太阳能系统,例如 Jita,Motsu 和 Saila。 * **数据库群集**-这是 EVE Online 的持久层。 运行中的节点与数据库进行大量交互,当然,与游戏有关的所有事情都驻留在这里。 多亏了固态驱动器,数据库才能够满足 Tranquility 产生的巨大 I / O 负载。 * 借助创新理念,MMO 游戏可以在同一场战斗中扩展至数百名玩家。 * SSD 实际上将在某种程度上弥合内存与磁盘之间巨大的性能差距。 * 低延迟的 Infiniband 网络互连将支持更大的集群。 ### 得到教训 * 关于 EVE Online MMOG 的架构,有许多有趣的事实,例如使用 Stackless Python 和 SSD。 * 查看信息源,以获取有关 EVE Online 游戏的开发和操作的详细见解。 * 涉及 1000 多艘战舰的战斗 不,不,不超过一千次 如果您想为大多数参与其中的人提供可远程玩的体验,那么我们正在将 400 或 500 场战斗视为绝对最大的战斗。 以上所有内容均无法播放,并可能导致节点/游戏崩溃。 但是我不反对其他任何数字,总的来说,它们都是运行 Eve-O 宇宙的集群怪物。 我打电话给 BS-我们通常会在 60-100 次船战中使节点崩溃。 感谢您的反馈。 我已经更新了条目。 他们最近进行了更新,并设法使系统能够容纳一千艘船,当然,这并不意味着可以进行如此大规模的战斗,而只是意味着我们要说的系统 吉塔,不会崩溃。 但是 400-500 场战役可能还没有我们曾经相信的那么遥远。 他们在 CCP 所做的大量更新,令我感到惊讶的是,定期进行此类战斗。 当然,我不会参加这些活动,因为我是一个胆小鬼,而我更喜欢将我的 HIC 放在一块。 安全飞行。 是和不是 我是 Goonswarm 公司的首席执行官,并在大多数星期内与 1000 多名玩家一起参加战斗。 自从 CCP 启动“无栈 IO”并在服务器端升级到 64 位体系结构以来,我们注意到服务器产生的延迟有了明显的改善。 如果我们在某个节点承受压力之前 24 小时警告 CCP,他们将为我们加强该节点,并且在 99%的时间里战斗将是可玩的。 您还将注意到,无需等待 10 分钟即可加载网格,就可以取消 jita 的对接,而几个月前情况并非如此。 即使是最高端的图形卡/ CPU 组合也将难以在屏幕上显示和跟踪成千上万的单个对象(船舶,导弹,沉船,太空舱,战斗机&无人机),因此,如今的大型战斗通常都依赖于 您的 PC 而不是服务器响应能力。 我可以看到服务器体系结构如何应用于第一人称游戏,但是设计上的挑战使正确设置变得异常困难。 这不仅仅是公司从 CCP 购买设计或引擎的问题,对于第一人称视角的游戏,还需要彻底消除和重新设计。 不幸的是,游戏行业的主要投资者似乎不愿意冒险冒险冒险,但是如果有人管理它,那将是一场噩梦。 [http://www.mustuniversity.com/Schools-Majors/Applied-Arts/Architecture.html“](<a rel=) >在线架构学位 即使是最高端的图形卡/ CPU 组合也将难以在屏幕上显示和跟踪成千上万的单个对象(船舶,导弹,沉船,太空舱,战斗机&无人机),因此,如今的大型战斗通常依赖于 您的 PC 而不是服务器响应能力。 [http://www.carrentaladvice.net/“](<a rel=) >租车 我认为,超过 500 艘船的一切都不过分。 我对当前的限制非常满意,因为无论如何我都会避免出现大规模的污垢。 戴夫 [http://www.pilkingtonselfcleaningglass.co.uk/where-to-use/glass-doors/index.html](<a rel=) “ >玻璃门 如果我们在某个节点承受压力之前 24 小时警告 CCP,他们将为我们加强该节点,并且在 99%的时间里战斗将是可玩的。 [http://www.livescores.com.sg/“](<a rel=) >实时比分 Python 非常慢……它是最慢的语言之一。 它可能比 C ++慢 10 倍。 一些用 python 编写的高级科学库实际上是在数学库的后台使用 C ++,但我无法想象在这种情况下。 作为一个业余爱好者的开发人员,我仍然不明白为什么 python 可以用于如此大的任务,特别是因为与更传统的语言相比,编码(IMO)看起来像地狱。 其次,虽然我没有完全了解此问题,但我想知道它们如何处理跨节点的持久性... 在我看来,如果不先从数据库中读取原始位置,您甚至根本无法进行基本的健全性检查。 您可以根据位置和上次输入来假设它们在单个帧中的位置,但是当它们在游戏中越过节点行时,它仍然被写入服务器机架中某个节点上的持久数据库中,而突然之间 在他们的新节点上重新同步。 他们甚至可能会反复跳越节点线,从而滥用这种与冷却时间不同步的方式。 在这种情况下,我假设每个区域都有某种加载屏幕,这可能会解决此问题。 不过,尽管如此,我还是希望有一种方法可以使它更顺畅,以便可以将其集成到比单独的太阳系更为紧密的游戏世界中。.我现在正在研究类似的东西。 如果它平滑地滑行,那么理论上您可以提高节点的分辨率,直到您可以一次处理 2000 个播放器为止,只需横向扩展即可,而不是每次都像 Jita 那样使用大型专用服务器,但是跨节点 通信会很疯狂,但我仍在设法解决这一问题,以避免数据库上出现 IO 问题