本文中的部分资料内容源于前aws的同事。

第一章将按下述顺序进行展开

  1. 网络游戏架构的基本理解
  2. 网络演进
  3. 计算演进
  4. 数据库演进
  5. 存储演进
  6. 实际案例
  7. 总结

网络游戏架构的前世今生

  • 1. 网络游戏架构与游戏引擎
  • 2. 网络方案演进
    • 2.1 网络同步方案

1. 网络游戏架构与游戏引擎

网络游戏架构(简称游戏架构)是一个听上去既高大上又“原始”的话题,业内其实谈及的场景非常非常非常有限。之所以说它高大上,是因为大家谈论的很少,思考的也相对较少;说它“原始”是因为,大部分谈论的架构、解决方案、场景,通常都是Web应用,与前沿且成熟的Web架构相对比,会产生游戏架构“原始”的感觉。我一直认为这里的“原始”是一定要加上引号的,因为我并不认为游戏架构真的粗糙而简陋,因为技术方向的差异,游戏更多的关注点在于一致且高效的性能——同样一个人能忍受不到半秒的下单延迟,却很难忍受哪怕稍微一停顿的切换装备(专业点这里的例子应该用存档来表述)。玩家希望游戏是极度流畅(这里的极度相比于一般Web应用)、稳定且能提供7*24小时不间断服务的,而游戏架构正是设计为这样的用户需求服务。

这里有必要区分一下“游戏引擎”和“游戏架构”这两个概念。在单机游戏中这两者没有太大区别,但在网络游戏中,我所认为的游戏架构的概念是一个更广的概念。提及游戏架构,往往会想到——客户端使用xxx游戏引擎,网络通信使用xxx网络连接,服务器使用xxx架构;游戏引擎一般指游戏客户端的可视化开发工具和可重用组件,与开发环境高度集成。我接触过白鹭、cocos2dx、Unity、CryEngine、Unreal Engine、Lumberyard,它们中的有一些已经扩展了不少服务器相关的功能组件,例如 Unity 的服务器方案,UE4 的 Dedicated Sever,大部分引擎也拥有自定义的组件市场,里面的功能保罗万象。但游戏引擎不是游戏架构,因为游戏架构不存在固定数量的最优解,而在这些组件包装好的同时,也失去了灵活性,所以这些组件通常只为对性能、对用户体量预期较低的小型游戏服务。游戏架构就像一个一眼看不到边界的大舞台,每个游戏开发者都能在这个舞台上大展拳脚,去实现自己独一无二的游戏。

游戏架构的演进很多时候是出于完全自发的状态,对于游戏本身的追求,部分时候甚至会高过把它当作一个用来赚钱的商品,这是一种强大的自驱力。 当我们做一个第一人称射击游戏,刚开始我们能对一个靶子开枪从而获得分数,自然而然的,我们想和身边的朋友比比谁更准,所以我们需要一个网络联机方案,把朋友们拉入一局对战。而当朋友没空时,我们需要一个机制让陌生人也能一起对战,所以我们需要一个匹配方案。而当我们的枪法水平在短时间得不到明显提升,需要一个成长机制持续不断的感受到正反馈,所以我们需要一个成长方案,例如更好的装备、更好的属性。游戏架构正是在一个又一个想法的产生与实践下不断演进。

大部分游戏都需要持续不断且“短期”的正反馈,这也是游戏区别于其他应用的地方,这也是游戏如此令人着迷的地方。为了提供更持续更高效的正反馈,必须把用户体验做到更好。有些硬核游戏的正反馈流程较长,有些甚至需要几十、上百小时的游戏游玩时间,但这也远比生活中的一般项目获得正反馈的时间成本要低了,也更强烈。

2. 网络方案演进

2.1 网络同步方案

回到网络游戏的早期,MUD、MUX游戏兴起,部分单机游戏提供局域网联机对战的功能,我们在仅由文字、字符画、简单贴图描述的世界中自由探险。在游戏中,我们需要近实时的和其他玩家交互,聊天、合作或对战。游戏把我们连接到一个世界中,进行网络同步,这是最早期的P2P(peer-to-peer)架构。

每个玩家在本地主机上所执行的指令快速同步到其他主机上,让所有主机计算出相同的战局信息,通过程序渲染展示给每位玩家看到,这种同步方案也被称为帧同步。这种帧同步带来了三个最明显的问题:1、逻辑不同步导致对局信息混乱;2、外挂(例全图挂,对于所有指令的本地直接解析显示)3、单局能承载的人数少,更多帧同步相关细节在这里不做展开。

一种思路是,我们可以从这些玩家中选举出一个主机,由它来进行一些仲裁。被选为主机的玩家被赋予了更多的权力,而它的机器性能和网络环境也成为一个重要的影响因素,主机的提前退出、网络中断都会导致游戏的结束,而主机糟糕的网络会严重影响其他玩家的游戏体验。当今,有一些支持自定义地图编辑器的游戏,使用这种方式进行网络联机。

第二种思路是,我们可以部署一系列独立的服务器,由他来作为主机,负责帧信号的同步、少量仲裁。游戏公司承担了服务器部署、维护的职责,游戏公司一般会选择网络条件较好的机房、采购昂贵的大带宽,由于早期网络环境比较复杂,还需要分别使用三大运营商所接入的机房,到后面开始有BGP接入的机房才能削减机房接入数量。这种架构也被成为 c/s (client/server) 架构。

