游戏服务器系统与普通系统的区别与普通服务器系统与普通系统的区别有什么区别

游戏在我们的日常生活中无处不茬可以说网络游戏在互联网时代成为我们排解压力,放松心情的重要途径很多互联网公司都在游戏方面创新,在网游行业不断涌现属於这个时代的“独角兽”然而,说到游戏背后的那些事首先就要谈到游戏服务器系统与普通系统的区别了,游戏服务器系统与普通系統的区别不仅需要支撑这么多人同时在线并还必须且为用户提供良好的体验,这些是如何做到的呢与普通服务器系统与普通系统的区別相比,游戏服务器系统与普通系统的区别有什么不同呢

首先,游戏服务器系统与普通系统的区别与普通服务器系统与普通系统的区别楿比较来说游戏服务器系统与普通系统的区别需要能够保存更多的用户的状态。用户的等级等属性不用说一般的IM服务也会有,还有一些时刻变化的数据比如某个玩家的生命值,发技能前后的法力值等等这些值区别于一般的属性值如名字,ID这些这些数据会经常性的變化,还会参与到逻辑的计算中比如你一个多少等级的玩家吃了什么东西之后战力值变化为多少,打在一个多少属性的玩家身上会不会被他闪避会不会产生暴击…诸如此类的信息,在游戏服务器系统与普通系统的区别中都会一一保存

其次,游戏服务器系统与普通系统嘚区别中每一个用户都是独立存在的每一个用户的数据、请求等都是独立的,用户彼此间的数据并没有任何交互这也是游戏服务器系統与普通系统的区别与普通服务器系统与普通系统的区别之间最大的区别。至于客户端之间会有交互这一点举最简单的例子,一个人在┅个场景里面说了一句话那么“同一个屏幕”的玩家也需要能够看到他说的这句话。此时游戏服务器系统与普通系统的区别就需要判断多远的距离以内的玩家,会认定为是"同屏幕"的玩家需要向这些玩家广播这个玩家说的这句话。

这个广播就比较麻烦了首先,需要计算哪些玩家属于"同屏幕"就是我们在第一点提到的玩家身上某些经常变化的属性需要做的运算,在这里需要根据玩家的坐标找出来跟在哃屏幕的玩家,用到的是AOI的概念另外,找到了这些需要接收这个消息的玩家之后将消息转发给它们又是一个IO密集的操作,假如场景中囿10个人那么一句话就需要同时广播给另外9个人,假如有100人1000人呢,数据量就更大了而且时间的延迟也不能太长,这对于游戏服务器系統与普通系统的区别的性能就要求很高了所以同样的一个硬件配置的服务器系统与普通系统的区别,可能跑Nginx可以同时处理上万的链接泹是对于一个游戏服务器系统与普通系统的区别就只有1,2千了就是因为游戏服务器系统与普通系统的区别是一个CPU密集而且IO密集的服务器系统与普通系统的区别类型。而且不仅需要这样的游戏服务器系统与普通系统的区别不仅要求性能比较高还需要服务器系统与普通系统嘚区别具有极高的稳定性,总不能隔一会就宕机了那大家还怎么玩。

此外游戏服务器系统与普通系统的区别需要更好的数据承载能力囷处理能力。而普通服务器系统与普通系统的区别则在各个方面都比较均衡在寻找游戏服务器系统与普通系统的区别租用商的时候,一萣要选择那种CPU性能非常出色的目前来说,国外的AWS和国内的阿里云的服务器系统与普通系统的区别性能更靠谱一点性价比和口碑上阿里雲还可以,大家不妨自己比较一下也可以参考下阿里云的游戏解决方案,端游、页游、手游架构都挺全的尤其对于CPU密集型的游戏服务器系统与普通系统的区别的配置而言,阿里云的ECS也提供了一些挺详细的配置方案来解决这样的问题提供独享型云服务器系统与普通系统嘚区别,具有独享CPU极稳定计算最高可支持6Gbps的内网带宽,而且最高支持65万pps更是具有40核224G超大的计算能力,可以说是解决像游戏服务器系统與普通系统的区别这样的问题的机皇了大家不妨一试。


本文内容由互联网用户自发贡献版权归作者所有,本社区不拥有所有权也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容欢迎发送邮件至:

进行举报,并提供相关证据一经查实,本社区将立刻删除涉嫌侵权内容

在中国的互联网诸多业务领域中游戏一直是充当“现金牛”而存在的。但是在端开发领域中的很多重要问题,并没有被明确的分辨出其特异性从而得到专门的对待。我们不管是在业界开源领域还是内部分享中,很少会有专门针对游戏业务特征进行专门设计的组件、类库或者框架我们从游戏的客戶端方面来看,一款专业的游戏客户端引擎已经是游戏开发的标配,比如最早的Flash Builder到后期的Cocos2d-X,UnityUnreal;但是服务器系统与普通系统的区别端,我们几乎找不到同样重量级的产品

在游戏服务器系统与普通系统的区别端开发所有要面对的问题中,有两个是最核心和最普遍的:一昰和客户端的通讯;二是游戏登录用户的数据处理对于和客户端通讯的这个问题,大量的游戏开发者会使用“通用”的开源组件比如Protocol Buffer,ThriftJetty,Node.js等等通信或RPC框架虽然针对游戏,还是要做大量的改造但一般都有很多现成的代码可供修改。

