用于动态访问数据源的系统和方法转让专利

申请号 : CN201110405639.4

文献号 : CN102521339B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 孙炳蔚

申请人 : 北京京东世纪贸易有限公司

摘要 :

本发明提供了一种动态访问数据源的系统和方法。所述系统包括:数据源注册模块,用于增加或变更数据源连接;数据源心跳检查模块,用于每隔第一预定时段轮询数据源列表中的所有数据源,获得每个数据源的响应时间,并使得响应时间超过超时阈值的数据源进入异常数据源列表;数据源自动负载模块,用于:每隔第二预定时段,根据每个数据源的权重和响应时间生成随机ID列表;将所生成的随机ID与数据源进行绑定;在接收到数据源连接请求时,基于随机ID选出一个数据源;以及获得到所选出的一个数据源的连接。

权利要求 :

1.一种动态访问数据源的系统,包括:用于生成数据源列表的装置;

用于每隔第一预定时段轮询所述数据源列表中的所有数据源,获得每个数据源的响应时间,并使得响应时间超过超时阈值的数据源进入异常数据源列表的装置;

用于每隔第二预定时段,根据每个数据源的权重和响应时间生成随机ID列表的装置;

用于将所生成的随机ID与数据源进行绑定的装置;

用于在接收到数据源连接请求时,基于随机ID选出一个数据源的装置;以及用于获得到所选出的一个数据源的连接的装置。

2.根据权利要求1所述的系统,进一步包括:用于每隔第三预定时段,轮询所述异常数据源列表中的所有数据源的装置;

用于如果有数据源恢复正常,则从所述异常数据源列表删除该数据源并且向所述数据源列表增加该数据源的装置。

3.根据权利要求1所述的系统,进一步包括:用于如果应用方法报数据源连接异常,则向所述异常数据源列表增加该数据源并且从所述数据源列表删除该数据源的装置。

4.根据权利要求1所述的系统,进一步包括:用于对数据源连接进行监控的装置。

5.一种动态访问数据源的方法,包括:生成数据源列表;

每隔第一预定时段轮询所述数据源列表中的所有数据源,获得每个数据源的响应时间,并使得响应时间超过超时阈值的数据源进入异常数据源列表;

每隔第二预定时段,根据每个数据源的权重和响应时间生成随机ID列表;

将所生成的随机ID与数据源进行绑定;

在接收到数据源连接请求时,基于随机ID选出一个数据源;以及获得到所选出的一个数据源的连接。

6.根据权利要求5所述的方法,进一步包括:每隔第三预定时段,轮询所述异常数据源列表中的所有数据源;

如果有数据源恢复正常,则从所述异常数据源列表删除该数据源并且向所述数据源列表增加该数据源。

7.根据权利要求5所述的方法,进一步包括:如果应用方法报数据源连接异常,则向所述异常数据源列表增加该数据源并且从所述数据源列表删除该数据源。

8.根据权利要求5所述的方法,进一步包括:对数据源连接进行监控。

说明书 :

用于动态访问数据源的系统和方法

技术领域

[0001] 本发明总体地涉及数据库领域,更具体地说,本发明涉及一种用于动态访问数据源的系统和方法。

背景技术

[0002] 近年来,社交网络服务、微博等得到了越来越广泛的应用。然而,对于社交网络服务、微博等,有一个共同点是数据量大、并发读写要求高。从数据库的角度来看,比较好的处理是通过数据切分来实现,但是这带来多个数据源访问之间的负载、容错与高效问题。

发明内容

