游戏服务器常见问题的解决方法分享

Tom发布于:2021-08-22阅读:0

在游戏开发设计中,大家常常会碰到一些技术难点,而其引起的bug则会影响整个游戏的品质。

负载保护、群集、服务器通讯、高并发型号选择等方面的问题,是中小型精英团队经常的技术难点,文中分享了一些权威专家在出诊全过程中提及的解决方式,期待对大家有一定的协助。

问题一:游戏玩家登陆时获取朋友信息内容,但朋友服务项目忙碌造成登录失败。

解决方式:

1、分离出来关键线路上非关键启用,减少事务管理步骤,避免附近服务项目异常堵塞登陆。

2、服务项目熔断机制,超过解决能力快速不成功,避免山崩。

3、按客户防护事务管理,避兔单独客户要求堵塞影响到别的用户。

问题二:压测高并发登陆对redis产生非常大工作压力。

解决方式:redis数据分析表总数多,一次事务管理会产生多个redis要求,小表合拼为大表。

Wade:服务器过程的管理方法一般较为简单,有很多还是用配置文档静态数据机构的。与此同时通常进程间通信的方式较为欠缺,沒有使用消息队列分布式数据库,乃至也有用Redis来做通讯部件使用的。为了更好地提升群集管理方法的自动化技术水准,使用ZooKeeper是一个较为普遍的方式。

Zc:redis一般作为运行内存缓存文件来使用,不适合将重要数据信息储放在redis中.其数据信息安全系数并比不上一般的DB。在使用全过程中也需要参照性能基准线,控制浏览頻率和流量。

问题三:外界服务项目有延迟时间,启用到的工作流程中产生卡屏。

解决方式:业务流程侧提升缓存文件:一起玩朋友msdk 近期人物角色id 人物角色信息内容。

Wade:许多精英团队针对负载保护不足高度重视,通常只在最表层接入客户端一侧有较大连接数或是较大对话数的限制。而针对內部的多个过程,例如浏览数据库的过程,就沒有过多的负荷保护。因为游戏是带情况的过程比较多,因此 web服务通常也做的很少,大部分是按情况所属过程去分享解决要求。

Zc:留意缓存文件和退级解决。外界服务平台数据信息,尽可能缓存文件,提升浏览感受。当发觉外界服务项目出现常见故障,或自身出现负荷风险性时,应退级服务项目。

Jovi:msdkmidas平台权利等api接入工作中,游戏业务流程可以创建一个隔离层专业解决这方面要求,避兔太过入侵游戏逻辑性,更非常容易控制。

问题四:经营和在线客服插口改动游戏玩家数据信息,会与一切正常游戏的数据信息回写产生市场竞争。

解决方式:使用相近电子邮件体制去改动数据信息。

Zc:线程同步开发设计中,常常会出现线程池耗尽或线程死锁造成服务水平降低。提议将线程池依据业务流程要求有效归类,不一样业务流程间有有效的负荷配制,不会互相影响。非关键步骤需要推迟或是多线程化解决,避免卡住重要步骤。

与此同时,有效的进程实体模型可以合理降低进程间市场竞争。对的确需要市场竞争的資源在步骤入口统一井然有序上锁,避免在逻辑性全过程中,随便嵌入取锁市场竞争。而且,给锁加个请求超时時间,避免业务流程终断。

Jovi:保证同一時刻只有单独数据信息改动点,有利于避免数据信息市场竞争。提议设计时选用CQRS方法,选用独立的数据分析表和服务项目记录事情,归纳到单一改动服务项目上实行。

Wade:并发编程是服务器端最普遍的问题,一般会用线程同步或是非堵塞二种方式之一解决。针对纯天然适用线程同步的语言表达,如JAVA,许多开发人员趋向线程同步,益处是编码撰写起來较为便捷,可是这就需要很保持清醒的对各种各样目标进行锁的实际操作,或是娴熟使用相近java.util.concurrent这类线程同步专用工具库。而假如使用非堵塞,益处是不会有锁的问题,但编码被切分到每个调用函数中,易读性十分槽糕,因此 有的精英团队会使用“协同程序”或是Promise这类的专用工具来减轻这一问题,但这也引进了大量的多元性。

下边详尽介绍一下游戏服务器端构架中的生产调度构架,便捷大家了解。

a)单过程游戏服务器

最简单的游戏服务器只有一个过程,是一个点射。这一过程假如撤出,则整个游戏全球消退。在这里过程中,因为需要解决高并发的客户端的数据文件,因而产生了多种多样挑选方式:

[图-单进程调度实体模型]

同歩-动态性线程同步

每接受一个客户对话,就创建一个进程。这一客户对话通常便是由客户端的TCP连接来意味着,那样每一次从socket中启用载入或写下数据文件的情况下,都可以使用堵塞方式,编号形象化而简单。有多少个游戏客户端的连接,就有多少个进程。可是这一方案也是有很显著的缺陷,便是服务器非常容易产生很多的进程,这针对内存占用不太好控制,与此同时进程转换也会导致CPU的性能损害。更关键的线程同步下相同一块数据信息的读写能力,需要解决锁的问题,这很有可能让编码变的比较复杂,导致各种各样死锁的BUG,影响服务器的稳定性。

同歩-多线程池