第三种思路也是 C/S 架构,只不过我们换了一种同步方案。我们希望更多的人在同一个游戏世界进行交互,希望百人、千人、万人在同一个世界同时游玩;我们希望解决逻辑不同步导致的灾难性后果。由此我们设计了状态同步的架构,即服务器负责计算不同人物、物体的状态属性变化,并将这种状态属性的变化告知客户端,由客户端进行渲染展示,从而代替了同步逻辑帧(玩家指令)这种做法。这种方案被广泛应用在MMORPG、SLG等游戏中,部分MOBA类游戏在重要对局(例如电竞比赛)时,也会由帧同步切换为状态同步,当然也有全部状态同步的MOBA游戏。

网络同步方案各有优劣,目前不存在完美的网络同步方案适合所有的游戏场景,根据游戏类型和玩法需求选择一种或几种相结合是目前的主流。

未完待续……

一、网络游戏架构的前世今生(1)相关推荐

  1. 一、网络游戏架构的前世今生——计算篇

    上文: 网络游戏架构的前世今生(2) 网络游戏架构的前世今生--计算篇 计算方案演进 游戏的分类 会话游戏的简单架构 分服.合服.全球同服 计算方案演进 游戏的分类 游戏的分类方式有很多种,从玩家容易 ...

  2. 视频教程-Unity网络游戏架构设计-Unity3D

    Unity网络游戏架构设计 网名:海洋,CSDN社区讲师,3D游戏引擎开发者,IT讲师,计算机图形学方向研究生,曾在浙江大学CAD&CG;国家重点实验室学习.从事IT行业15年,主导或参与了1 ...

  3. 网络游戏架构与微服务架构简单对比

    笔者十年前做过网络游戏,当第一次看到微服务架构就发现它和网络游戏架构很像,如下图: 先来简单介绍一下这个网游架构,有些东西记不清了,如今的网游大牛看到可别丢砖头. 用户下载网游客户端,登录网游,首先会 ...

  4. 「优知学院」淘宝架构的前世今生(下)

    " 淘宝技术架构前世今生就是一部架构活教材,今天仍然由陈睿mikechen为大家解读淘宝架构. 我稍微把前面淘宝架构的三个阶段简短总结: 淘宝1.0 采用LAMP mysql读写操作 淘宝2 ...

  5. 「优知学院」淘宝技术架构的前世今生(上)

    " 淘宝技术架构经历从最初的LAMP架构,到IOE架构,再到分布式架构,再到去IOE,最后到现在的云计算平台架构这一变化过程在不断解决上面的技术问题,可以说淘宝技术架构的演变就是活生生的一本 ...

  6. 【Unity学习笔记】b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别)

    [Unity学习笔记]b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别) 自己跟着学完了,写了不少代码,会放在CSDN代码库,因为老师并没有提供源码,录屏也不是完全连续,所以难 ...

  7. 网络游戏架构设计那些事

    一个大型的网落游戏服务器应该包含几个模块:网络通讯,业务逻辑,数据存储,守护监控(不是必须),其中业务逻辑可能根据具体需要,又划分为好几个子模块. 这里说的模块可以指一个进程,或者一个线程方式存在,本 ...

  8. 七点讲透分布式架构的前世今生,面试官都不知道的概念来了

    一.前言 以前我们聊过分布式架构的演进过程,那本文我们就来聊一聊目前主流的分布式架构和分布式架构中常见理论以及如何才能设计出高可用的分布式架构好了,基本上就是它的前世今生了. 分布式架构中,SOA和微 ...

  9. 适用于独立游戏开发的Unity3D 网络游戏架构设计

    最近在GitChat上发布了一个网络游戏框架教程,目标是带领读者搭建一个商业游戏的网络架构设计,该架构设计是游戏的核心技术,将采用 Unity 2017.2 最新版本作为开发工具.内容分为 UI 架构 ...

最新文章

  1. java基础编程题(1)
  2. Spark菜鸟学习营Day5 分布式程序开发
  3. spring ioc原理分析
  4. JAVA正则表达式的学习
  5. 脚本中export不起作用的原因分析
  6. Java知多少(42)泛型通配符和类型参数的范围
  7. 收发电子邮件属于计算机在方面的应用,计算机应用基础复习题(供参考).doc
  8. ashx PHP文件 优劣,.NET_后缀为 ashx 与 axd 的文件区别浅析,唯一不同的地方是:axd扩展名 - phpStudy...
  9. junit 循环测试_重复运行JUnit测试而没有循环
  10. Codeforces Testing Round #1_C. Circular RMQ
  11. asp.net 实现动态显示当前时间(不用javascript不考虑开销)
  12. NSGA_2总结梳理附代码按行详细注解
  13. android的混淆器
  14. JAVA计算机毕业设计博雅楼自习室预约系统Mybatis+系统+数据库+调试部署
  15. 大学计算机实验报告u盘启动安装,用U盘安装Win7操作系统实验报告.doc
  16. 【013】如何给EXCEL编写的宏设置打开密码_#VBA
  17. python半圆_复合半圆环图只要四句代码搞定
  18. 论文投稿指南——中文核心期刊推荐(新闻事业)
  19. Week-4-作业1
  20. 成都天瑞地安谈VR虚拟增强技术能否取代修图软件的意见

热门文章

  1. 《唐伯虎点秋香》中的超级对联
  2. 计算机辅助翻译翻译技术的译前应用,计算机辅助翻译技术在网络字幕组中的应用...
  3. Au入门系列之八:包络与自动化控制
  4. gameboy bios_使用真实的NES,Gameboy和Sega颜色创建8位样式图形
  5. 【Experience Summary】出差布置产线
  6. 大小写字母的相互转换 C语言
  7. Springboot工程logback和log4j冲突问题的解决。
  8. 「UbuntuROS」Ubuntu系统下几个必不可少的设置和软件|1-4
  9. 自信心、自制力。Java
  10. SSM整合开发办公系统核心模块五(报销单处理)