游戏服务器架构与性能优化相关的一些问题
问题一:游戏在线人数过多出现卡顿,是怎么造成的?服务器硬件还是网络或是其他原因?
答:原因有很多种,要根据不同情况进行分析:
1、手机或者电脑的性能不好,客户端自己卡顿,表现在fps很低;
2、网络本身的问题,比如丢包、高延迟,或者手游时的弱网,都会导致客户端卡顿,比如转菊花;
3、服务器负载高,性能下降,导致无法及时的处理客户端的请求,可能是服务器硬件本身需要升级,另外一方面是程序自身的bug导致的吞吐量不够,性能低、还有就是可能是架构问题,比如没有分布式处理,无法动态扩容。
问题二:当一款游戏走到生命的中后期时,经常需要进行大量的合区操作,请问对于频繁的合区有什么比较好的解决方案?
答:可以采用存储层全区全服,接入层和逻辑层分区分服的服务器架构,规避合区时对数据的处理成本。简单来说就是存储层要统一进行管理,不隔离开来,以保证前端不同区的游戏服务器可以访问任何一个区的核心数据,接入层和逻辑层分小区,让玩家在不同的服务器上游戏。
可以采用中心全局DB的模式,合服无需任何DB操作,只是一些配置的变更而已,可以做到自动化。
问题三:状态同步或者帧同步,如何保证通讯流畅?即时对战游戏,如果设计同步机制,如:状态同步与帧同步,从服务器的角度来讲如何保证通信流畅?
答:关于通信这块,建议协议选择UDP,包的大小控制在576byte以下,重要信息选择可靠UDP,不重要信息采用非可靠UDP,考虑到丢包可以采用冗余方案,另外客户端选择接入一些加速产品。
问题四:请教AI实现在客户端还是服务器?客户端桥接同步还是直接写在服务器,靠服务器同步给所有客户端呢?
答:和游戏单局选择的同步方案有关, 例如王者使用了帧同步,AI计算是放在客户端的,开局服务器给客户端下发随机数种子,基于相同的种子, 根据帧号,各客户端可以计算出一致的AI状态,这块的反外挂可以通过服务器抽查各客户端的计算结果是否一致的方式来做。而也有很多游戏,例如逆战,天刀,魂斗罗等使用了状态同步,AI计算放在了服务器,3D碰撞处理这些也放在了服务器跑,这块有做一些深入的优化。
问题五:关于UDP的一些小问题
1、王者荣耀的UDP是如何实现的?UDP+EPOLL还是多线程?
2、UDP如何保证可靠性?你们冗余具体是怎么做的?
3、服务器发送的数据需要缓存吗?如果是缓存多少合适?
4、如果发送给客户端的包丢了,且包由于在发送缓存已满的情况下缓存怎么办?
5、战斗数据在服务器端会缓存吗?
6、服务器有没有做演算?是否用的帧同步?
答:没有具体参与到王者项目中,从其他渠道获得过一些信息,不一定准确,供参考:
1、用的是互娱研发部的UDP组件,非可靠UDP,UDP+EPOLL即可,不用多线程;
2、没有用可靠UDP,效率比较低,通过冗余方式来保证,具体方式是,后续的UDP包会冗余一定量的前面已发送的UDP包,比如,在等前面的udp包的应答的期间,后续udp包把前面未应答的包附在后面,可以根据情况冗余多个,直到收到前面的的应答,这是通过流量来换取效率的方式;
3、没明白你说的这个缓存是什么意思,帧同步的时候,他们的服务器会并帧下发给客户端,比如客户端是30帧,服务器就15帧下发;2并1;
4、加大缓存可以缓解问题,但不是解决办法,要分析为什么会出现这种情况,说明设计有点问题,某些玩家的网络就是有问题,那就需要牺牲掉网络差的玩家的游戏体验,优先保证网络好的玩家的游戏体验,所以某些玩家迟迟不应答,包丢了就丢了,不再管他们的游戏体验;
5、他们用的是帧同步,服务器会进行一定的校验,但不跑完整的游戏逻辑,为了反外挂,可以旁路一个完整的校验服务器,需要跑完整的游戏逻辑;
6、见5。
问题六:登陆并发问题的较优的方案大概是什么样的,有关下面的处理方面。
1、数据读取并发。
2、数据缓存。
3、包体。
4、网络缓存。
5、服务器组织结构。
6、崩溃方案。
答:
1、分布式存储,或者现在流行的nosql数据库,都支持海量的并发读取;
2、cache是必不可少的,甚至可以采取多级cache;
3、这个没有明白什么意思,是指包体太大了么?可以压缩;
4、对接入层要求比较高,现在服务器的前端接入层都是独立出来的,采用分布式方案也可以解决;
5、应对海量服务的服务器架构必须是各模块扩展的,没有单点瓶颈,要有比较好的负载均衡机制;
6、高可用性,可以采取有损服务,即某台服务器的崩溃不影响其他服务器的人,把影响尽量缩小,而且能够快速的恢复,涉及到监控、告警、备份及动态调整;
比如腾讯的海量服务器有自己的一套方法论和落地方案,不管是游戏还是其他互联网服务,可以google一下:“腾讯 海量服务之道”,网上有很多文章。
问题七:学习游戏服务端编程,需要学哪些技术?
答:以腾讯的游戏服务器端为例,主要的知识技能有以下几个部分:
1、操作系统:主要是基于unix/linux的,所以,操作系统相关的需要熟悉了解,可以从初步了解到会用再到深入学习,推荐一些书籍:《Linux初学者指南》、深《度探索Linux操作系统:系统构建和原理解析》、《LINUX命令行与SHELL脚本编程大全》、《深入理解计算机系统(原书第2版)》、《unix高级环境编程》等,主要还是要多动手;
2、编程语言:C/C++、lua、python,腾讯这边服务器端用java等其他编程语言的比较少,这些就不多说了;
3、网络编程:《TCP/IP协议原理》一二卷、《unix网络编程》一二卷;
4、数据库:关系型数据库mysql、现在比较流行的nosql类数据库也要熟悉了解,有很多开源的;
5、设计模式、面向对象等;
如果要比较深入的从事游戏开发,最好还要能够了解下游戏客户端相关的开发知识技能,艺多不压身;
熟悉掌握这些知识技能,从事游戏后台开发基本上没有问题了,更多的还是参与经历项目,了解后台的架构和开发流程,以及与客户端和策划运营同学的交互方式,这个就更多的要从项目实战中锻炼、学习和总结了。
最后:在2021年1月13/14号直播讲解:游戏服务器框架—云风的skynet训练营
现在已经开放报名,感兴趣的诸位同好可以订阅一下,
期待与诸位同好共襄技术盛举
凭借报名截图可以进群812855908领取上一期skynet训练营的录播以及这期的预习资料哦!
游戏服务器架构与性能优化相关的一些问题相关推荐
- online游戏服务器架构--数据库及事件相关 .
Online服务器的第三部分就是数据层,send_request_to_db开始了数据层的处理逻辑: int send_request_to_db(int cmd, sprite_t* p, int ...
- 百万用户同时在线游戏服务器架构实现.doc 基于epoll 通信模型
http://wenku.baidu.com/view/02033d0af78a6529647d53fc.html 百万用户在线网络游戏服务器架构实现 一. 前言 事实上100万 ...
- 游戏服务器架构设计的一些整理
一.前言 没有最好的架构,只有最适合自身业务的架构. 首先我们应该确定的是大的架构方向:分布式 / 单应用+负载均衡,这两种架构设计直接影响后续的网络层.缓存层.数据层.业务层的设计.笔者这两种架构的 ...
- 百万用户级游戏服务器架构设计
百万用户级游戏服务器架构设计 服务器结构探讨 -- 最简单的结构 所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求.所以,结构本无所谓正确与错误:当然,优秀的结构更有助于系统的 ...
- [转贴] 游戏服务器架构
这里讨论的游戏服务器架构大概是目前国内乃至世界上的网游通用的一种架构了: 有段时间没有研究技术了,这次正好看到了新版的mangos,较之以前我看的版本有了比较大的完善,于是再次浏览了下他的代码,也借此 ...
- 【转】游戏服务器架构探讨
这里讨论的游戏服务器架构大概是目前国内乃至世界上的网游通用的一种架构了: http://bbs.gameres.com/showthread.asp?threadid=93775 作者:qinglan ...
- 如何设计大型游戏服务器架构?
一.游戏服务器特征 游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求.所以这类服务的特点是要特别关注稳定性和性能.这类程序如果需要多个协作来提高承载能力,则还要关注部署和 ...
- 疯狂架构师最强分享:分布式架构与性能优化,你学会了吗?
分布式系统在如今越来越普及,了解分布式系统中的原理与实现更是很重要,本系列从分布式原理以及性能优化角度来剖析分布式架构 彻底搞通服务发现的原理和实现 服务发现,作为互联网从业人员,大家应该都不陌生,一 ...
- 游戏服务器架构演进(完整版)
http://gad.qq.com/article/detail/32876 这是王者荣耀技术分析系列第三篇,有兴趣请持续关注我的blog和公众号. 1.像<王者荣耀>一样红过 2.从& ...
最新文章
- Kaggle经典数据分析项目:泰坦尼克号生存预测!
- virtual box卸载后无法正常安装
- 如何在Pandas的DataFrame中的行上进行迭代?
- 服务器设置为自动登录,Windows Server 2008 R2怎样设置自动登陆(登录)
- 获取当前绝对工作目录与被执行文件的绝对目录
- 【JavaScript框架封装】实现一个类似于JQuery的缓存框架的封装
- 浅谈:数据结构之单链表,java代码演示单链表
- java 实现自旋锁_java自旋锁的代码实现
- 交流:Ghost版系统安装简单分析
- js设置北京时区_盘一盘 Python 系列特别篇十九之 时区和夏时令
- 系统动力学建模代做,vensim建模代做,流图建模,不确定分析。
- python将字典写入txt文件_将一个字典写入txt文件并将其读回来?
- XPS笔记本及各类超薄笔记本的白果网卡安装教程
- 计算机教育主编在线审查,大学计算机基础教程-王慧儒主编.pdf
- 如何简单进行CAD图层绘图?
- 一个线程OOM,进程里其他线程还能运行么
- vue 用echarts写的进度条组件
- winrar打开导航已取消是什么原因
- Java 使用Socket 实现基于DTU的TCP服务器 + 数据解析 + 心跳检测
- 如何快速实现往全国寄快递?