[0003] 为了解决现有技术中的上述缺点和问题而提出本发明。
[0004] 根据本发明的一个方面,提供了一种动态访问数据源的系统,包括:
[0005] 数据源注册模块,用于增加或变更数据源连接;
[0006] 数据源心跳检查模块,用于每隔第一预定时段轮询数据源列表中的所有数据源,获得每个数据源的响应时间,并使得响应时间超过超时阈值的数据源进入异常数据源列表;
[0007] 数据源自动负载模块,用于:
[0008] 每隔第二预定时段,根据每个数据源的权重和响应时间生成随机ID列表;
[0009] 将所生成的随机ID与数据源进行绑定;
[0010] 在接收到数据源连接请求时,基于随机ID选出一个数据源;以及[0011] 获得到所选出的一个数据源的连接。
[0012] 根据本发明的该方面的系统可以进一步包括:数据源自动恢复模块,用于每隔第三预定时段,轮询所述异常数据源列表中的所有数据源;如果有数据源恢复正常,则从所述异常数据源列表删除该数据源并且向所述数据源列表增加该数据源。
[0013] 根据本发明的该方面的系统可以进一步包括:连接异常拦截模块,用于如果应用方法报数据源连接异常,则向所述异常数据源列表增加该数据源并且从所述数据源列表删除该数据源。
[0014] 根据本发明的该方面的系统可以进一步包括:系统管理模块,用于管理数据源配置、管理权重、设置所述第一预定时段和第二预定时段或第三预定时段的长度。
[0015] 根据本发明的该方面的系统可以进一步包括:连接监控模块,用于监控数据源连接。
[0016] 根据本发明的另一个方面,提供了一种动态访问数据源的方法,包括:
[0017] 生成数据源列表;
[0018] 每隔第一预定时段轮询所述数据源列表中的所有数据源,获得每个数据源的响应时间,并使得响应时间超过超时阈值的数据源进入异常数据源列表;
[0019] 每隔第二预定时段,根据每个数据源的权重和响应时间生成随机ID列表;
[0020] 将所生成的随机ID与数据源进行绑定;
[0021] 在接收到数据源连接请求时,基于随机ID选出一个数据源;以及[0022] 获得到所选出的一个数据源的连接。
[0023] 根据本发明的该方面的系统可以进一步包括:每隔第三预定时段,轮询所述异常数据源列表中的所有数据源;如果有数据源恢复正常,则从所述异常数据源列表删除该数据源并且向所述数据源列表增加该数据源。
[0024] 根据本发明的该方面的方法可以进一步包括:如果应用方法报数据源连接异常,则向所述异常数据源列表增加该数据源并且从所述数据源列表删除该数据源。
[0025] 根据本发明的该方面的方法可以进一步包括:对数据源连接进行监控。

附图说明

[0026] 通过下面结合附图进行的描述,本发明一些示范性实施例的上述和其他方面、特征和优点对于本领域技术人员来说将变得显而易见,其中:
[0027] 图1是根据本发明的示范性数据库动态数据源访问、负载和容错系统的框图;
[0028] 图2是示出根据本发明的示范性数据库动态数据源访问、负载和容错方法的流程图;
[0029] 图3是根据本发明的示范性心跳检查的过程的流程图;
[0030] 图4(a)和4(b)是根据本发明的示范性自动负载的过程的流程图;以及[0031] 图5是根据本发明的示范性自动恢复的过程的流程图。

具体实施方式

