本发明涉及互联网
技术领域:
:,尤其涉及一种版本升级方法、服务器和系统。
背景技术:
::对于线上的业务,一般要求业务全年无故障的运行时间需要超过99.99999%,也就表明这个业务一年内因为故障下线的时间需要少于5分钟。然而,线上业务经常会有各种原因需要上线更新,例如:bug、版本升级等。现在,在版本升级的时候,一般采用如下方式进行:方式1)全服停机维护例如,网游业务,每周维护8小时,那么所有服务器都下线,并升级服务器程序。在升级完成之后,在某个时间点统一提供线上服务。方式2)服务器集群ab切换即,预先做两组同样容量的服务器集群,其中,a集群线上运行老版本,b集群是没有提供服务的集群。在部署新版本的时候,在某个时间点将集群a整体下线,并将集群b整体上线,从而完成新老版本的切换。方式3)不考虑报错即,不管新老版本,挨个上线,报错就报错,用户忍一会就过去了。如果用户较为幸运,那么可以第一时间用上新版本服务,如果用不幸运,那么可能需要等所有服务器上线完成之后,才能使用新版服务。上述方式1需要定时停服,无法达到全年不停服务的要求,方式2需要准备两倍容量的线上服务器集群,且备份服务器一般是闲置的,方式3用户体验较差。针对上述问题,目前尚未提出有效的解决方案。技术实现要素:本发明实施例提供一种版本升级方法、服务器和系统,以达到低成本的程序无缝升级的技术效果。一方面,本发明实施例提供了一种版本升级方法,包括:将升级程序文件同步到提供程序服务的服务器中;对所述提供程序服务的服务器进行时钟同步;在达到预设的升级版本上线时间的情况下,将所述提供程序服务的服务器调整为通过所述升级程序文件取代原始程序文件提供服务。可选地,在将升级程序文件同步到提供程序服务的服务器中之前,所述方法还包括:获取待升级程序的源代码;对源代码进行预处理,得到所述升级程序文件,其中,所述预处理包括以下至少之一:编译、压缩、优化、加密、混淆。可选地,将升级程序文件同步到提供程序服务的服务器中,包括:将所述升级程序文件,拷贝至提供程序服务的服务器中与原始程序文件的同级目录中,或者与原始程序文件相同的硬盘分区中。可选地,在待升级程序为依赖第三方程序提供服务的程序的情况下,将所述提供程序服务的服务器调整为通过所述升级程序文件取代原始程序文件提供服务,包括:将所述待升级程序的文件夹进行命名,得到第一名称;在达到预设的升级版本上线时间的情况下,将原始程序的文件夹名称修改为第二名称,将所述待升级程序的文件夹的第一名称修改为提供服务的文件夹名称。可选地,在待升级程序为直接提供服务的程序的情况下,将所述提供程序服务的服务器调整为通过所述升级程序文件取代原始程序文件提供服务,包括:为所述待升级程序指定一个与线上程序不同的空闲端口;在达到预设的升级版本上线时间的情况下,将线上对外服务端口映射到为所述待升级程序指定的空闲端口中。可选地,在将所述提供程序服务的服务器调整为通过所述升级程序文件取代原始程序文件提供服务之后,所述方法还包括:确认所述升级程序文件是否正常运行;如果所述升级程序文件正常运行,则删除原始程序文件;如果所述升级程序文件无法正常运行,则回滚至原始程序文件。另一方面,本发明实施例提供了一种版本升级服务器,包括:文件同步模块,用于将升级程序文件同步到提供程序服务的服务器中;时钟同步模块,用于对所述提供程序服务的服务器进行时钟同步;升级模块,用于在达到预设的升级版本上线时间的情况下,将所述提供程序服务的服务器调整为通过所述升级程序文件取代原始程序文件提供服务。可选地,上述版本升级服务器还包括:获取模块,用于在将升级程序文件同步到提供程序服务的服务器中之前,获取待升级程序的源代码;预处理模块,用于对源代码进行预处理,得到所述升级程序文件,其中,所述预处理包括以下至少之一:编译、压缩、优化、加密、混淆。可选地,所述升级模块具体用于在待升级程序为依赖第三方程序提供服务的程序的情况下,将所述待升级程序的文件夹进行命名,得到第一名称;在达到预设的升级版本上线时间的情况下,将原始程序的文件夹名称修改为第二名称,将所述待升级程序的文件夹的第一名称修改为提供服务的文件夹名称;或者,所述升级模块具体用于在待升级程序为直接提供服务的程序的情况下,为所述待升级程序指定一个与线上程序不同的空闲端口;在达到预设的升级版本上线时间的情况下,将线上对外服务端口映射到为所述待升级程序指定的空闲端口中。另一方面,本发明实施例提供了一种版本升级系统,包括上述的版本升级服务器和一个或多个提供程序服务的服务器。上述技术方案具有如下有益效果:因为采用预先将升级程序文件同步到提供服务的服务器中,并对所有提供服务的服务器进行时钟同步,在达到升级时间的时候,统一进行版本切换,从而解决了现有的在进行版本升级的时候,需要停服,用户体验度不高的技术问题,达到了低成本的程序无缝升级的技术效果,且用户无感知。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是根据本发明实施例的版本升级方法的方法流程图;图2是根据本发明实施例的版本升级装置的结构框图;图3是根据本发明实施例的版本升级系统的架构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。为了解决现有的在进行版本升级的时候,需要停服,用户体验度不高的技术问题,在本例中提供了一种无需停服的版本升级方法,如图1所示,可以包括如下步骤:步骤101:将升级程序文件同步到提供程序服务的服务器中;其中,该升级程序文件,可以从代码库或者是特定位置获取的源代码进行处理后得到的。可以有一台或一组专门的服务器用户获取并处理源代码,以得到待升级程序。例如,可以从代码库获取待升级程序的源代码,然后对源代码进行预处理,得到升级程序文件,其中,所述预处理可以包括但不限于以下至少之一:编译、压缩、优化、加密、混淆,通过上述处理可以使得升级程序文件处于发布前的准备状态。对于这些准备好的升级程序文件,就可以被同步至所有的服务器中,其中,这些服务器是提供服务的服务器,也就是需要进行程序升级的服务器。在将升级程序文件拷贝到服务器中的时候,可以是将升级程序文件,拷贝至提供程序服务的服务器中与原始程序文件的同级目录中,或者与原始程序文件相同的硬盘分区中。步骤102:对所述提供程序服务的服务器进行时钟同步;在进行程序升级之前,可以对所有的服务器执行优化操作,例如,可以根据服务器的环境对配置进行修改,可以根据服务器的环境对程序文件进行编译压缩等操作,使得升级程序文件可以与服务器进行适配。在做好准备工作之后,为了使得所有的服务器可以同时实现新旧版本切换,可以对所有的服务器进行时钟同步,以确定每个服务器的时钟都是完全相同的。步骤103:在达到预设的升级版本上线时间的情况下,将所述提供程序服务的服务器调整为通过所述升级程序文件取代原始程序文件提供服务。在进行正式的升级操作的时候,可以根据程序类型的不同,采用不同的升级方式。例如,有些程序是可以自己直接提供服务的,有些程序则需要第三方程序才能提供服务的脚本,对于不同的类型的程序可以采用不同的方式,例如:1)在待升级程序为依赖第三方程序提供服务的程序(例如php)的情况下,将所述提供程序服务的服务器调整为通过所述升级程序文件取代原始程序文件提供服务,可以包括:将所述待升级程序的文件夹进行命名,得到第一名称(例如:service_name_ready);在达到预设的升级版本上线时间的情况下,将原始程序的文件夹名称修改为第二名称(例如:service_name_old),将所述待升级程序的文件夹的第一名称修改为提供服务的文件夹名称(例如:service_name)。2)在待升级程序为直接提供服务的程序(例如:c++)的情况下,将所述提供程序服务的服务器调整为通过所述升级程序文件取代原始程序文件提供服务,可以包括:为所述待升级程序指定一个与线上程序不同的空闲端口;在达到预设的升级版本上线时间的情况下,将线上对外服务端口映射到为所述待升级程序指定的空闲端口中。例如,可以利用ipatables等程序将线上对外服务端口映射到指定的端口中。考虑到在程序升级之后,存在升级失败后者是升级后的版本无法正常提供服务的情况。为此,可以在将所述提供程序服务的服务器调整为通过所述升级程序文件取代原始程序文件提供服务之后,确认所述升级程序文件是否正常运行;如果所述升级程序文件正常运行,则删除原始程序文件;如果所述升级程序文件无法正常运行,则回滚至原始程序文件,在进行会还的时候,可以是反向执行上述1)2)中的升级方式,以实现无缝回滚到老版本的服务程序。基于同一发明构思,本发明实施例中还提供了一种版本升级服务器,如下面的实施例所述。由于版本升级服务器解决问题的原理与版本升级方法相似,因此版本升级服务器的实施可以参见版本升级方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图2是本发明实施例的版本升级服务器的一种结构框图,如图2所示,可以包括:文件同步模块201、时钟同步模块202和升级模块203,下面对该结构进行说明。文件同步模块201,用于将升级程序文件同步到提供程序服务的服务器中;时钟同步模块202,用于对所述提供程序服务的服务器进行时钟同步;升级模块203,用于在达到预设的升级版本上线时间的情况下,将所述提供程序服务的服务器调整为通过所述升级程序文件取代原始程序文件提供服务。在一个实施方式中,上述版本升级服务器还可以包括:获取模块,用于在将升级程序文件同步到提供程序服务的服务器中之前,获取待升级程序的源代码;预处理模块,用于对源代码进行预处理,得到所述升级程序文件,其中,所述预处理包括以下至少之一:编译、压缩、优化、加密、混淆。在一个实施方式中,升级模块203具体可以用于在待升级程序为依赖第三方程序提供服务的程序的情况下,将所述待升级程序的文件夹进行命名,得到第一名称;在达到预设的升级版本上线时间的情况下,将原始程序的文件夹名称修改为第二名称,将所述待升级程序的文件夹的第一名称修改为提供服务的文件夹名称;或者,升级模块203具体可以用于在待升级程序为直接提供服务的程序的情况下,为所述待升级程序指定一个与线上程序不同的空闲端口;在达到预设的升级版本上线时间的情况下,将线上对外服务端口映射到为所述待升级程序指定的空闲端口中。在本例中,还提供了一种版本升级系统,如图3所示,可以包括上述图2所示的版本升级服务器和一个或多个提供程序服务的服务器。下面结合一个具体实施例对上述版本升级方法、服务器和系统进行说明,然而值得注意的是,该具体实施例仅是为了更好地说明本申请,并不构成对本申请的不当限定。在本例中,为了使得所有服务器集群,在指定时间点,实时同步切换至新版本,且无需准备多余的备份服务器。提供了一种版本升级方法,本例中的该方法的应用场景是多个运行服务用的服务器,需要上线新版的服务,且不允许中断服务。为了达到上述目的,在本例中提供了一个或一组专门用于发布和同步的服务器(可以称为发布机)。基于这些设备,可以通过如下步骤进行版本升级:s1:同步所有服务器的时钟,使得所有服务器的时钟与发布机的时钟保持一致。并获取所有服务器的状态,基于服务器的状态确定服务器是否符合新版本上线条件;s2:将源代码从代码库或特定位置同步到发布机中;s3:发布机对源代码执行编译、压缩、优化、加密、混淆等步骤,使得代码处于发布前的准备状态;s4:发布机将准备好的代码同步到所有服务器中;s5:发布机在所有服务器中执行最后的优化操作,例如:根据服务器环境对配置文件进行修改,还可以根据服务器的环境进行编译压缩等操作。s6:再次同步所有服务器时钟,并确认所有服务器的状态符合新版本上线条件,对于拥有iptables的服务器上,可以在服务器上执行端口映射和代理的程序;对于php等依赖第三方程序才能提供服务的脚本,将程序所在目录拷入当前正在提供服务的脚本文件夹中的同级文件夹或者相同硬盘分区的位置,并重命名为类似service_name_ready的文件夹,其中,文件夹名的规则可以根据需要定义;对于java、c++等直接提供服务的程序,将程序指定一个和线上程序不同的空闲端口启动。s7:在准备完成之后,通知管理员,指定新版本上线时间;s8:上线时间到达前再次同步所有服务器的时间,使得所有服务器的时间与发布机时间一致,在确认同步完成之后,执行如下的新版本上线操作:1)对于php等依赖第三方程序才能提供服务的脚本,将线上正在提供服务的文件夹更名为类似service_name_old的名称,将步骤67中准备完成的文件夹,改为线上提供服务的文件夹service_name;2)对于java、c++等直接提供服务的程序,利用iptables等程序,将线上对外服务端口映射到步骤7中指定的端口中。在确认上线完成之后,所有服务无缝切换,原有的老版本程序,在确认新版程序正常提供服务之后,可以任意删除或者移到其它地方。如果新版程序无法正常提供服务,那么可以再回滚至老版本中。在上例中,在新版本发布之前,多个服务器进行时间同步,发布前将准备好的程序文件夹拷贝到正在提供服务的程序文件夹的同级目录或相同硬盘分区中,多个服务器在指定时间同时执行上线操作,具体地,利用文件夹重命名的方式实现服务程序文件的无缝切换,或者利用iptables等程序将服务器现有正在提供的服务端口重定向(或反向代理)到准备好的新的服务端口。通过上例中的方法,可以实现不暂停服务,且用户无感知,可以达到无缝升级的目的。进一步的,还提供了无缝回滚到上一个版本程序,实现快速进行故障恢复的功能,且实现成本较低。上述技术方案具有如下有益效果:因为采用预先将升级程序文件同步到提供服务的服务器中,并对所有提供服务的服务器进行时钟同步,在达到升级时间的时候,统一进行版本切换,从而解决了现有的在进行版本升级的时候,需要停服,用户体验度不高的技术问题,达到了低成本的程序无缝升级的技术效果,且用户无感知。本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrativelogicalblock),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrativecomponents),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。本发明实施例中所描述的各种说明性的逻辑块,或单元都可以通过通用处理器,数字信号处理器,专用集成电路(asic),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动磁盘、cd-rom或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于asic中,asic可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于ram、rom、eeprom、cd-rom或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(dsl)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、dvd、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12