目录

北大侠客行副本



副本由来

副本机制的产生实际是为了解决mud驱动(从以前的mudos到现在的fluffos,以下简称driver)的单线程运行导致性能受限的问题。这个问题导致无论服务器有多少个核,driver都只能在其中一个上跑,无法发挥服务器的多核优势。当玩家增多程序复杂时,需要处理的mud事件消耗了单核CPU的所有计算能力,但仍然无法及时处理所有命令,这时就会出现系统卡顿,driver进程的CPU使用率长时间100%。

北侠在2018-2020年期间长期受困于此问题。2020年北侠转移到阿里云上时,专门选择了单核主频最高的高主频型云主机,卡顿现象有所好转,cpu平均负载在75%左右。但伴随着云服务器性能和网速的提升,玩家数量和指令量也在加速提升,出现了路面宽了路更堵的现象。同时还有新功能的不断上线,系统卡顿日益严重,不到两个月时间又经常维持在100%。

开发历程

2020年9月,icer提出副本的构想:在主站之外启动另外的driver,专门跑非常消耗CPU资源的高级任务,如藏经阁等。这样可以利用操作系统的cpu调度机制自动利用多核资源,分担单核CPU负载。这种分布式架构在网络游戏中非常普遍,但由于网络游戏都是用自带的客户端,可以在多个游戏服务程序间无感切换,玩家感觉不到网络中断。比如进入副本时,通常是连续的读档进度,而不会要求玩家重新登录。但Mud游戏不同,采用的是zmud,mushclient这种通用客户端,并没有无缝切换服务程序的功能,而如果让玩家为了完成高级任务还要重新连接未免有点强人所难,同时游戏档案的同步也存在问题。

2020年11月,副本机制初步调通,验证了副本机制的可行性。但限于技术能力,icer无法独立完成如此复杂的系统,之后的副本系统整体设计和开发完善工作主要由zine完成,icer主要精力转向替代高CPU消耗的功能的efun开发和移植(感谢super@NT,提供了efun源码可供参考和修改)。

2021年6月,在经过半年多不懈努力,修改了无数bug,突破了若干技术瓶颈之后,第一个副本任务“藏经阁”终于上线。然后又陆续上线了“鄱阳湖”、“万安塔”、“保卫襄阳”、“剿匪”四个副本任务,结合扩展efun的使用,终于将CPU又降低到日均75%左右,游戏重归丝滑。

2023年1月,北侠同时在线的玩家从2021年的400左右增加到700左右,增加近80%,主站负载在繁忙时段又开始不堪重负。虽然得益于北大侠客行命令缓冲机制,卡顿并不明显,但仍然限制了新功能的开发和实装空间。为此巫师推出了一系列降低主站负载的举措,包括新的练功副本:剑心居

系统影响

副本系统上线后,玩家进入任务无需重新连线,只需等待2秒左右即可穿梭到另外一个driver驱动的副本里,完成任务后无感回到主站,基本与副本上线前相同。

副本这种分布式架构使得副本任务的设计可以无需顾忌cpu计算量,只考虑任务的复杂性和趣味性,不用再为降低性能而简化、抛弃原有设计。另外,为了副本间信息流通而设计的跨站调用机制也为高计算量的任务从主站分离提供了支撑。目前在任务副本之外还有若干功能副本,为主站分担数据库、短视频以及其他频繁或者高计算量的工作。

但副本机制的复杂性也使其成为了一个bug的重要来源。虽然上线之前花了大量时间精力debug,但由于副本机制影响的广泛性,无法穷举所有可能。所以在副本上线后一直都有副本相关的bug被发现和利用。这个影响一直延续至今。

北侠是大陆所有mud中第一个也是目前唯一一个设计并使用分布式副本机制的。这是由于多个因素造成的,主要还是CPU性能的压力。北侠玩家众多,玩家编程水平较高,高性能机器人频繁发送命令极大消耗了CPU性能。同时,北侠的开发追求细节,加入了很多武侠之外的因素和设计。各类环境、生活细节的设计和实现除了给玩家带来或真实或有趣的感受之外,也消耗了大量CPU来进行计算,如果使用十多年前的旧版本,没有这么多细节设计,北侠的CPU也会像许多现在的mud一样维持在很低的水平。再加上北侠复杂多样的任务系统的不断丰富,CPU资源成了优化的首要目标。

北侠副本系统是北侠巫师团队技术能力的体现。巫师团队为了全面提升玩家的游戏体验,既不放弃细节设计,也不放弃丝滑流畅,而是从各个方面进行突破。目前结合副本、efun、命令数动态调整机制,并在fluffos作者针对北侠进行优化之后,北侠当前日常cpu基本维持在50%左右,已经彻底消除了CPU焦虑,可以继续把精力投入到丰富功能、完善细节、不断更新上!