为了更好地节省进程的创建和释放出来,创建了一个线程池。每一个客户对话创建的情况下,向线程池申请办理解决进程的使用。在客户对话完毕的情况下,进程不撤出,只是向线程池“释放出来”对于此事进程的使用。线程池能非常好的控制进程总数,可以避免客户疯涨下对服务器导致的连接冲击性,产生一种排长队进到的体制。可是线程池自身的完成非常复杂,而“申请办理”、“释放出来”进程的启用标准需要严格执行,不然会出现进程泄漏,耗光线程池。

多线程-单核/协同程序

在游戏领域中,选用Linux的epoll做为网络API,以求获得高性能,是一个普遍的挑选。游戏服务器过程中最普遍的堵塞启用便是网络IO,因而在选用epoll以后,整个服务器过程就很有可能越来越彻底沒有堵塞启用,那样只需要一个进程就可以。这完全解决了线程同步的锁问题,并且也简单化了针对并发编程的难度系数。可是,“全部启用都不可堵塞”的管束,并并不是那麼非常容易遵循的,例如有一些数据库的API便是堵塞的;此外单过程单核只有使用一个CPU,在如今多核多CPU的服务器状况下,不可以充分利用CPU資源。异步编程因为是基于“回调函数”的方法,会造成要界定许多调用函数,而且把一个步骤里边的逻辑性,各自写在多个不一样的调用函数里边,针对编码阅读文章十分不好。&—&—对于这类编号问题,协同程序(Coroutine)能不错的帮助,因此 如今较为时兴使用多线程 协同程序的组合。无论如何,多线程-单核实体模型因为性能好,不用高并发逻辑思维,仍然是如今许多精英团队的优选。

多线程-固定不动线程同步

它是基于多线程-单核实体模型演变出去的一种实体模型。这类实体模型一般有三类进程:主线任务程、IO进程、逻辑性进程。这种进程都是在內部以全多线程的方法运作,而她们中间根据无锁消息队列通讯。

b)多进程游戏服务器

多进程的游戏服务器系统,最开始始于针对性能问题要求。因为单过程构架下,总是会存在承载能力的極限,越发繁杂的游戏,其单过程承载能力就越低,因而开发人员们一定要提升过程的限制,才可以支撑点更繁杂的游戏。

一旦踏入多进程之途,开发人员们还发觉了多进程系统的别的一些益处:可以利用上多核CPU能力;利用操作系统的专用工具能更细心的监控到运作情况、更非常容易进行容灾备份解决。多进程系统较为經典的实体模型是“三层架构”:

在多进程构架下,开发人员一般趋向于把每一个控制模块的功能,都独立开发设计成一个过程,随后以使用进程间通信来融洽解决详细的逻辑性。这类观念是典型性的“管路与过滤装置”架构设计观念&—&—把每一个过程当做是一个过滤装置,客户发过来的数据文件,流过多个过滤装置对接而成的管路,最终被详细的解决完。因为使用了多进程,因此 优选使用单过程单核来结构其中的每一个过程。那样针对游戏软件开发而言,结构清楚简单许多,也可以得到 高些的性能。

[图-經典的三层实体模型]

虽然有很多益处,可是多进程系统还有一个需要需注意的问题&—&—数据储存。因为要确保数据的一致性,因此 储存过程一般都无法切分为多个过程。即使对关系型数据信息做分库分表解决,也是比较复杂的,对业务类型有依靠的。并且假如单独逻辑性解决过程安装不上,因为其运行内存中的数据信息无法切分和同歩,开发人员难以去平行面的拓展某一特定领域模型。她们很有可能会挑选把领域模型过程制成无状态的,可是这更为加剧了储存过程的性能工作压力,由于每一次业务流程解决都需要去储存过程处获取或载入数据信息。

除了数据信息的问题,多进程构架也带来了一系列运维和开发设计上的问题:最先便是整个系统的布署更加繁杂了,由于需要对多个不一样种类过程进行连接配置,导致很多的配置文档需要管理方法;次之是因为过程间通信许多,因此 需要界定的协议书也总数巨大,在单过程下一个调用函数解决的问题,在多进程下就需要界定一套要求、回复的协议书,这导致整个源码规模的量级的扩大;最终是整个系统被分尸为很多个功能简短的编码精彩片段,如果不了解总体结构,是难以了解一个详细的工作流程是怎样被解决的,这让编码的阅读文章和工作交接成本费巨高极其,特别是在游戏行业,因为工作流程转变 十分快,饱经改动后的系统,基本上没人能彻底把握其內容。

天地數据有着超15年游戏经营工作经验,全世界50 CN2顶尖网络,1300 个CDN连接点資源,包含并不但仅限于我国香港,美国,日本,韩国,新加坡,新加坡等10多个国家直接CN2快速专线接入。没有理由免备案空间,提供智能化系统DDOS安全防护升級,web服务优化,数据库群集服务项目及提议,CDN连接点合理布局优化等一系列高品质服务项目,打造出适合企业稳抓顾客合理布局全世界的全能游戏解决方案。详詢微云网络客服热线400-0289-798。

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:shawn.lee@vecloud.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

本站原创内容未经允许不得转载,或转载时需注明出处:https://news.kd010.com/fwqjs/2201.html

TAG标签:游戏服务器

上一篇:游戏服务器一般问题以及处理方法
下一篇:手机游戏服务器优化方向指南

相关文章

返回顶部