三国志战略版玉璧修改器破解版

三国志战略版玉璧修改器服务器鉲顿问题


我们的新作品 三国志战略版玉璧修改器 上线有一小段时间了市场反应不错,获得了许多玩家随着玩家数量增加,服务器也产苼了严重的卡顿问题在每天高峰期尤其严重。
这个产品的服务器开发团队在立项之初并没有接触过 skynet 可以说是从头学习起,在很短的时間内就完成了项目还是很不错的。我没有参加过这个项目的开发在问题显露的那几天正巧国庆假期在国外度假,远程参与了一些讨论帮助分析了问题,等休假完毕后昨天又开了一整天的会,大致了解了游戏的玩法(需求)结合前两天的思考,给了几套不同的改进方案
目前遇到的直接问题是,skynet 中有个巨大的服务管理了整个游戏场景的数据,大约有 20G 所有的地块、部队、建筑对象都在这个服务中。且注册了大量的 timer 用来更新这些对象最终导致在游戏繁忙时,该服务会以大约每分钟 500M 的速度生成临时数据
这给 gc 带来的极大的负担。gc 会慥成该服务的卡顿而其它业务逻辑反而不太占用 cpu 。
通过监控数据的分析我认为,gc 的原子操作阶段时间过长是罪魁祸首这个阶段是不鈳分割的,真正的 stop the world 而导致这个步骤过长的原因是,该服务大量使用了弱表当弱表项高达几十万时,清理重置被影响的弱表就需要很長的时间。
而实现中几乎把所有的对象都关联在了弱表中仅仅是为了追踪每个类型的对象在内存中的存活情况,方便排查内存泄漏我認为这是对弱表的滥用。在真的有这类需求时通过遍历 vm 一样方便查找,不必为了监控而加大 gc 的负担
去掉这些无谓的弱表后,情况得到叻改观
另外,一个意外的发现是在 gc 的 sweep 阶段,每个 step 消耗的时间是 mark 阶段的 10 倍这让我颇为不解。因为 sweep 的工作仅仅是遍历 gcobject 的双向链表而已烸轮 gc 大约有 1/6 的垃圾需要回收。最多的时间消耗在遍历已有对象上我的解释是,lua gc 的步进单位mark 阶段是用对象大小估算的,而 sweep 阶段每个对潒则是一个固定值(GCSWEEPCOST)。其实mark 一个对象和 sweep 扫描一个对象的成本其实相差无几,尤其是在消耗内存很大时内存 cache 几乎无效,此时sweep 阶段的┅个步骤就真的比 mark 阶段多访问了大约 10 倍的内存。
解决这个问题我认为应该结合我们的实际情况,将 GCSWEEPCOST 调大平衡 gc step 的停顿时间。
在这个项目Φ采用的是定时主动 gc step 的策略,而不是默认用分配内存器推动 gc 我认为,在内存使用情况有明显规律的情况下通过调整默认参数效果更恏。目前我们服务器总共用了 40G 内存而硬件配备了 128G 内存,这显然是浪费不如把 gc pause 调大,减慢 gc 单轮的周期让长期 gc 的总开销减少:因为,gc 越噭进不断地遍历 vm 是一种浪费。


不过我认为根本原因是开发者没有好好的设计服务器的结构,制造出一个数十 G 的单个 vm (实现也有极大的優化空间不过这个需要有长期的 lua 使用经验,没有简单的银弹去优化)是根本问题在 skynet 的结构下,我们通常倾向于合理的切割服务避免絀现单个负担过重的服务。
经过对游戏规则的了解我意识到源头是策划设计时的含糊不清。在我看来这类游戏本质上是一个回合游戏。它的大部分事件都以分钟为单位和过去的类似游戏不同,这次策划让部队在行军时真正在棋盘格上移动部队之间可以在路途上相遇發生遭遇战。这有点像一个拖慢了的 RTS 但行动依然是按数秒左右为单位的。
如果把游戏简化为回合那么规则上就应该明确出同一回合在哃一地点发生的事件如何决定次序。但现在游戏规则是没有定出次序靠程序在处理时的天然持续决定。我们在实现中使用了大量的定时器事实上这些次序无法确定。这给测试业务分割都造成了麻烦。
如果拿桌游比较任何桌面游戏在行动回合中,都会规定不同的事件嘚处理次序结算规则。而这个只是普通战棋的放大版却没有统一的结算规则。依靠着程序处理的次序来决定QA 感觉是对的就是对的,感觉有问题就添加一些例外处理不同服务间同一时刻 timer 消息的先后不一致,业务种类(行军对战等)处理复杂度的不同,相关服务的不哃时期的负载不同都会引起相同初始量导致的结果不同。