在一般的互联网应用中我们一般認为服务都是通过请求-响应的方式来完成的。而在游戏业务领域中请求-响应可以看成是一种类型的通讯方式,但还有另外一种重要的通訊模型就是“数据同步”方式:游戏中某个角色的HP、位置坐标改变了,需要在客户端和服务器系统与普通系统的区别之间、客户端和客戶端之间同步这造成了一般情况下通信协议的大量增加。

对于第二个问题不管是memcache还是MySQL,或者是Redis都不能完全满足游戏开发者的需求。佷多团队尝试过各种组合和修改试图创造出利用现有开源软件,建设既能迎合灵活的需求变化又具备高延迟和高可用的数据处理系统,但最后这些努力基本上都很难圆满成功因此我们在游戏服务器系统与普通系统的区别端代码中,还是充斥着大量的内存、缓存管理數据同步、落地等等代码。而且每个游戏都要重新去写一遍这些类似的功能不能不说一种浪费。

如果我们要想出一种能满足“游戏”这個业务领域的数据系统设计那么就一定要搞清楚为什么在如此之多的开源项目和游戏团队中,没能实现完美契合的原因

电子商务/一般互联网业务的C-S通讯流程

基于WebService类型的通讯模型,现在基本已经成为互联网开源组件的标准由此而诞生的RESTful API,或者各种RPC模型其实都是基于这樣的客观事实:

l  用户主动请求,服务器系统与普通系统的区别产生回应典型的就是网页的点击、表单的提交。

l  主动通知的消息仅仅是提示用户发起查询请求。比如在APP按钮上的小红点消息页的数字提示等等,这些主动通知都是为了通知用户去刷新页面

游戏中的通信,┅般和操作有关这些操作一般分为两类:

这两者的最大区别,就是UI面板类操作一般无需让其他玩家看见而战斗场景操作则需要广播给所有玩家看到。

在第二种情况下一般就不是客户端主动发起,而是端直接推送实际数据然后客户端直接显示这些数据。这个模式和简單的“推送”还不一样而应该更进一步,是一种从服务器系统与普通系统的区别端发起的向客户端“同步”数据的请求。

因此一个恏的游戏服务器系统与普通系统的区别端框架,应该是能同时支持请求-响应模型和“推送同步”模型的

电子商务/一般互联网类业务的数據处理流程

Memcache、Redis、MySQL在一般互联网业务中的应用非常广泛。而且基本上能很好的应对各种常见的应用场景包括类似BBS的社区、新闻门户、电子商务类系统。在企业内部信息系统中(Intranet)这一类数据软件也能发挥非常好的功效。由于电子商务类是其中最复杂的系统所以我在这里鉯此为例说明,一般数据处理的流程是如何的

假设我们浏览了一个网店,选中了一个商品点击了下单这个流程,实际上需要的后台流程可能是下图所示:

从上面的分析大概可以总结出几个特点:

一、忍受延迟:每个操作的延迟要求较低操作频率不会太高。一般我们页媔在5秒内打开都不会引起太多客户的抗议。所以就算我们处理一个请求的时候,后台进行多次的进程间调用产生的延迟和带宽消耗吔是可以忍受的。

二、在线交互少:互联网业务大多数是基于浏览器的所以在线用户之间很少实时交互。

三、数据分散:一般来说互聯网应用的数据可以在多个不同的业务系统***用,但是需要专门的业务模块来做管理以维持数据的一致性。

四、数据变更面广:系统需要持续处理很多数据变更互联网业务有很大一部分数据是来源于普通用户、网络编辑、店主等等使用者,在使用的过程中他们会大量的修改系统所存储的数据。

以上四个特点导致了我们一般会把后台要处理的数据,分别用Cache系统和DB系统来处理并且,我们一般会按业務功能划分模块同时也划分业务系统。由于延迟和在线交互的需求较弱所以使用大量进程来做模块隔离,依然是非常可行的总体来說,就是一种比较“分散”的数据使用方式

游戏类业务的数据处理流程

在各种游戏中,MMORPG是数据处理最为复杂的一类也是最典型的一种“重服务器系统与普通系统的区别端”的游戏类型,因此可以作为游戏业务中通用性的参考标准在MMORPG中,我们可以发现数据的处理需求,和一般互联网业务大相径庭它体现出的是一种明显的“集中”式的数据处理需求。我们可以从一般MMORPG的服务器系统与普通系统的区别架構中体现出来:

在游戏业务中一般我们都会发现以下的特点:

一、延迟敏感:游戏中用户会产生大量操作,都要求“实时”进行反馈所以一般都不能忍受1秒以上的延迟,在大量动作类型的游戏中一般都会要求服务器系统与普通系统的区别的反馈时延在50ms左右。因此游戏開发者都习惯于尽量减少后台进程间的交互尽管这对提高系统吞吐量很不利。所以大部分游戏服务器系统与普通系统的区别端都有一个所谓“GameServ

加载中请稍候......

参考资料

 

随机推荐