具体实施方式
本申请实施例提供一种实现分布式系统跨时域一致性方法及装置。
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
如图1所示为本申请实施例一种实现分布式系统跨时域一致性方法的流程图。
在该图1中为本申请针对于分布式金融系统中出现的时间不同步的问题所提出的技术方案,在进行业务模拟时,可以将所有业务涉及的应用服务器和数据库的业务时间进行同步,以实现业务模拟,例如为了检验金融系统中某些用户的账户安全性,需要在设定的时间(通常为未来的某个时间)模拟业务并对用户的账户进行操作,检查在设定时间用户的账户状态。
在本实施例的图中包括:
步骤101,根据设定的目标时间,将应用服务器的时间进行同步。
步骤102,计算得到所述目标时间与数据库服务器时间之间的时间偏移量,将所述时间偏移量发送给所述应用服务器。
步骤103,根据所述时间偏移量,将所述应用服务器生成的数据库操作指令中的时间函数进行修改,以实现分布式系统中跨时域的一致性。
作为申请的一个实施例,所述应用服务器包括与业务模拟中的业务相关的应用服务器,所述数据库服务器包括与业务模拟中的业务相关的数据库服务器。在实施的场景中,分布式系统中可能包括多个分布设置的应用服务器和数据库服务器,在进行业务模拟时,例如进行贷款业务的模拟时,只需要涉及贷款业务相关的应用服务器和相应的数据库服务器,其它与贷款业务模拟无关的应用服务器和数据库服务器不用时间同步,当然也可以将分布式系统中的所有应用服务器和数据库服务器进行时间同步。
作为申请的一个实施例,所述应用服务器包括分布式系统中的多个应用服务器,所述数据库服务器包括分布式系统中的一个或者多个数据库服务器。
作为申请的一个实施例,根据设定的目标时间,将应用服务器的时间进行同步中还具体包括:选择一台应用服务器作为时间服务器,将该时间服务器的时间调整到所述目标时间,以该时间服务器的时间作为基准,将其余应用服务器的时间与该时间服务器进行时间同步。
其中,作为可选的实施例,可以以目标时间作为同步的目标,直接向业务相关的应用服务器发送调整系统时间的控制指令或者脚本,令所有业务相关的应用服务器的时间进行同步,即不需要选择一台应用服务器作为时间服务器即可实现应用服务器的时间同步。
作为申请的一个实施例,以该时间服务器的时间作为基准,将其余应用服务器的时间与该时间服务器进行时间同步还进一步包括,以一时间间隔为周期,将其余应用服务器的时间与该时间服务器进行时间同步。其中,时间间隔可以为10分钟、15分钟等,由于各个应用服务器的硬件差异,可能在一次时间同步后随着时间的推移,各个应用服务器的时间可能还会出现不同步的问题,此时通过周期性的同步应用服务器的时间,可以确保时间同步的准确性,以便于后面的时间偏移量的计算。
作为申请的一个实施例,计算得到所述目标时间与数据库服务器时间之间的时间偏移量,将所述时间偏移量发送给所述应用服务器还具体包括:获取数据库服务器的时间,将所述目标时间减去所述数据库服务器的时间得到所述时间偏移量,将所述时间偏移量推送给所述应用服务器,得到数据库时间偏移指令的应用服务器在执行数据库SQL指令时,会将SQL指令中的时间函数,进行时间偏移,从而达到依赖数据库服务器的时间(即从SQL指令中获取的时间)即使不修改数据库服务器时间也能取得与应用服务器时间的一致。
其中,可以通过现有技术中数据库获取时间的指令获得数据库服务器的时间,例如某金融业务通过SQL指令:select now()from dual来获取数据库服务器时间作为业务时间,该SQL中,now()为数据库时间函数,针对于现有技术中不同的数据库该获取时间的指令可能不同,在此不再赘述。
作为申请的一个实施例,根据所述时间偏移量,将所述应用服务器生成的数据库操作指令中的时间函数进行修改还具体包括,将所述应用服务器生成的数据库操作指令中的与业务相关的时间函数进行修改。
在应用服务器生成的数据库操作指令中可能包括若干时间函数,在本申请中只需要修改或者替换与业务模拟相关的时间函数,而不必修改所有时间函数,其中,对时间函数的修改可以为将数据库操作指令中的时间函数加上时间偏移量得到修改后的时间。
通过上述本申请实施例的方法,可以解决现有技术中频繁修改数据库服务器时间造成数据库崩溃,从而无法完成业务模拟工作的问题,对于分布式系统而言,特别是对金融领域中涉及到业务模拟的应用场景来说,本申请的技术方案可以灵活的根据需要进行金融业务模拟,获得账户在将来一段时间的状态,确保用户和金融机构的信息安全。
如图2所示为本申请实施例一种实现分布式系统跨时域一致性的装置结构示意图。
在该图中示出了在分布式系统中实现跨时域一致性的装置结构,在该装置中实施上述图1实施例的方法时,例如时间偏移量的计算和修改数据库操作指令的时间函数等部件均可以采用软件或者实现相应功能的硬件逻辑电路实现,可以集成于各个应用服务器中,或者还可以单独设置一台或者多台计算机完成上述功能。
该装置包括应用服务器同步单元201,用于根据设定的目标时间,将应用服务器的时间进行同步。
时间偏移量计算单元202,用于计算得到所述目标时间与数据库服务器时间之间的时间偏移量,将所述时间偏移量发送给所述应用服务器。
时间函数修改单元203,用于根据所述时间偏移量,将所述应用服务器生成的数据库操作指令中的时间函数进行修改,以实现分布式系统中跨时域的一致性。
作为申请的一个实施例,所述应用服务器包括与业务模拟中的业务相关的应用服务器,所述数据库服务器包括与业务模拟中的业务相关的数据库服务器。
作为申请的一个实施例,所述应用服务器包括分布式系统中的多个应用服务器,所述数据库服务器包括分布式系统中的一个或者多个数据库服务器。
作为申请的一个实施例,所述应用服务器同步单元201具体用于选择一台应用服务器作为时间服务器,将该时间服务器的时间调整到所述目标时间,以该时间服务器的时间作为基准,将其余应用服务器的时间与该时间服务器进行时间同步。
作为申请的一个实施例,还包括一计时器204,用于提供一时间间隔,所述应用服务器同步单元201以该时间间隔为周期,将其余应用服务器的时间与该时间服务器进行时间同步。
作为申请的一个实施例,时间偏移量计算单元202具体用于获取数据库服务器的时间,将所述目标时间减去所述数据库服务器的时间得到所述时间偏移量,将所述时间偏移量推送给所述应用服务器。
作为申请的一个实施例,时间函数修改单元203具体用于将所述应用服务器生成的数据库操作指令中的与业务相关的时间函数进行修改。
通过上述本申请实施例的装置,可以解决现有技术中频繁修改数据库服务器时间造成数据库崩溃,从而无法完成业务模拟工作的问题,对于分布式系统而言,特别是对金融领域中涉及到业务模拟的应用场景来说,本申请的技术方案可以灵活的根据需要进行金融业务模拟,获得账户在将来一段时间的状态,确保用户和金融机构的信息安全。
如图3所示为本申请实施例实现金融统跨时域一致性分布系统的结构示意图。
在本实施例中,以金融应用场景为例对如何实现分布式系统跨时域一致性的实现方案进行说明。该分布式金融系统包括,模拟金融业务301,该模拟金融业务301分别与应用服务器302、应用服务器303及数据库服务器304,其中以应用服务器302设置为时间服务器,作为该业务模拟过程中的时间基准,所述应用服务器302和应用服务器303以及数据库服务器304都是与该业务模拟相关的设备,在整个分布式金融系统中还包括其它应用服务器或者数据库服务器。
本申请的装置在本例中分散于应用服务器302和应用服务器303中,或者为独立的计算机,本领域技术人员可以理解的是,作为本申请的装置可以是执行相应功能的软件模块,也可以是实现相应功能的逻辑电路,并不拘泥于位于一个空间位置的装置,还可以以功能单元、模块的方式分散的位于分布式金融系统中的相关服务器之中,或者为服务器的底层框架结构。
在本实施例中,根据设定应用服务器302为时间服务器,其它应用服务器需要根据该应用服务器302的时间为基准进行时间同步,分布式金融系统实现跨时域一致性的方法流程图请参考图4所示。
结合参考图3及图4,当金融业务模拟(贷款业务模拟)中需要将业务时间调整到未来的某个时间(目标时间),例如目标时间为2015年4月2日15:30,应用服务器302的时间为2015年4月1日15:30,应用服务器303的时间为2015年4月1日15:32,数据库服务器的时间为2015年4月1日15:33,需要在数据库服务器304中添加新的利息数据。
步骤401,根据设定的信息,确定目标时间及贷款业务模拟。
本步骤中,可以根据用户通过鼠标、键盘等输入设备输入的设定信息确定目标时间和贷款业务模拟,从而可以根据类似于业务模拟名称与相关联设备列表的方式得到与该贷款业务模拟相关的应用服务器和数据库服务器,为了简单明了的描述本申请的技术方案,该贷款业务相关的应用服务器为应用服务器302和应用服务器303,相关联的数据库服务器为数据库服务器304,时间服务器为应用服务器302。
步骤402,将目标时间发送至时间服务器,所述时间服务器调整系统时间至目标时间,在本例中应用服务器302将系统时间调整为2015年4月2日15:30。
步骤403,应用服务器获得时间服务器的时间,并将自身系统时间与时间服务器的时间同步。
在本步骤中,应用服务器303可以主动获取时间服务器的时间,从而实现时间同步,还可以由时间服务器主动向应用服务器303发送时间同步指令,其中包括时间服务器的时间,令应用服务器303根据该时间进行时间同步。
具体的,应用服务器303将自身的时间2015年4月1日15:32同步为时间服务器的时间2015年4月2日15:30。
步骤404,应用服务器周期性的与时间服务器进行时间同步。
本步骤中,应用服务器303可以根据自身的计时器计算一时间间隔,每当经过该时间间隔后,主动从时间服务器获取时间,以进行时间同步,或者时间服务器自身具有计时器计算一时间间隔,每当经过该时间间隔后,主动向应用服务器303发送包括时间的同步指令,以使所示应用服务器303进行时间同步。
具体的,经过同步的应用服务器303在10分钟后的时间为2015年4月2日15:41,按照本步骤的方式以10分钟为时间间隔周期性的与时间服务器同步,此时时间服务器时间为2015年4月2日15:40,同步之后的结果应用服务器303的时间为2015年4月2日15:40。
步骤405,获取时间服务器和数据库服务器的时间。
其中,可以通过向数据库服务器304发送时间获取指令来获取数据库服务器的时间,例如数据库指令:select now()from dual,该指令即为获取数据库服务器的时间。
在本例中,所述数据库服务器的时间根据前述为2015年4月1日15:33,时间服务器时间为2015年4月2日15:30。
步骤406,计算所述时间服务器时间与数据库服务器时间的差值,得到时间偏移量。
具体的,根据时间服务器时间为2015年4月2日15:30和数据库服务器的时间为2015年4月1日15:33,得到时间偏移量为23小时57分。
步骤407,将时间偏移量推送给与业务模拟相关的应用服务器。
在本步骤中,将时间偏移量放入多线程中,推送给与贷款业务模拟相关的所有应用服务器,在本例中,只有应用服务器302和应用服务器303,而应用服务器302为时间服务器,如果时间偏移量的计算是在时间服务器上计算的,那么本步骤中只需要将时间偏移量放入线程中推送给应用服务器303,如果贷款业务模拟还与其它应用服务器相关,那么就可以通过多线程的方式同时将时间偏移量推送给所有相关的应用服务器,其中,与业务相关的应用服务器包括,在分布式系统中,某些应用服务器的业务时间需要依赖于数据库服务器的时间,这些应用服务器为与业务相关的应用服务器。
可以在独立的一个设备上执行上述步骤405至步骤407,也可以在应用服务器303上执行上述步骤,作为较佳的实施例,可以在时间服务器上执行上述步骤。
步骤408,将与业务模拟相关的应用服务器生成的数据库操作指令中的时间函数进行修改。
由于本实施例为贷款业务模拟,每一天都将会产生贷款利息,应用服务器303生成在数据库中添加计息记录的数据库操作指令,该数据库操作指令中包括计息的时间函数,例如,select now()from dual,将该数据库操作指令中的时间函数进行修改,即,select DATE_ADD(now(),INTERVAL A MINUTE)from dual,其中,now()函数为获取数据库服务器时间的函数,INTERVAL A MINUTE为时间偏移量,DATE_ADD()为在数据库时间上加上时间偏移量的函数,dual为数据库表格,可以看到,进行时间偏移,可以模拟任意期望的时间。
其中,应用服务器可以通过识别数据库操作指令中时间函数方法名的方式来确定需要修改哪个时间函数,例如OB和mysql的时间函数有:now()/current_time()/current_timestamp()/strict_current_timestamp()等,这些时间函数可以灵活的支持配置,哪些需要时间偏移,哪些不需要时间偏移。此时,不需要改变数据库服务器的时间就可以实现将数据库中记录的业务时间与应用服务器的时间同步,保证在金融业务模拟时的跨时域一致性。
在另一个实施例中,在某个业务模拟中,如果涉及多个数据库服务器和多个应用服务器,其中一些应用服务器需要在某一个或者几个数据库服务器中进行操作,每个数据库服务器的时间可能都不相同,那么在步骤405中需要获得所有数据库服务器的时间和时间服务器的时间。
在步骤406中,将时间服务器的时间分别与多个数据库服务器时间做差,得到多个时间偏移量,并记录每个时间偏移量与其对应的数据库服务器的匹配关系。
在步骤407中,根据与业务模拟相关的应用服务器及相应的数据库服务器,将相应的时间偏移量推送给应用服务器。
在本步骤中,一个应用服务器可能需要向几个数据库服务器发送数据库操作指令,发送给各个数据库服务器的数据库操作指令中的时间函数均需要进行不同的修改,即,数据库服务器A的时间与目标时间之间的时间偏移量为A,数据库服务器B的时间与目标时间之间的时间偏移量为B,数据库服务器C的时间与目标时间之间的时间偏移量为C,将这些不同的时间偏移量发送给应用服务器。
步骤408,将应用服务器发送给不同数据库服务器的数据库操作指令中的时间函数按照相应的时间偏移量进行修改。
具体的,应用服务器发送给数据库服务器A的数据库操作指令中时间函数根据时间偏移量A进行修改,应用服务器发送给数据库服务器B的数据库操作指令中时间函数根据时间偏移量B进行修改,应用服务器发送给数据库服务器C的数据库操作指令中时间函数根据时间偏移量C进行修改,
通过上述本申请实施例中的方法和装置,可以实现分布式系统中的时间调整、切换,特别对于金融级的分布式系统中的业务模拟时,可以避免数据库服务器的崩溃,从而可以检测金融系统的数据和信息的安全性。
对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable Gate Array,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片2。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware Description Language)、Confluence、CUPL(Cornell UniversityProgramming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(Ruby Hardware Description Language)等,目前最普遍使用的是VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)与Verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、AtmelAT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。