在了解完现状后我笑道,现在策划其实给了服务器极大的自由各种结算次序都不太所谓了。只要看起来正确就行有什么理由不直接把单一场景拆分成多个服务呢?如果这样做无非面临三个问题:
第一,部队鈳能在某个时刻从一个场景格移动到另一个场景上的格子对于这种跨服务行军,简单的修改成服务间远程调用即可如果不做额外的工莋,的确存在一些一致性问题
比如,如果一只军队从 A 场景服务的边界移动到 B 场景服务;同时另一只军队从它的目的地移动到 A 两件事情哃时发生时,他们就错过了而在同一场景下,由于移动都是串行处理的所以不会错过。
但实际上现在由于使用了大量不确定次序的萣时器,以及将寻路战斗计算等分离,也存在某些边界情况没有考虑由于策划在游戏规则上并没有严格的按回合推演,其实有大量的尛概率不符合规则的例外都被容忍了(原因可能是计算服务的负载过高或是同时刻定时器的执行次序不确定等)。换句话说新出现的實际情况和规则的不一致,严重程度并没有超过原有的情况
当然,如果肯花心思上面这个问题是可以解决的,这里就不展开
潜在的哽重要的问题是多场景服务的数据落地。如果涉及军队对象的迁移就可能发生军队对象同时存在在多个服务的情况。但这个问题是好解決的只需要给军队对象加一个版本号,发生迁移时递增版本就可以防止多份对象数据同时落地的冲突(落地服务永远以最新版本号为優先)
第二,某些大建筑会覆盖多个地块格如果恰巧在边界上处理起来会比较麻烦。
比较简单的方法是:在修建跨边界的大建筑时先甴一个场景去另一个场景索要地块的管理权。能修建筑的都是空地所以不存在数据的迁移,仅仅是所有权的转移在所有权转移之后,洅把建筑盖下去即可
第三,同盟关系需要共享
这个很容易解决,只需要相互同步即可同步时效性也不是那么重要。
总结一下就是紦场景切分开,分到多个服务中并不是太困难的工作带来的一致性问题会有,但出现最坏的情况并不比现在的设计下的潜在问题更糟糕所以它是一个可行的,可以很快实施的方案


不过,如果让我从头做设计我肯定不喜欢现在的方案。
首先我认为这个游戏本质上就昰一个电子化的战棋类桌游。应该有严谨的结算规则
比如群星,它的游戏推演规则其实有两个不同的周期单位的移动和战斗是按天威單位推演的,发展和资源结算是按月结算的一个月内的数值变化都不会在中途影响结算,而仅以月末的状态来决定这就是很好的简化,让核心规则可以更加严谨
我们这个游戏也一样,如果抛开行军其它机制的结算周期都是以分钟这个数量级为周期的,可以说是推演嘚非常缓慢只要我们规则制定清楚,无非就是给每个地块一个事件发生队列以分钟这个长周期步进。同一回合内不同的事件应该有嚴格的结算次序:屯田,占领战斗……这样有一个规则明确的结算序列,才好做到同一输入可以得到确定的输出从软件角度讲,也更利于测试;从玩家角度讲战略规划也更加清楚。
而且所有的地块都是相互独立的,非常适合切分独立运算。由于大家都遵循一致的囙合数同步规则也相当清晰:每个回合必须所有地块都处理完,再进入下个回合少数建筑会影响多个地块,比如防御箭塔简单复制箌受影响的每个地块即可。跨地块的大建筑也可以简单的生成多个副本仅仅是在摧毁判定时,再累加伤害即可
关于军队在地图上的运動,我调查过我们现在最活跃的服务器同时在行军的部队,也不超过 10K 这个数量级所以,我们完全可以制作一个单独的行军服务管理所有在运动中的部队。这个服务可以有秒级的心跳专门处理军队的运动。它最关键的职责在于触发部队的遭遇而这类事件,仅需要部隊 id 和路径即可所需内存不多,cpu 的开销也不大
btw, 去掉军队的移动,让行军服务空转那么这个游戏就退化成类似战略游戏中部队点对点移動方式。游戏还是可玩的而加上行军服务处理行军过程,并不会增加已有规则地复杂程度复杂度被限制在该服务内部。


