游戏服务端的逻辑分服与物理分服
背景
工作室也经历过好几个游戏了。服务端的架构跟实际业务需求出现过不少的冲突。导致后来花了挺多时间去擦屁股的。以最近的一个游戏举例,原本的世界观设想是一个大服的世界观。也就是只有一个服,撑下百万用户,数万同时在线的设计。而后随着业务变化和线上表现,原本大服的设计并不能满足,最终变成了滚服玩法。由于大服变滚服,在原来的服务器架构约束下,对于后续增加的跨服玩法和合服实现都带来了比较大的麻烦和不少的工作量。
物理分服
原来的架构是按照大服设计的,所以在数据库上面的设计一个服对应一个数据库。假设我们滚了500个服,就需要建500个数据库,部署500个游戏服。游戏账号拍卖无论后续跨服、合服的业务扩展,还是运维的维护方面,都变得比较复杂和困难。特别是合服的需求上面,需要将两个数据库甚至多个数据库合并成一个数据库。在量上来的时候,这一切都变得无比繁琐和复杂。开发人员也需要花费较多的人力和时间去写相应的工具。而且操作相对复杂,也比较容易出bug。而且后续新增的业务如果出现了持久化数据就需要增加相应的合服处理。
逻辑分服
如果说我们一开始就已经将数据库合并了呢,是不是后续根本就不需要去合并数据库了。所以如果在当初框架设计的时候就已经按照逻辑来分服的话,后续的事情处理起来就简单多了。问过同行业的一些游戏架构,他们也是这么处理的。
对于合服
因为数据其实还是在同一个库里面,而且也是在同一个服务器里面。只要简单处理,或者甚至不需要任何处理,就可以将两个或多个服合并。只需要在后台设置一下入口配置、可见配置就可以解决合服的问题了。
对于跨服
跨服原本的问题就是需要从不同库读取数据和与不同服进行交互。如果本身就不存在多服的问题,也不存在跨服的问题。
虽然逻辑分服可以比较完美解决合服的问题,但是对于跨服还是需要单独处理。毕竟如果一个逻辑分服的服务器真的扛不住的时候,就会出现真的物理分服。对于跨服的需求来说,可能都是需要跨的。
维护成本
相对于物理分服,逻辑分服可以极大地降低运维成本。数据库数量级可以极大减少,服务器数量也可以减少。对于备份、更新等运维操作都相对变得简单。甚至可以不依赖于运维工具,就可以简单地维护机器了。一台机器部署一个服(多个逻辑服)对比一台机器部署多个游戏服(一个逻辑服),需要初始化的内存一般来说会变小(不排除不一样的情况),机器的资源占用一般来说会小很多。所以对物理机的利用效率可以提高很多。
用户数量级的问题
逻辑分服必然会出现性能瓶颈,不可避免地出现了物理分服、分库的情况。而对于合服来说,合服本身就是发生在用户数量或者同时在线数量不足的情况下出现的。如果用户数量过大,基本上不太可能出现合服的需求。如果前期量级大,已经物理分服了。后期量级小了,其实重新叠回去也不是什么大的问题。只需要跟运营沟通好了,还是可以使用逻辑分服的事情去解决合服的事情。当然如果运营需要真的在不同物理服上面进行合服,我也没有想到比较好的办法,只能又苦逼地去处理的样子。
开发成本
由于逻辑分服,的确是增加了一些内容,譬如玩家所在的服务器ID。但是这个处理起来并没有多大的难度,而且对key值也并没有多大的影响。
逻辑分服的架构对于大世界和滚服都是支持的,只是对于大世界的话,就浪费了一个存储空间和一点点内存。但是这样的框架可以自如应对大世界到滚服之间的变化。如果一开始就按照大世界来设计,万一某一天滚服了,就要麻烦地多。
所以逻辑分服并不会提升多大的开发成本。
游戏服务端的逻辑分服与物理分服相关推荐
- CSGO社区服搭建服务器架设游戏服务端教程
CSGO社区服搭建服务器架设游戏服务端教程 我是艾西,上一篇说了搭建CSGO服务器需要准备服务器以及安装好所需要的环境,那么今天说一下CSGO社区私人服务器怎么搭建游戏服务端 搭建CSGO服务器比较简 ...
- 基于skynet设计游戏服务端框架
skynet并不是一个开箱即用的服务端框架,游戏后端在开展业务时,需要根据自身业务特点,合理设计相应的服务端框架.在这里我根据自身的设计目标,写下各方面的选择与取舍.对于小型企业来说,一些商业化的软件 ...
- 游戏服务端架构发展史(中)
出处:http://www.skywind.me/blog/archives/1301 类型4:第三代游戏服务器 2007 从魔兽世界开始无缝世界地图已经深入人心,比较以往游戏玩家走个几步还需要切换场 ...
- 游戏服务端开发之基础概念扫盲篇
13年毕业后,做了一年多外包web开发,因为受不了在客户现场工作的氛围,愤然辞职.转行做了一名手游服务端开发. 在广州,据我所知,选择java作为服务端开发语言的公司大概有37互娱,百田,银汉,易娱, ...
- 基于滴滴云的棋牌游戏服务端架构设计
现在小团队开发的棋牌游戏有很多,棋牌行业的相互攻击是非常普遍的现象,同行之间往往会采取 DDOS.CC 等攻击的手段来打击对手,这是目前棋牌运营商们面临的比较严峻的一个问题,那么在设计棋牌游戏服务端架 ...
- 百万在线:大型游戏服务端开发
进入手游时代,服务端技术也在向前演进.现代游戏服务端既要承载数以万计的在线玩家,又要适应快速变化的市场需求,因此,如何设计合适的架构就成了重中之重.服务端技术并不简单,作为服务端新人,全面掌握服务端技 ...
- 新一代游戏服务端框架,该是什么样的?
说起游戏服务端引擎,大家会想起Skynet.KbEngine.Photon.Pomelo等等.在探索服务端技术时候,我们不仅仅要了解当代服务端引擎,更要有些前沿眼光,去预测未来的游戏服务端是什么样的. ...
- 谈谈一只菜鸟转行Erlang游戏服务端的经历(希望大佬指导,也希望我的经历能给一些还未毕业的同学或者正在迷茫自己工作内容的同学一些感触)
入行半年Erlang游戏服务端的心得体验 个人经历 转方向后的工作经历 工作中遇到的问题和处理 一些游戏服务端开发的体验和想法 最后谈谈自己现在面临的问题 第一次发文章,主要想谈谈自己近半年来的心路历 ...
- java游戏服务端实现
java游戏服务端实现 一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整个设计流程,并且完成了90%的核心代码.关于这个项目,有很多地方值得聊一聊.本系列不打算把这个项目将得多么详 ...
最新文章
- 【转载】浏览器事件循环机制(event loop)
- 二分 + 模拟 - Carries
- 子网掩码 以及 子网数为什么减去全0和全1
- [NC15665]maze
- 不可不读的绝对英文经典
- [AT2369] [agc013_c] Ants on a Circle
- 2016目录怎么生成_0基础学标书编写,目录可以这样生成,不用再手动排页码了...
- 要毕业了,我应该做点啥?
- Linux下如何编译并运行C程序
- 7 WM配置-主数据-定义拣配区(Picking Area)
- 让用户研究插上数据的翅膀
- pandas.DataFrame对根据某些列对某些列进行修改
- Miniflter中 NPInstanceSetup调查
- Oracle中集合操作符
- ASP.NET 分页技术
- ADB工具包15秒快速安装器,已集合ADB、FASTBOOT工具箱和最新的驱动程序
- 自学Java怎么入门
- [FJWC2018]欧拉函数
- java 方法注释格式_JAVA注释方法及格式
- xsos:一个在Linux上阅读SOSReport的工具
热门文章
- matlab谢尔宾斯三角_城市的公式
- mysql数据库安全审计_MySQL数据库安全日志审计工具
- c# 给文件/文件夹 管理用户权限
- WebDriver自动化测试工具(3)---PhantomJS的使用
- ORA-12541:TNS没有监听器
- centos 6.5 安装 redis
- 终于开通我自己的cnblogs了,自我恭喜下··
- linux redis最大连接数,并发编程-并发下redis连接数监测-Go语言中文社区
- python爬虫机器_Python常用的机器学习库|python爬虫|python入门|python教程
- 系统业务逻辑书籍_咨询行业书籍推荐