[0032] 提供参考附图的下面描述以帮助全面理解本发明的示范性实施例。其包括各种细节以助于理解,而应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,省略了对公知功能和结构的描述。
[0033] 下面将参考附图详细描述本发明。
[0034] 图1是示出根据本发明的示范性数据库动态数据源访问、负载和容错系统100的框图。
[0035] 系统100包括数据源注册模块110、数据源心跳检查模块120、数据源自动负载模块130。
[0036] 数据源注册模块110用于增加或变更数据源连接。例如,当需要增加新的数据源连接或变更现有数据源连接时,可以通过数据源注册模块110来将新的数据源连接注入到数据源容器中,或可以通过数据源注册模块110来该数据源容器中的已有数据源连接,而不需要重启应用。在使用J2EE架构的情况下,可以通过JMX(Java ManagementExtensions)来实现数据源注册模块110。如本领域技术人员所了解的,JMX是为应用植入管理功能的框架,通过其将容易地实现数据源注册模块110。
[0037] 数据源心跳检查模块120用于每隔预定时段轮询数据源列表中的所有数据源,获得每个数据源的响应时间,并使得响应时间超过超时阈值的数据源进入异常数据源列表。例如,数据源心跳检查模块120可以每隔1分钟(可以根据需要而采用其它预定时段)轮询数据源列表中的所有数据源,即向数据源列表中的所有数据源模拟一次真实的数据查询请求。确定从数据源接收到的响应的时间,并且在超过超时阈值(例如10秒,可以根据需要而采用其它阈值)时,将相应的数据源增加到异常数据源列表,从数据源列表删除该数据源。
[0038] 数据源自动负载130模块用于:每隔预定时段(例如15分钟),根据每个数据源的权重和响应时间生成随机ID列表;将所生成的随机ID与数据源进行绑定;在接收到数据源连接请求时,基于随机ID选出一个数据源;以及获得到所选出的一个数据源的连接。所述数据源的权重可以基于数据源的性能等各种因素设置,并且可以通过系统管理模块(稍后描述)进行管理(例如设置和/或改变)。可以对响应时间所处的范围进行赋值,例如,当响应时间小于500毫秒时,将响应时间权重值赋予10;当响应时间大于等于500毫秒并且小于1秒时,将响应时间权重值赋予5;当响应时间大于等于1秒并且小于2秒时,将响应时间权重值赋予2;当响应时间大于等于2秒并且小于5秒时,将响应时间权重值赋予1;以及当响应时间大于5秒时,将响应时间权重值赋予0。以上仅仅是一个示例,可以根据具体环境来使响应时间来影响随机ID列表的生成。在生成随机ID列表时,可以将所生成的随机ID与数据源(即数据源连接)进行绑定,并且在接收到数据源连接请求时,基于随机ID选出一个数据源,并获得到所选出的一个数据源的连接。由此,在获得数据源连接时,使得正常并且负载轻的数据源容易得到连接。
[0039] 此外,系统100还可以包括数据源自动恢复模块140。数据源自动恢复模块140用于定期检查异常数据源列表,使得连接正常的数据源加入到数据源列表中。例如,数据源自动恢复模块140每隔10分钟,轮询所述异常数据源列表中的所有数据源,即向数据源异常列表中的数据源发送数据连接心跳信息并且记录其结果。如果有数据源恢复正常,则从所述异常数据源列表删除该数据源并且向所述数据源列表增加该数据源。
[0040] 而且,系统100还可以包括连接异常拦截模块150。连接异常拦截模块150用于在发生数据源连接异常时,使得数据源停止服务并进入异常数据源列表。也就是说,如果应用方法报数据源连接异常,则向所述异常数据源列表增加该数据源并且从所述数据源列表删除该数据源。在使用J2EE架构时,可以通过使用spring框架下的AOP(AspectOriented Programming)来实现连接异常拦截模块150。如本领域技术人员所了解的,AOP能够对于所有业务服务进行监控,并且在发现服务异常时,实时拦截到。所以,在此将不详细介绍连接异常拦截模块150。
[0041] 并且,系统100还可以包括连接监控模块160。连接监控模块160用于监控数据源连接。例如,连接监控模块160可以访问数据源调用日志来生成数据源连接报表。在J2EE架构的情况下,例如可以使用JFreeChart图标绘制类库来实现。
[0042] 此外,系统100还可以包括系统管理模块170。系统管理模块170用于对各种设置进行管理。例如,系统管理模块170可以管理数据源配置、管理权重、设置心跳检查的时段、数据源自动负载的时段以及数据源自动恢复的时段的长度。
[0043] 如在图1中所示,系统100的运行可以借助于各种框架或API来实现。例如,在采用J2EE架构的情况下,可以借助于Spring、ORM、JDBC、JTA等来实现。
[0044] 图2是示出根据本发明的示范性数据库动态数据源访问、负载和容错方法200的流程图。
[0045] 在步骤210中,首先生成数据源列表。例如,可以通过人工或通过数据源自动注册模块或通过系统管理模块来生成或修改数据源。
[0046] 在步骤220中,对数据源进行心跳检查,以确定数据源是否正常,并且将不正常的数据源从数据源列表中删除并加入到数据源异常列表中。在下面将参考图3详细描述心跳检查的过程。
[0047] 在步骤230中,进行自动负载处理,使得正常并且负载轻的数据源容易得到连接。在下面将参考图4详细描述自动负载的过程。
[0048] 在步骤240中,进行自动恢复处理,使得将恢复正常的数据源从数据源异常列表中删除并加入到数据源列表中。在下面将参考图5详细描述自动恢复的过程。
[0049] 方法200可以进一步包括对数据源连接异常进行拦截,例如,在应用方法报数据源连接异常的情况下,向异常数据源列表增加该数据源并且从所述数据源列表删除该数据源。
[0050] 方法200还可以包括对数据源连接进行监控,例如通过访问数据源调用日志来生成数据源连接报表。
[0051] 图3是根据本发明的示范性心跳检查的过程300的流程图。
[0052] 如图3中所示,过程300在步骤310中确定是否达到预定间隔开始。预定间隔例如可以是1分钟,当然也可以根据需要而设置为其它值。
[0053] 当在步骤310中确定达到预定间隔时,在步骤320轮询数据源列表中的所有数据源,即向数据源列表中的所有数据源模拟一次真实的数据查询请求。
[0054] 在步骤330中确定是否在超时阈值内从数据源接收到响应。超时阈值例如可以是10秒,当然也可以根据需要而设置为其它值。
[0055] 当在超时阈值内没有从数据源接收到响应时,在步骤340从数据源列表删除该数据源,并在步骤350将相应的数据源增加到异常数据源列表。
[0056] 另一方面,如果在超时阈值内从数据源接收到响应,则在步骤360记录响应时间。
[0057] 图4(a)和4(b)是根据本发明的示范性自动负载的过程400的流程图。
[0058] 如图4(a)中所示,过程400在步骤410中确定是否达到预定间隔开始。预定间隔例如可以是1分钟,当然也可以根据需要而设置为其它值。
[0059] 当在步骤410中确定达到预定间隔时,在步骤420获得数据源权重(例如,可以读取缓存来获得数据源权重),并且在步骤430获得心跳检查过程中记录的响应时间。
[0060] 在步骤440根据每个数据源的权重和响应时间(例如根据响应时间所处的时间范围而赋予不同的权重值)生成随机ID列表,并且在步骤450将所生成的随机ID与数据源进行绑定。
[0061] 在图4(b)中,首先在步骤460接收数据源连接请求。在步骤470生成随机数,并且然后在步骤480基于与随机数相对应的随机ID选出一个数据源,最后在步骤490获得到所选出的一个数据源的连接。
[0062] 图5是根据本发明的示范性自动恢复的过程500的流程图。
[0063] 在步骤510遍历异常数据源列表。在步骤520确定是否有数据源恢复正常,如果有数据源恢复正常,则在步骤530将恢复正常的数据源加入数据源列表(并更新其响应时间)并在步骤540将该数据源从异常数据源列表中删除。
[0064] 应指出的是,上面分别对本发明的系统和方法实施例分别进行了描述,但是对一个实施例描述的细节也可应用于另一个实施例。
[0065] 以上结合具体实施例描述了本发明的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本发明的方法和系统的全部或者任何步骤或者部件可以以软件、硬件、固件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本发明的说明的情况下运用他们的基本编程技能就能实现的。
[0066] 因此,本发明的目的还可以通过在任何计算装置上运行一个软件模块或者一组软件模块来实现。所述计算装置可以是公知的通用装置。因此,本发明的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本发明,并且存储有这样的程序产品的存储介质也构成本发明。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。
[0067] 虽然本说明书包含许多特定实施方式细节,但是不应当将这些细节解释为对任何发明或可以主张的内容的范围的限制,而应当解释为对可以特定于特定发明的特定实施例的特征的描述。还可以将在本说明书中在分离的实施例的情境中描述的某些特征组合在单个实施例中实现。相反地,也可以将在单个实施方式的情境中描述的各个特征分离地在多个实施方式中实现或在任何适当的子组合中实现。此外,尽管可能在上面将特征描述为在某些组合中起作用,甚至最初主张如此,但是可以在一些情况下将来自所主张的组合的一个或多个特征从组合中删去,并且可以将所主张的组合指向子组合或者子组合的变体。
[0068] 类似地,虽然在附图中以特定次序描绘了操作,但是不应当将这理解为需要以所示的特定次序或者以连续次序执行这样的操作、或者需要执行所有图示的操作才能达到期望的结果。在某些情况下,多任务以及并行处理可以是有利的。此外,不应当将在上述实施例中的各种系统组件的分离理解为在所有实施例中均需要这样的分离,而应当理解的是,通常可以将所描述的程序组件和系统集成到一起成为单个软件产品或封装为多个软件产品。
[0069] 计算机程序(也称作程序、软件、软件应用、脚本或代码)可以以任何形式的编程语言编写,所述编程语言包括编译或解释语言、或者说明性或过程语言,并且其可以以任何形式部署,包括作为独立程序或作为模块、组件、子程序或适于在计算环境中使用的其它单元。计算机程序没有必要对应于文件系统中的文件。可以将程序存储在保持其它程序或数据的文件(例如,存储在标记语言文档中的一个或多个脚本)的一部分、专用于讨论中的程序的单个文件或者多个协调文件(例如,存储一个或多个模块、子程序或部分代码的文件)中。
[0070] 上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。