更新服务器程序的配置数据的方法及设备的制作方法

文档序号:6434098阅读:126来源:国知局
专利名称:更新服务器程序的配置数据的方法及设备的制作方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种更新服务器程序的配置数据的方法及设备。
背景技术
在服务器程序正常运行前很多预置的配置数据项将会被读取到内存中,以供服务器程序正常运行时共享使用。一般情况下,配置数据有效期为一次启动服务器程序后,一直要使用到下次更改并重启服务器程序前。为了不需要重启服务器程序就能实现数据的动态更新,后台可以提供修改配置界面,服务器程序设计定时检测数据配置的更新机制。而在多用户线程模式下,工作的服务器程序或为多客户端提供服务的服务器程序如果要动态更新某一配置数据,必须将该内存进行“锁操作”才能更新内存值。否则会导致数据的不完整甚至于逻辑错误。而锁定配置数据缓冲区后用户线程暂时不能再读取到该配置数据,用户处于等待状态。对于实时性很高,用户量很大的服务器程序,如果某项配置数据内存项正在被很多用户使用,很难加锁。即使加锁了,如果配置项的数据量大,锁死内存数据进行更新的这一过程需要花费一定的时间,这一过程会让用户感觉到服务器程序停止,没反应,用户体验非常糟糕。由于无法解决上述“锁操作”带来的用户使用延时的问题,现行采用的方式是,每次有数据更新,都要花费几分钟甚至几十分钟(对于大型分布式服务启动就更慢)来启动服务器程序后,配置数据才生效。这种方式将直接影响生产效率,导致用户体验很差。

发明内容
本发明的主要目的在于公开一种更新服务器程序的配置数据的方法及设备,使之在不影响用户在线使用的状态下实现数据的动态更新。为达上述目的,本发明公开的更新服务器程序的配置数据的方法包括服务器程序启动,在内存中划分出第一全局缓冲区和第二全局缓冲区;所述服务器程序将配置数据写入第一全局缓冲区,完成写入之后,将该第一全局缓冲区的状态变量设置为活动状态,并将该第二全局缓冲区的状态变量设置为睡眠状态;所述服务器程序根据活动缓冲区的配置数据正常运行,该活动缓冲区即状态变量为活动状态的全局缓冲区,与之相对的睡眠缓冲区即状态变量为睡眠状态的另一全局缓冲区;在后台对该服务器程序的配置数据进行一次更新的过程中,由当前的活动缓冲区提供上次更新后的配置数据以维系该服务器程序正常运行;在后台更新完本次的配置数据之后,向清空的睡眠缓冲区写入本次更新后的所有配置数据,完成写入之后,将该睡眠缓冲区的状态变量修改为活动状态,同时将先前活动缓冲区的状态变量修改为睡眠状态;其中在服务器程序正常运行时,当所述第一全局缓冲区的状态变量为活动状态时,所述第二全局缓冲区的状态变量为睡眠状态;当所述第一全局缓冲区的状态变量为睡眠状态时,所述第二全局缓冲区的状态变量为活动状态。为达上述目的,本发明还公开一种更新配置数据的设备,包括服务器程序和内存, 且还包括内存管理模块,用于将服务器程序加载到内存以启动该服务器程序,并在内存中划分出第一全局缓冲区和第二全局缓冲区,以供该服务器程序执行下述操作将配置数据写入第一全局缓冲区,完成写入之后,将该第一全局缓冲区的状态变量设置为活动状态,并将该第二全局缓冲区的状态变量设置为睡眠状态;根据活动缓冲区的配置数据正常运行,该活动缓冲区即状态变量为活动状态的全局缓冲区,与之相对的睡眠缓冲区即状态变量为睡眠状态的另一全局缓冲区;在后台对该服务器程序的配置数据进行一次更新的过程中,由当前的活动缓冲区提供上次更新后的配置数据以维系该服务器程序正常运行;在后台更新完本次的配置数据之后,向清空的睡眠缓冲区写入本次更新后的所有配置数据,完成写入之后,将该睡眠缓冲区的状态变量修改为活动状态,同时将先前活动缓冲区的状态变量修改为睡眠状态;其中在服务器程序正常运行时,当所述第一全局缓冲区的状态变量为活动状态时,所述第二全局缓冲区的状态变量为睡眠状态;当所述第一全局缓冲区的状态变量为睡眠状态时,所述第二全局缓冲区的状态变量为活动状态。与现有技术相比,本发明至少具有以下优点采用双缓冲交替机制,两个缓冲区数据互不干扰,相互独立,从而实现了前台的数据共享和后台的数据更新的同时进行,充分利用了资源,而且通过在线动态更新的方式,不影响用户正常使用,极大的提高了服务器程序及其设备运行稳定性和维护的便利性。