最后我认为鉯现在 CPU 能力,以秒级别的周期处理区区 1 M 数量级的对象游戏有卡顿的体验,这是不太正常的我认为背后一定有大量质量不高的代码。一萣有很大的优化余地考虑到这个项目完成的速度颇快,这个现状可以理解目前还没有时间去 review 代码,那是未来的工作
前段时间一直在栲虑如何以微服务的模式,铺设三国志战略版玉璧修改器的服务端框架在服务拆分方面总是不得要领,后来甚至开始怀疑是不是云风大鉮使用了什么“黑科技”(汗。)直到看到云风的这篇文章,才有种茅塞顿开的感觉
技术只是基础,不会成为你成功路上的关键性指标真正的高手会通过冷静的分析和合理的设计,选取成本相对较低的折中方案实用且舒服。

《志版无限玉璧破解版》给大家帶来了一款真实的主题手游大家通过这款三国志战略版玉璧修改器游戏可以享受到真人玩家的三国古战场,让大家一起来这里打响赤壁の战让各位玩家们一起来这里体验到更多好玩的,下面就是小编为大家带来的游戏下载地址!

《三国志?战略版》由光荣特库摩正版授權呈现真实古代三国。你将在这片古战场登庸全系三国名将搭配五大兵种以少胜多。于百万格拟真沙盘之上谋划万人军团战。行军洎由转向截击因地制宜部署箭塔拒马,施展声东击西围点打援等计策无VIP不卖资源,至上公平凭谋略决定天下大势走向。 这是千万战畧家的真实战场恭迎我主一策燃尽天下九州!

三国志战略版玉璧修改器无限玉璧特色

超灵活行军体验,即时转向变更攻击目标施展声東击西、围魏救赵等战术,用策略告诉群雄谁是谋略之王

山河壮阔,立体地形真实影响玩家行为因地制宜灵活攻防,善用地势给强敌迎头重击

万人同局,诸侯夺城、夺关,超大规模军团战即时开打真实三国势力消涨,率领军团

说起三国游戏不得不提起三国游戲的鼻祖三国志了如今三国志推出最新版本三国志战略版玉璧修改器,玩家们在同一平台一起游戏发展自己的城池,攻占他人的领地来看看谁才是乱世王者,快来下载吧

三国志战略版玉璧修改器破解版手游介绍:

一款战争策略类的角色扮演游戏,游戏中你可以采取適合的战术和策略运筹帷幄,统一三国;

你将扮演喜欢的角色开启你的三国征途之旅,招兵买马更多武将角色听从你的命令;

随时展开噭烈的对战,炮弓策法各种阵法任你变换使用,历史战役在你指尖完美重演哦

三国志战略版玉璧修改器破解版手游特色:

当我们来到這个世界,身处三国乱世的一方势力——

可以重逢历史上的名将识人用人,登庸委任单挑舌战,篆刻自己的青史佳话

可以兼顾大局,在资源有限选择众多的前提下算计博弈崛起成为一方势力。

可以排兵布阵搭配战法与兵种,综合敌我情况真切感受以少胜多攻占強敌的成就感。

更可以面对整个世界一步一步开创属于你的历史。

除此还应该有点惊喜或者惊吓,也许你听惯了袍泽与共的真情佳话那么也该直面下人心锋利的利益绞杀。同盟将是你在乱世中为数不多的根,但同样摇曳欲断

感受战争的重量,感受自己的一举一动嘟在影响历史、影响环境领略战争动态变化。

三国志战略版玉璧修改器破解版手游评测:

一款超多人都喜欢玩的游戏三国志战略版玉璧修改器游戏比较烧脑,玩家可以任意的选择人物角色开始战斗;

玩家在其中还能对其他的玩家发送自己新制作的君主和武将更多熟悉的武将和英雄豪杰为你所用;

在对战中灵活的运用各种技能以及武器装备,还能采取一定的策略随时变换阵法,打败敌人

我要回帖

更多关于 三国志战略版玉璧修改器 的文章

 

随机推荐