发明内容
本申请公开基于分布式系统的生成序列号的方法,能够避免依赖数据库而造成数据库压力过大,能在数据库故障时提供不间断的服务。
本发明的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本发明的实践而习得。
根据本发明的一个方面,提供一种基于分布式系统的生成序列号的方法,所述分布式系统包括多个服务器,各所述服务器包括至少一个序列号服务单元,各所述序列号服务单元包含至少一个序列号生成器,其中各所述序列号服务单元生成序列号的方法包括:
接收序列号申请请求;
通过序列号生成器生成内部序列号;
从本地获取对应的实例号,根据所述实例号和所述内部序列号生成序列号。
根据一些实施例,所述实例号为根据唯一标识分配的实例号。
根据一些实施例,所述唯一标识为根据硬件标识和应用标识生成的唯一标识。
根据一些实施例,所述硬件标识为序列号服务单元所安装的计算机的网卡标识、硬盘标识、或处理器标识;。
根据一些实施例,所述应用标识为所述序列号服务单元的应用路径。
根据一些实施例,接收序列号申请请求包括:接收业务系统发送的包含业务标识的序列号申请请求;
根据所述实例号和所述内部序列号生成序列号包括:从本地获取所述业务标识对应的序列号规则,根据所述实例号和所述内部序列号采用所述序列号规则生成序列号,以返回给所述业务系统。
根据一些实施例,通过序列号生成器生成内部序列号包括:通过所述业务标识对应的序列号生成器生成所述内部序列号。
根据一些实施例,通过所述业务标识对应的序列号生成器生成所述内部序列号之前还包括:
根据所述业务标识在本地查找对应的序列号生成器,若查找失败,则在本地创建新的序列号生成器作为所述业务标识对应的序列号生成器。
根据一些实施例,所述业务系统为分布式的业务系统。
根据一些实施例,所述方法还包括,将所生成的序列号写入文件系统的页缓存,通过定时或定量的方式将所述页缓存映射到磁盘或数据库中;
当断电或重启后,根据所述磁盘或数据库中的序列号和配置的步长控制所述序列号生成器生成内部序列号。
根据一些实施例,通过序列号生成器生成内部序列号包括,将所述序列号生成器使用的内存缓存储在处理器的高速缓存里。
根据一些实施例,根据所述实例号和所述内部序列号生成序列号包括:将所述实例号、所述内部号、以及当前时间拼接起来作为所生成的序列号。
根据本发明的另一方面,提供一种基于分布式系统的生成序列号的装置,所述分布式系统包括多个服务器,各所述服务器包括至少一个序列号服务单元,各所述序列号服务单元包含至少一个序列号生成器,其中各序列号服务单元中基于分布式系统的生成序列号的装置包括请求接收模块、内部序列号生成模块内部序列号生成模块和内部序列号生成模块,其中:
所述请求接收模块用于接收序列号申请请求;
所述内部序列号生成模块内部序列号生成模块用于通过序列号生成器生成内部序列号;
所述内部序列号生成模块用于从本地获取对应的实例号,根据所述实例号和所述内部序列号生成序列号。
根据一些实施例,所述实例号为根据唯一标识分配的实例号。
根据一些实施例,所述请求接收模块用于,接收业务系统发送的包含业务标识的序列号申请请求;
所述内部序列号生成模块用于,从本地获取所述业务标识对应的序列号规则,根据所述实例号和所述内部序列号采用所述序列号规则生成序列号,以返回给所述业务系统。
根据一些实施例,所述内部序列号生成模块内部序列号生成模块用于,通过所述业务标识对应的序列号生成器生成所述内部序列号。
根据本发明的另一方面,提供一种电子设备,包括:处理器;存储器,存储用于处理器控制以下操作的指令:
接收序列号申请请求;
通过序列号生成器生成内部序列号;
从本地获取对应的实例号,根据所述实例号和所述内部序列号生成序列号。
本申请的实施例提供的技术方案可以包括以下有益效果:
本申请的实施例提供的技术方案能够避免依赖数据库而造成数据库压力过大,能在数据库故障时提供不间断的服务。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本发明将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本发明的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本发明的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
图1示出了根据本发明一实施例的基于分布式系统的生成序列号的方法,本实施例可适用于分布式的序列号生成系统中各序列号服务单元基于分布式系统的生成序列号的情况,所述分布式系统包括多个服务器,各所述服务器包括至少一个序列号服务单元,各所述序列号服务单元包含至少一个序列号生成器,如图1所示,本实施例所述的各序列号服务单元生成序列号的方法包括:
在步骤S110中,接收序列号申请请求。
在步骤S120中,通过序列号生成器生成内部序列号。
在步骤S130中,从本地获取对应的实例号,根据所述实例号和所述内部序列号生成序列号。
所述实例号为根据唯一标识分配的实例号。所述唯一标识为执行上述操作的序列号服务单元的标识信息,其具体信息本实施例对此不作限定,只要能唯一标识序列号服务单元即可,本实施例对此不作限定,例如,可以为根据硬件标识和应用标识生成的唯一标识。
进一步地,根据本发明的一些实施例,所述硬件标识为序列号服务单元所安装的计算机的网卡标识、硬盘标识、或处理器标识。
根据本发明的一些实施例,所述应用标识为所述序列号服务单元的应用路径。
本实施例的执行主体为序列号服务单元,可同时为多个分布式的业务系统服务,例如为财务系统、保险系统、理财系统、人事系统等。
下面以甲业务系统和乙业务系统为例。例如,第一次,甲业务系统申请新序列号,该新建序列号的任务被分配给了A序列号服务单元,假设其实例号为A,A序列号服务单元通过序列号生成器生成内部序列号100001,最后根据实例号A和所述内部序列号100001生成序列号A100001。
第二次,甲业务系统再申请新序列号,该新建序列号的任务还被分配给了A序列号服务单元,得到序列号A100002。
第三次,甲业务系统再申请新序列号,该新建序列号的任务被分配给了B序列号服务单元,假设其实例号为B,B序列号服务单元通过序列号生成器生成内部序列号100001,最后根据实例号B和所述内部序列号100001生成序列号B100001。
第四次,乙业务系统申请新序列号,该新建序列号的任务被分配给了A序列号服务单元。得到序列号A100003。
第五次,乙业务系统再申请新序列号,该新建序列号的任务被分配给了B序列号服务单元。得到序列号B100002。
上述示例如下表所示。
任务序号 |
序列号申请主体 |
任务执行主体 |
产生的序列号 |
1 |
甲 |
A |
A100001 |
2 |
甲 |
A |
A100002 |
3 |
甲 |
B |
B100001 |
4 |
乙 |
A |
A100003 |
5 |
乙 |
B |
B100002 |
… |
… |
… |
… |
由上述表格可见,能够通过多个序列号服务单元A和B并行产生序列号,A和B每次均从自己本地取得实例号,能避免依赖数据库而造成数据库压力过大,能在数据库故障时提供不间断的服务。
本实施例通过序列号服务单元在接收序列号申请请求之后,通过序列号生成器生成内部序列号,从本地获取对应的实例号,所述实例号为根据唯一标识分配的实例号。根据所述实例号和所述内部序列号生成序列号,能通过多个序列号服务单元并行产生序列号,避免依赖数据库而造成数据库压力过大,能在数据库故障时提供不间断的服务。
图2示出了根据本发明另一实施例的基于分布式系统的生成序列号的方法,如图2所示,本实施例所述的基于分布式系统的生成序列号的方法包括:
在步骤S210中,接收业务系统发送的包含业务标识的序列号申请请求。
本实施例中,所述业务系统可为分布式的业务系统。
在步骤S220中,通过序列号生成器生成内部序列号。
在步骤S230中,从本地获取对应的实例号,从本地获取所述业务标识对应的序列号规则,根据所述实例号和所述内部序列号采用所述序列号规则生成序列号,以返回给所述业务系统。
本实施例的执行主体为序列号服务单元,可同时为多个分布式的业务系统服务,例如为财务系统、保险系统、理财系统、人事系统等。下面以甲业务系统和乙业务系统为例。
例如,第一次,甲业务系统申请新序列号,该新建序列号的任务被分配给了A序列号服务单元,A序列号服务单元在本地存储有根据其唯一标识从统一资源实例号服务中获取的唯一实例号,例如为A。同时,A序列号服务单元中存储有各业务系统对应的规则库(各序列号服务单元存储相同的规则库),甲业务系统对应的规则为实例号+6位内部序列,乙业务系统对应的规则为实例号+日期+6位内部序列。
首先,A序列号服务单元通过序列号生成器生成内部序列号,例如100001,根据甲业务系统对应的规则为实例号+6位内部序列,得到序列号A100001,即完成该序列号新建任务,将该序列号返回给甲业务系统。
第二次,甲业务系统再申请新序列号,该新建序列号的任务还被分配给了A序列号服务单元,A序列号服务单元还是执行上述操作,还是通过序列号生成器,由其生成内部序列号,例如100002,根据甲业务系统对应的规则为实例号+6位内部序列,得到序列号A100002,即完成该第二次序列号新建任务。
第三次,甲业务系统再申请新序列号,该新建序列号的任务被分配给了B序列号服务单元,B序列号服务单元在本地存储有根据其唯一标识从统一资源实例号服务中获取的唯一实例号,例如为B。同时,B序列号服务单元中也存储有各业务系统对应的规则库(各序列号服务单元存储相同的规则库),甲业务系统对应的规则为实例号+6位内部序列,乙业务系统对应的规则为实例号+日期+6位内部序列。假设B序列号服务单元有甲业务系统对应的序列号生成器和乙业务系统对应的序列号生成器。
首先,B序列号服务单元通过序列号生成器生成内部序列号,例如100001,根据甲业务系统对应的规则为实例号+6位内部序列,得到序列号B100001,即完成该序列号新建任务,将该序列号返回给甲业务系统。
第四次,乙业务系统申请新序列号,该新建序列号的任务被分配给了A序列号服务单元。首先,A序列号服务单元通过序列号生成器生成内部序列号,例如100003,根据乙业务系统对应的规则为实例号+日期+6位内部序列,得到序列号A20061118100003,即完成该序列号新建任务,将该序列号返回给乙业务系统。
第五次,乙业务系统再申请新序列号,该新建序列号的任务被分配给了B序列号服务单元。首先,B序列号服务单元通过序列号生成器生成内部序列号,例如100002,根据乙业务系统对应的规则为实例号+日期+6位内部序列,得到序列号B20061118100002,即完成该序列号新建任务,将该序列号返回给乙业务系统。
上述示例如下表所示。
申请序号 |
序列号申请主体 |
任务执行主体 |
产生的序列号 |
1 |
甲 |
A |
A100001 |
2 |
甲 |
A |
A100002 |
3 |
甲 |
B |
B100001 |
4 |
乙 |
A |
A20161118100003 |
5 |
乙 |
B |
B20161118100002 |
… |
… |
… |
… |
由上述示例可见,因为A序列号服务单元与B序列号服务单元在本地存储了不同业务系统的序列号规则(可以根据业务要求为业务系统自定义规则和长度,满足不同的业务系统的需求),最后为不同的业务系统生成的序列号是能有区别的。如上表所示,为甲应用系统生成的序列号是7位的,为乙应用系统生成的序列号是15位的。
因此,本实施例所述的方法可以根据业务要求为业务系统自定义规则和长度,满足不同的业务系统的需求。
图3示出了根据本发明又一实施例的基于分布式系统的生成序列号的方法,如图3所示,本实施例所述的基于分布式系统的生成序列号的方法包括:
在步骤S310中,接收业务系统发送的包含业务标识的序列号申请请求。
在步骤S320中,通过所述业务标识对应的序列号生成器生成所述内部序列号。
本步骤之前,还可包括根据所述业务标识在本地查找对应的序列号生成器,若查找失败,则在本地创建新的序列号生成器作为所述业务标识对应的序列号生成器。
在步骤S330中,从本地获取对应的实例号,从本地获取所述业务标识对应的序列号规则,根据所述实例号和所述内部序列号采用所述序列号规则生成序列号,以返回给所述业务系统。
本实施例的执行主体为序列号服务单元,可同时为多个分布式的业务系统服务,例如为财务系统、保险系统、理财系统、人事系统等。下面以甲业务系统和乙业务系统为例。
例如,第一次,甲业务系统申请新序列号,该新建序列号的任务被分配给了A序列号服务单元,A序列号服务单元在本地存储有根据其唯一标识从统一资源实例号服务中获取的唯一实例号,例如为A。同时,A序列号服务单元中存储有各业务系统对应的规则库(各序列号服务单元存储相同的规则库),甲业务系统对应的规则为实例号+6位内部序列,乙业务系统对应的规则为实例号+日期+6位内部序列。假设A序列号服务单元有甲业务系统对应的序列号生成器A1和乙业务系统对应的序列号生成器A2。
首先,A序列号服务单元找到甲业务系统对应的序列号生成器A1,由其生成内部序列号,例如100001,根据甲业务系统对应的规则为实例号+6位内部序列,得到序列号A100001,即完成该序列号新建任务,将该序列号返回给甲业务系统。
第二次,甲业务系统再申请新序列号,该新建序列号的任务还被分配给了A序列号服务单元,A序列号服务单元还是执行上述操作,还是找到甲业务系统对应的序列号生成器(与上次相同),由其生成内部序列号,例如100002,根据甲业务系统对应的规则为实例号+6位内部序列,得到序列号A100002,即完成该第二次序列号新建任务。
第三次,甲业务系统再申请新序列号,该新建序列号的任务被分配给了B序列号服务单元,B序列号服务单元在本地存储有根据其唯一标识从统一资源实例号服务中获取的唯一实例号,例如为B。同时,B序列号服务单元中也存储有各业务系统对应的规则库(各序列号服务单元存储相同的规则库),甲业务系统对应的规则为实例号+6位内部序列,乙业务系统对应的规则为实例号+日期+6位内部序列。假设B序列号服务单元有甲业务系统对应的序列号生成器和乙业务系统对应的序列号生成器。
首先,B序列号服务单元找到甲业务系统对应的序列号生成器,由其生成内部序列号,例如100001,根据甲业务系统对应的规则为实例号+6位内部序列,得到序列号B100001,即完成该序列号新建任务,将该序列号返回给甲业务系统。
第四次,乙业务系统申请新序列号,该新建序列号的任务被分配给了A序列号服务单元。首先,A序列号服务单元找到乙业务系统对应的序列号生成器,由其生成内部序列号,例如100003,根据乙业务系统对应的规则为实例号+日期+6位内部序列,得到序列号A20061118100003,即完成该序列号新建任务,将该序列号返回给乙业务系统。
第五次,乙业务系统再申请新序列号,该新建序列号的任务被分配给了B序列号服务单元。首先,B序列号服务单元找到乙业务系统对应的序列号生成器,由其生成内部序列号,例如100002,根据乙业务系统对应的规则为实例号+日期+6位内部序列,得到序列号B20061118100002,即完成该序列号新建任务,将该序列号返回给乙业务系统。
上述示例如下表所示。
申请序号 |
序列号申请主体 |
任务执行主体 |
产生的序列号 |
1 |
甲 |
A |
A100001 |
2 |
甲 |
A |
A100002 |
3 |
甲 |
B |
B100001 |
4 |
乙 |
A |
A20161118100001 |
5 |
乙 |
B |
B20161118100001 |
… |
… |
… |
… |
由上表所示,因为A序列号服务单元与B序列号服务单元均有对同一业务系统的序列号生成器,它们可以独立的顺次生成内部序列号,而因为A序列号服务单元与B序列号服务单元的实例号不同,所以对于同一业务系统请求的任务而言,不管任务是分配给哪一个序列号服务单元,其返回的序列号是唯一的,不会重复,并且因其采用的同一序列号规则,因此两个服务得到的序列号是结构相似的,所以说可以根据业务要求为业务系统自定义规则和长度,满足不同的业务系统的需求。
采用本实施例的技术方案,同一个序列号服务单元为同一个应用系统产生的序列号连续,能使为各业务生成的序列号相互独立。
需要说明的是,本实施例还可以在序列号服务单元不断执行序列号生成任务,不断生成服务的同时。将所生成的序列号写入文件系统的页缓存,通过定时或定量的方式将所述页缓存映射到磁盘或数据库中。当序列号服务单元断电或重启后,能够根据所述磁盘或数据库中的序列号和配置的步长控制所述序列号生成器生成内部序列号。例如每生成100个序列号后就将页缓存映射到数据库中,当序列号服务单元断电或重启后,从数据库中读取最后存储的序列号,分析其内部序列号,若内部序列号为yyyy,则下一次生成的内部序列号从yyyy+100开始,即可避免产生重复的序列号。
另外,本实施例中,通过序列号生成器生成内部序列号,还可通过处理器的高速缓存确认序列号生成器所生成的内部序列号的唯一性。
图4示出了根据本发明一实施例的基于分布式系统的生成序列号的装置的框图,本实施例所述分布式系统包括多个服务器,各所述服务器包括至少一个序列号服务单元,各所述序列号服务单元包含至少一个序列号生成器,如图4所示,本实施例所述的各序列号服务单元中基于分布式系统的生成序列号的装置包括请求接收模块410、内部序列号生成模块内部序列号生成模块420和内部序列号生成模块430,其中:
该请求接收模块410被配置为,用于接收序列号申请请求;
该内部序列号生成模块内部序列号生成模块420被配置为,用于通过序列号生成器生成内部序列号;
该内部序列号生成模块430被配置为,用于从本地获取对应的实例号,根据所述实例号和所述内部序列号生成序列号。
根据本发明的实施例,所述请求接收模块410用于,接收业务系统发送的包含业务标识的序列号申请请求;所述内部序列号生成模块430用于,从本地获取所述业务标识对应的序列号规则,根据所述实例号和所述内部序列号采用所述序列号规则生成序列号,以返回给所述业务系统。
根据本发明的实施例,所述内部序列号生成模块内部序列号生成模块420用于,通过所述业务标识对应的序列号生成器生成所述内部序列号。
关于上述实施例中的装置,其中各个单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本实施例提供的基于分布式系统的生成序列号的装置可执行本发明方法实施例所提供的基于分布式系统的生成序列号的方法,具备执行方法相应的功能模块和有益效果。
图5示出了根据本发明一实施例的电子设备,如图5所示,电子设备500可包括处理器510、存储器520、及其他装置530。
存储器520可存储用于处理器510控制操作处理的指令。存储器520可包括易失性或非易失性存储器,如静态随机存取存储器(SRAM)、电可擦除可编程只读存储器(EEPROM)、可擦除可编程只读存储器(EPROM)、可编程只读存储器(PROM)、只读存储器(ROM)等,本发明对此没有限制。
处理器510可调用存储器520中存储的指令控制相关操作。根据一实施例,存储器520存储用于处理器510控制以下操作的指令:
接收序列号申请请求;
通过序列号生成器生成内部序列号;
从本地获取对应的实例号,根据所述实例号和所述内部序列号生成序列号。
易于理解,存储器520还可存储用于处理器510控制根据本发明实施例的其他操作的指令,这里不再赘述。
通过以上的详细描述,本领域的技术人员易于理解,根据本发明实施例的系统和方法具有以下优点中的一个或多个。
根据本发明的实施例,接收序列号申请请求包括:接收业务系统发送的包含业务标识的序列号申请请求;根据所述实例号和所述内部序列号生成序列号包括:从本地获取所述业务标识对应的序列号规则,根据所述实例号和所述内部序列号采用所述序列号规则生成序列号,以返回给所述业务系统。
根据本发明的一些实施例,通过序列号生成器生成内部序列号包括:通过所述业务标识对应的序列号生成器生成所述内部序列号。
根据一些实施例,本发明还提供一种非临时性计算机可读存储介质,例如包括指令的存储器,上述指令可由装置的处理器执行以完成上述方法。例如,非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。当存储介质中的指令由终端的处理器执行时,使得终端能够执行下述方法:将脚本模块中的原生资源名称变换为原生资源ID;原生应用模块通过原生资源ID获取相应的原生资源。
本领域技术人员可以理解,附图只是示例实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的,因此不能用于限制本发明的保护范围。
本领域技术人员可以理解上述各模块可以按照实施例的描述分布于装置中,也可以进行相应变化唯一不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
以上具体地示出和描述了本发明的示例性实施例。应该理解,本发明不限于所公开的实施例,相反,本发明意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效布置。