图1是本发明实施例公开的更新配置数据的方法流程图;图2为本发明实施例公开的更新配置数据的设备结构框图。
具体实施例方式下面结合说明书附图对本发明的具体实现方式做一详细描述。实施例一本实施例公开一种更新配置数据的方法,如图1所示,包括步骤Si、服务器程序启动,在内存中划分出第一全局缓冲区和第二全局缓冲区。本实施例所述的服务器程序是指运行在服务器上的应用程序,尤其是为多用户线程所共享的应用程序;例如腾讯QQ服务器的服务程序,游戏服务器的服务程序,新浪show服务器的服务程序等等。上述内存缓冲区是存放数据的地方,而内存地址是内存缓冲区的编号,每个内存缓冲区都会有一个与之对应的内存地址。本实施例中,可以根据内存地址在内存中划分出该服务器程序的两个全局缓冲区。所谓全局缓冲区,以Oracle数据库为例,当启动Oracle 数据库时,系统会先在内存内规划一个固定区域,用来储存用户需要的数据(尤其是多线程用户所共享的数据)以及Oracle运行时必备的系统信息,本发明实施例将此类数据和/ 或信息的统称为配置数据,并将该数据存储区称为全局缓冲区。举例说明,本实施例中的配置数据可以是多线程用户所共享的游戏服务器的游戏场景数据,也可以是多人聊天室的基本数据,还可以是服务器程序版本升级所需的配置数据等等。其中,本实施例在执行上述步骤Sl时,需要在内存中规划出第一和第二至少两个全局缓冲区,其中一个为活动缓冲区,一个为睡眠缓冲区。所谓活动缓冲区即状态变量为活动状态的全局缓冲区,与之相对的睡眠缓冲区即状态变量为睡眠状态的另一全局缓冲区。在现有应用中,内存通常可被分成5个区,他们分别是堆、栈、自由存储区、全局/ 静态存储区和常量存储区。至于上述步骤Sl所述的内存的分区,可参照内存缓冲区现有的管理方法等技术,本发明不作赘述;较佳的,分区时,第一全局缓冲区和第二全局缓冲区的大小均等。步骤S2、服务器程序将配置数据写入第一全局缓冲区,完成写入之后,将该第一全局缓冲区的状态变量设置为活动状态,并将该第二全局缓冲区的状态变量设置为睡眠状态。步骤S3、该服务器程序根据活动缓冲区的配置数据正常运行。步骤S4、在后台对该服务器程序的配置数据进行一次更新的过程中,由当前的活动缓冲区提供上次更新后的配置数据以维系该服务器程序正常运行;在后台更新完本次的配置数据之后,向清空的睡眠缓冲区写入本次更新后的所有配置数据,完成写入之后,将该睡眠缓冲区的状态变量修改为活动状态,同时将先前活动缓冲区的状态变量修改为睡眠状态。在该步骤中,清空睡眠缓冲区的动作可以是在后台对该服务器程序的配置数据进行更新的过程中,也可以是在后台更新完本次的配置数据之后执行。本实施例中,上述步骤S4所述的活动缓冲区和睡眠缓冲区的重置有多种实现方式,本发明的保护范围包括但不限于下述两种实现方式方式一、活动缓冲区与睡眠缓冲区按固定的重置时长进行重置,所谓重置时长即服务器程序默认的配置数据前后两次更新之间的时间间隔,可由定时器设定。在每次的重置过程中,首先由服务器程序判断重置时长是否结束,如果是,清空该睡眠缓冲区并向该睡眠缓冲区写入本次更新后的所有配置数据。在该方式中,其优点在于容易实现;其缺点则在于上述重置时长是个估计值,在该重置时长内,后台的配置数据有可能发生了更新,也有可能没有发生更新,而按固定的重置时长进行重置会导致第一和第二两个全局缓冲区周期地在活动和睡眠两种状态中频繁切换,从而也就包括了一些没有必要的切换,有待于进一步改进。方式二、活动缓冲区与睡眠缓冲区随配置数据的更新进行重置,即只有在服务器程序检测到后台的一个或一个以上的配置数据发生了更新之后再进行重置。该方式解决了方式一所存在的不足,其要解决的问题是怎样检测后台的配置数据进行了更新,该检测的方式包括但不限于下述类别检测类别一、定期将后台的配置数据与内存中的配置数据的数值进行比对,比对的结果如果是两者相同,则判断为后台还未作更新,如果比对的结果显示两者不同,则判断后台发生了更新。检测类别二、修改后台数据库的配置表的属性,将其配置表的表结构修改为由参数名称、参数值和更新时间三个字段组成,检测时,先获取当前活动缓冲区所有配置中更新时间的最大值,然后检测数据库的配置表中是否有比当前记录的最大值更大的更新时间, 如果有,则判断后台的配置数据发生了更新。该检测方法可参照本案申请人于2011年6月 28日所提交的第201110178045. 4号,名称为“获取数据库更新数据的方法、装置及系统”的发明专利。检测类别三、根据后台传送的操作指令判断后台是否发生了更新。上述方式二确保了活动缓冲区与睡眠缓冲区按需进行重置,有效避免了无谓的切换。依此,该方式为本发明实施例的优选方式。本实施例中,在服务器程序正常运行时,当第一全局缓冲区的状态变量为活动状态时,第二全局缓冲区的状态变量为睡眠状态;当第一全局缓冲区的状态变量为睡眠状态时,第二全局缓冲区的状态变量为活动状态;在具体的实现过程中,其状态变量可以以“0” 和“1”来分别表示睡眠状态和活动状态;较佳的,该服务器程序还可以只设置一个状态变量,并通过设置该状态变量取值“0”或“ 1,,所对应的两个全局缓冲区在两种状态下作逆向同步切换的一个线程来实现配置数据的在线动态更新,所谓逆向同步切换即指当第一全局缓冲区从睡眠状态切换到活动状态时,第二全局缓冲区从活动状态切换到睡眠状态,同理,当第一全局缓冲区从活动状态切换到睡眠状态时,第二全局缓冲区从睡眠状态切换到活动状态。藉此,本发明实施例一所采用的双缓冲交替机制,两个缓冲区数据互不干扰,相互独立,从而实现了前台的数据共享和后台的数据更新的同时进行,充分利用了资源,而且通过在线动态更新的方式,不影响用户正常使用,极大的提高了服务器程序及其设备运行稳定性和维护的便利性。实施例二与上述实施例一所对应的,本实施例公开一种更新配置数据的设备,即一种服务器。如图2所示,该设备包括服务器程序1和内存2,其中该设备还包括内存管理模块3,用于将服务器程序加载到内存以启动该服务器程序,并在内存中划分出第一全局缓冲区21和第二全局缓冲区22,以供该服务器程序执行上述实施例一所述的操作,该操作至少包括将配置数据写入第一全局缓冲区,完成写入之后,将该第一全局缓冲区的状态变量设置为活动状态,并将该第二全局缓冲区的状态变量设置为睡眠状态;根据活动缓冲区的配置数据正常运行,该活动缓冲区即状态变量为活动状态的全局缓冲区,与之相对的睡眠缓冲区即状态变量为睡眠状态的另一全局缓冲区;在后台对该服务器程序的配置数据进行一次更新的过程中,由当前的活动缓冲区提供上次更新后的配置数据以维系该服务器程序正常运行;在后台更新完本次的配置数据之后,向清空的睡眠缓冲区写入本次更新后的所有配置数据,完成写入之后,将该睡眠缓冲区的状态变量修改为活动状态,同时将先前活动缓冲区的状态变量修改为睡眠状态。本实施例中,较佳的,基于木桶效应原理,所划分的第一全局缓冲区和第二全局缓冲区的大小均等,以充分利用资源并提高任一全局缓冲区的防溢出门限。如图2所示的设备,其服务器程序在正常运行时,当第一全局缓冲区的状态变量为活动状态时,第二全局缓冲区的状态变量为睡眠状态;当第一全局缓冲区的状态变量为睡眠状态时,第二全局缓冲区的状态变量为活动状态。本实施例中,可选的,上述服务器程序可以按固定时长重置活动缓冲区和睡眠缓冲区,其执行方式可参照上述方法实施例的方式一。其中,该服务器程序也可以随配置数据的更新重置上述活动缓冲区与睡眠缓冲区,其执行的方式可参照上述方法实施例的方式二;即该服务器程序的配置服务线程可以以下述步骤检测后台数据库的配置数据发生更新从后台数据库获取配置表,配置表的表结构至少由参数名称、参数值和更新时间三个字段组成;获取活动缓冲区所有配置中更新时间的最大值;检测数据库的配置表中是否有比当前记录的最大值更大的更新时间,如果有,判断后台的配置数据发生了更新。以及在检测到更新后,再向清空的睡眠缓冲区写入本次更新后的所有配置数据,完成写入之后,再执行活动缓冲区与睡眠缓冲区的重置处理。本实施例所述的服务器程序不包括图2所示设备自启动的操作系统的管理程序, 而是指运行在该设备上的应用程序,尤其是为多线程用户所共享的应用程序;例如腾讯 QQ服务器的服务程序,游戏服务器的服务程序,新浪show服务器的服务程序等等。其中该应用程序的运行依附于该设备的操作系统(例如Windows操作系统,Iinux操作系统)初始化之后,且该操作系统可用于执行上述内存管理模块所对应的功能。综上,本发明实施例二所公开的设备,通过采用双缓冲交替机制,两个缓冲区数据互不干扰,相互独立,从而实现了前台的数据共享和后台的数据更新的同时进行,充分利用了资源,而且通过在线动态更新的方式,不影响用户正常使用,极大的提高了服务器程序及其设备运行稳定性和维护的便利性。以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
权利要求
1.一种更新服务器程序的配置数据的方法,其特征在于,包括 服务器程序启动,在内存中划分出第一全局缓冲区和第二全局缓冲区;所述服务器程序将配置数据写入第一全局缓冲区,完成写入之后,将该第一全局缓冲区的状态变量设置为活动状态,并将该第二全局缓冲区的状态变量设置为睡眠状态;所述服务器程序根据活动缓冲区的配置数据正常运行,该活动缓冲区即状态变量为活动状态的全局缓冲区,与之相对的睡眠缓冲区即状态变量为睡眠状态的另一全局缓冲区;在后台对该服务器程序的配置数据进行一次更新的过程中,由当前的活动缓冲区提供上次更新后的配置数据以维系该服务器程序正常运行;在后台更新完本次的配置数据之后,向清空的睡眠缓冲区写入本次更新后的所有配置数据,完成写入之后,将该睡眠缓冲区的状态变量修改为活动状态,同时将先前活动缓冲区的状态变量修改为睡眠状态;其中在服务器程序正常运行时,当所述第一全局缓冲区的状态变量为活动状态时,所述第二全局缓冲区的状态变量为睡眠状态;当所述第一全局缓冲区的状态变量为睡眠状态时,所述第二全局缓冲区的状态变量为活动状态。
2.根据权利要求1所述的更新服务器程序的配置数据的方法,其特征在于,上述活动缓冲区与睡眠缓冲区按固定的重置时长进行重置,且在每次的重置过程中,所述向清空的睡眠缓冲区写入本次更新后的所有配置数据具体为服务器程序判断重置时长是否结束,如果是,清空该睡眠缓冲区并向该睡眠缓冲区写入本次更新后的所有配置数据。
3.根据权利要求1所述的更新服务器程序的配置数据的方法,其特征在于,上述活动缓冲区与睡眠缓冲区随配置数据的更新进行重置,且在每次的重置过程中,所述向清空的睡眠缓冲区写入本次更新后的所有配置数据之前还包括服务器程序检测到后台的一个或一个以上的配置数据发生更新。
4.根据权利要求3所述的更新服务器程序的配置数据的方法,其特征在于,所述服务器程序以下述步骤检测后台数据库的配置数据发生更新从后台数据库获取配置表,所述配置表的表结构至少由参数名称、参数值和更新时间三个字段组成;获取当前活动缓冲区所有配置中更新时间的最大值;检测所述数据库的配置表中是否有比当前记录的最大值更大的更新时间,如果有,判断后台的配置数据发生了更新。
5.根据权利要求1至4任一所述的更新服务器程序的配置数据的方法,其特征在于,所述第一全局缓冲区和第二全局缓冲区共用同一状态变量。
6.一种更新服务器程序的配置数据的设备,包括服务器程序和内存,其特征在于,所述设备还包括内存管理模块,用于将服务器程序加载到内存以启动该服务器程序,并在内存中划分出第一全局缓冲区和第二全局缓冲区,以供该服务器程序执行下述操作将配置数据写入第一全局缓冲区,完成写入之后,将该第一全局缓冲区的状态变量设置为活动状态,并将该第二全局缓冲区的状态变量设置为睡眠状态;根据活动缓冲区的配置数据正常运行,该活动缓冲区即状态变量为活动状态的全局缓冲区,与之相对的睡眠缓冲区即状态变量为睡眠状态的另一全局缓冲区;在后台对该服务器程序的配置数据进行一次更新的过程中,由当前的活动缓冲区提供上次更新后的配置数据以维系该服务器程序正常运行;在后台更新完本次的配置数据之后,向清空的睡眠缓冲区写入本次更新后的所有配置数据,完成写入之后,将该睡眠缓冲区的状态变量修改为活动状态,同时将先前活动缓冲区的状态变量修改为睡眠状态;其中在服务器程序正常运行时,当所述第一全局缓冲区的状态变量为活动状态时,所述第二全局缓冲区的状态变量为睡眠状态;当所述第一全局缓冲区的状态变量为睡眠状态时,所述第二全局缓冲区的状态变量为活动状态。
7.根据权利要求6所述的更新服务器程序的配置数据的设备,其特征在于,所述服务器程序按固定时长重置活动缓冲区和睡眠缓冲区。
8.根据权利要求6所述的更新服务器程序的配置数据的设备,其特征在于,所述第服务器程序随配置数据的更新重置上述活动缓冲区与睡眠缓冲区。
9.根据权利要求8所述的更新服务器程序的配置数据的设备,其特征在于,所述服务器程序以下述步骤检测后台数据库的配置数据发生更新从后台数据库获取配置表,所述配置表的表结构至少由参数名称、参数值和更新时间三个字段组成;获取当前活动缓冲区所有配置中更新时间的最大值;检测所述数据库的配置表中是否有比当前记录的最大值更大的更新时间,如果有,判断后台的配置数据发生了更新。
10.根据权利要求6至9任一所述的更新服务器程序的配置数据的设备,其特征在于, 所述第一全局缓冲区和第二全局缓冲区的大小均等。
全文摘要
本发明公开一种更新服务器程序的配置数据的方法及设备,使之在不影响用户在线使用的状态下实现数据的动态更新。该方法包括服务器程序启动后,在内存中划分出两个全局缓冲区,其中一个为活动缓冲区,一个为睡眠缓冲区;在后台对服务器程序的配置数据进行一次更新的过程中,由当前的活动缓冲区提供上次更新后的配置数据以维系该服务器程序正常运行;在后台更新完本次的配置数据之后,向清空的睡眠缓冲区写入本次更新后的所有配置数据,完成写入之后,将该睡眠缓冲区的状态变量修改为活动状态,同时将先前活动缓冲区的状态变量修改为睡眠状态。
文档编号G06F9/445GK102314368SQ20111028761
公开日2012年1月11日 申请日期2011年9月26日 优先权日2011年9月26日
发明者付清文, 向万里, 周平, 晏利平, 曾精石, 李晓鹏, 李锐, 杨晓东, 潘年华, 王伟, 王海, 胡海, 黄国宏 申请人:贵阳朗玛信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1