CN106502589A - 基于云计算实现缓存的加载或持久化的***及方法 - Google Patents
基于云计算实现缓存的加载或持久化的***及方法 Download PDFInfo
- Publication number
- CN106502589A CN106502589A CN201610917273.1A CN201610917273A CN106502589A CN 106502589 A CN106502589 A CN 106502589A CN 201610917273 A CN201610917273 A CN 201610917273A CN 106502589 A CN106502589 A CN 106502589A
- Authority
- CN
- China
- Prior art keywords
- caching
- persistence
- loading
- data
- leader
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于云计算实现缓存的加载或持久化的***,其中包括调度模块、缓存模块、数据源模块和事件模块,所述的调度模块分别与所述的缓存模块、数据源模块和事件模块相连接;还包括一种基于云计算实现缓存的加载或持久化的方法。采用了该发明中的基于云计算实现缓存的加载或持久化的***及方法,***架构简单,不依赖于某种缓存实现或者某种具体类型的数据源,在云计算环境下能自动选择服务节点加载和持久化缓存数据,适用于不同类型的数据源硬编码,具有广泛的应用范围。
Description
技术领域
本发明涉及计算机软件技术领域,尤其涉及云计算技术领域,具体是指一种基于云计算实现缓存的加载或持久化的***及方法。
背景技术
缓存作为一种有效提高性能的技术已经被广泛采用,使用缓存的一个难点在于保证缓存中的数据正确性,即保证缓存的数据和数据源的数据一致性。在传统单机环境下,从数据源加载数据和将数据持久化到数据源都由单机应用完成,实现相对简单。但是在云计算环境下,保证缓存的数据和数据源的数据一致性更有挑战,在云计算环境下,一般的数据都通过专门的微服务来访问,为保证可用性,微服务都采用多节点部署,意味着不能再简单的由每个节点来加载和持久化数据。另外云计算环境下,资源多由自动分配,所以将加载和持久化绑定到某个节点也不可行。缓存的数据加载是使用缓存的基础,需要一套成熟的技术和方法来支撑。
现在各***使用缓存时加载和持久化过程呈现多样化的特点,有些***采用人工初始化的方法,这类***主要针对的是静态数据,初始化完成后数据长期不会变化,如果需要变化需要人工重新初始化。对于非静态数据,目前大多数采用硬编码的方式,针对不同***,不同类型的数据源做不同的适配,对于云计算环境下还需要单独的配置指定某个节点完成加载或持久化动作,没有一种统一的规划和技术方案。
现有的实现方式存在以下不足:1、实施周期长,而且因为实施人员的水品参差不齐也给测试带来更大的工作量;2、对于云计算环境下,需要指定固定的节点来完成加载或持久化动作,一旦该节点出现问题,就不能保证缓存数据的时效性;3、针对不同类型的数据源硬编码过多,不能达到很好复用的效果。
发明内容
本发明的目的是克服了上述现有技术的缺点,提供了一种能够实现在云计算环境下自动选择服务节点加载和持久化缓存数据的***及方法。
为了实现上述目的,本发明的具有如下构成:
一种基于云计算实现缓存的加载或持久化的***,包括调度模块、缓存模块、数据源模块和事件模块,所述的调度模块分别与所述的缓存模块、数据源模块和事件模块相连接。
较佳地,所述的调度模块包括:
分布式选举单元,用于对每个缓存的数据集选举一个leader,由该leader执行将缓存的数据项从数据源加载到缓存中,并且由该leader将缓存中的数据持久化到数据源中;
任务工作池单元,该任务工作池单元为一用于管理加载和持久化执行的线程,并支持弹性调整执行线程数量,在忙时增加处理线程,在闲时释放处理线程。
较佳地,所述的缓存模块包括:
缓存接口单元,定义该缓存的加载或持久化的***与在各缓存实现之间的交互接口,通过该缓存接口单元与具体的缓存实现进行解耦,从而支持多重缓存实现,如Redis、memcache等;
缓存适配单元,用于针对具体的缓存存储对缓存SPI的实现。
较佳地,所述的数据源模块包括:
数据定义单元,用于定义缓存的数据集来源,所述的数据来源包括配置文件、关系型数据库和外部***,并且定义数据的加载和持久化策略,所述的数据的加载和持久化策略包括定时加载和持久化策略和通知加载和持久化策略,其中,加载和持久化方法包括同步和异步两种;
数据源适配单元,用于从数据读取数据,并将数据写到数据源,该数据源适配单元可以根据需要扩展多个,分别针对不同的数据源。
较佳地,所述的事件模块包括:
事件中心单元,leader节点通过该事件中心单元接收非leader节点的状态变化通知。
还包括一种通过上述***基于云计算实现缓存的加载或持久化的方法,所述的方法包括以下步骤:
(1)定义缓存提供者;
(2)定义缓存数据集以及加载或持久化策略;
(3)自动调度加载或持久化;
(4)发布数据变化事件。
较佳地,所述的步骤(1)包括以下步骤:
(1-1)根据缓存提供者配置文件模板新建缓存提供者配置文件,扩展名为:.chpx;
(1-2)在所述的缓存提供者配置文件中按照模板增加缓存实例定义;
(1-3)为所述的缓存实例定义配置id属性,所配置的id值必须全局唯一;
(1-4)为所述的缓存实例定义配置provider属性,provider属性的值是一种缓存SPI接口的实现,如redis缓存SPI实现;
(1-5)为所述的缓存实例定义配置私有属性,如果是本地缓存,则配置缓存大小;如果是远程缓存,则配置远程缓存的地址、端口、用户名和密码。
较佳地,所述的步骤(2)包括以下步骤:
(2-1)根据缓存数据集配置文件模板新建缓存数据集配置文件,扩展名为:.chsx;
(2-2)在所述的缓存数据集配置文件中按照模板增加缓存数据集的定义;
(2-3)为所述的缓存数据集定义配置命名空间属性和数据集名称属性,所述的命名空间属性和所述的数据集名称属性组合生成一个唯一的id,组合规则为:命名空间+“.”+数据集名称;
(2-4)为所述的缓存数据定义配置数据源类型,如果是数据源类型是文件型,则配置文件路径,如果是关系型数据库类型,则配置关系型数据库的服务器地址和端口;
(2-5)为所述的缓存数据定义配置加载或持久化策略。
更佳地,所述的步骤(2-5)包括以下步骤:
(2-5-1)为所述的缓存数据集定义配置场景类型:“加载”或“持久化”,如果是“加载”场景类型,则继续步骤(2-5-2),如果是“持久化”场景类型,则继续步骤(2-5-3);
(2-5-2)为所述的缓存数据集定义配置read实现类,其中read实现类从上述配置的数据源中读取数据,继续步骤(2-5-4);
(2-5-3)为所述的缓存数据集定义配置write实现类,其中write实现类从将缓存中变化的内容持久化到上述的数据源中;
(2-5-4)为所述的缓存数据集定义配置调度策略,可设置的值为固定频率刷新、懒加载和缓冲区大小阈值,如果设置的值为固定刷新频率,则继续设置刷新周期,如果设置的值为缓冲区大小,则继续设置缓冲区的阈值;
(2-5-5)为所述的缓存数据集定义配置动作模式,可设置的值为同步和异步。
较佳地,所述的步骤(3)包括以下步骤:
(3-1)加载缓存提供者配置文件;
(3-2)加载缓存数据集配置文件;
(3-3)针对每个缓存数据集选择一个leader节点来执行加载或持久化动作,在有更新时判断当前节点类型,如果是非leader节点,则继续步骤(3-4),如果是leader节点,则继续步骤(3-5);
(3-4)非leader节点当缓存,通过上述事件子***通知leader节点有变化的key,继续步骤(3-3);
(3-5)leader节点根据上述配置的加载或持久化策略来加载或持久化数据,继续步骤(3-3)。
更佳地,其特征在于,所述的步骤(3-1)包括以下步骤:
(3-1-1)扫描指定目录下所有以.chpx为扩展名的文件,调用解析器解析成缓存数据配置模型对象;
(3-1-2)将模型对象注册到缓存提供者manager中,在***停止时通过manager释放资源;
(3-1-3)如果模型对象指示的缓存提供者为远程缓存,则启动该模型,建立与远程缓存的连接。
更佳地,所述的步骤(3-2)包括以下步骤:
(3-2-1)扫描指定目录下的所有以.chsx为扩展名的文件,调用解析器解析成配置模型对象;
(3-2-2)将模型对象注册到缓存数据集manager中,在***停止时通过manager释放资源。
更佳地,所述的针对每个缓存数据集选择一个leader节点来执行加载或持久化动作,具体为:
(3-3-1)生成一个唯一的节点id,目前生成id的方式为uuid;
(3-3-2)构造用于保存选举状态的缓存key,key的生成规则为“_learder_key_”+缓存数据集id,即“_leader_key_”+缓存数据集命名空间+“.”+缓存数据集名称;
(3-3-3)将用于检查状态值的计数器初始化为零;
(3-3-4)将暂存的上次选举状态值初始化为空;
(3-3-5)通过缓存SPI单元的get接口获取当前的选举状态值,并判断当前的选举状态值,如果是当前的选举状态值null,则继续步骤(3-3-6),如果当前的选举状态值不等于暂存的上次选举状态值,则继续步骤(3-3-7),如果是leader节点,则继续步骤(3-3-8),否则,继续步骤(3-3-9);
(3-3-6)自荐成为leader,继续步骤(3-4);
(3-3-7)检查状态值的计数器清零,将暂存选举状态值设置为所述的当前选举状态值,并在等待1秒后继续步骤(3-3-5);
(3-3-8)根据上述获取到的选举状态值确定是否自身是leader节点,生成新的选举状态值,并通过缓存模块的SPI接口replace更新缓存,继续步骤(3-4);
(3-3-9)将检查状态值计算器的值+1,并判断是否计算器值达到上限,如果是,则自荐成为leader。
更进一步地,所述的自荐成为leader,具体为:
(3-3-6-1)生成新的选举状态值,生成规则为:上述生成的唯一节点id+“.”+最新时间戳;
(3-3-6-2)通过缓存模块的replace接口尝试将选举状态值设置为所述的新的选举状态值,如果是设置成功,则自荐成功,否则自荐失败,其中replace接口原子的检查旧状态值没有变化才会更新为新状态值;
(3-3-6-3)将暂存的上次选举状态值更新为所述的新的选举状态值。
更进一步地,所述的根据上述获取到的选举状态值确定是否自身是leader节点,具体为:
(3-3-8-1)从上述获取到的选举状态中获取leader的节点id,获取方式为取选举状态值中的开始到“.”的部分;
(3-3-8-2)比较上述获取到的leader节点id和自身的节点id,如果相等则自身是leader节点,否则不是。
较佳地,所述的步骤(4)包括以下步骤:
(4-1)获取leader节点的事件发送地址;
(4-2)通过restful接口地址发送变化调目的key,不需要发送当前的值,对于多个key的连续更新可以合并事件。
采用了该发明中的基于云计算实现缓存的加载或持久化的***及方法,***架构简单,不依赖于某种缓存实现或者某种具体类型的数据源,在云计算环境下能自动选择服务节点加载和持久化缓存数据,适用于不同类型的数据源硬编码,具有广泛的应用范围。
附图说明
图1为本发明的基于云计算实现缓存的加载或持久化的***的持久化数据流示意图。
图2为本发明的基于云计算实现缓存的加载或持久化的方法的加载数据流示意图。
图3为本发明的基于云计算实现缓存的加载或持久化的***及方法的自动调度加载或持久化处理流程图。
图4为本发明的基于云计算实现缓存的加载或持久化的***及方法的节点自荐流程图。
图5为本发明的基于云计算实现缓存的加载或持久化的***及方法的的加载或持久化数据流程图。
具体实施方式
为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。
一种基于云计算实现缓存的加载或持久化的***,包括调度模块、缓存模块、数据源模块和事件模块,所述的调度模块分别与所述的缓存模块、数据源模块和事件模块相连接。
较佳地,所述的调度模块包括:
分布式选举单元,用于对每个缓存的数据集选举一个leader,由该leader执行将缓存的数据项从数据源加载到缓存中,并且由该leader将缓存中的数据持久化到数据源中;
任务工作池单元,该任务工作池单元为一用于管理加载和持久化执行的线程,并支持弹性调整执行线程数量,在忙时增加处理线程,在闲时释放处理线程。
在一种较佳的实施方式中,所述的缓存模块包括:
缓存接口单元,定义该缓存的加载或持久化的***与在各缓存实现之间的交互接口,通过该缓存接口单元与具体的缓存实现进行解耦,从而支持多重缓存实现,如Redis,memcache等;
缓存适配单元,用于针对具体的缓存存储对缓存SPI的实现。
在一种较佳的实施方式中,所述的数据源模块包括:
数据定义单元,用于定义缓存的数据集来源,所述的数据来源包括配置文件、关系型数据库和外部***,并且定义数据的加载和持久化策略,所述的数据的加载和持久化策略包括定时加载和持久化策略和通知加载和持久化策略,其中,加载和持久化方法包括同步和异步两种;
数据源适配单元,用于从数据读取数据,并将数据写到数据源,该数据源适配单元可以根据需要扩展多个,分别针对不同的数据源。
在一种较佳的实施方式中,所述的事件模块包括:
事件中心单元,leader节点通过该事件中心单元接收非leader节点的状态变化通知s。
还包括一种通过上述***基于云计算实现缓存的加载或持久化的方法,所述的方法包括以下步骤:
(1)定义缓存提供者;
(2)定义缓存数据集以及加载或持久化策略;
(3)自动调度加载或持久化;
(4)发布数据变化事件。
在一种较佳的实施方式中,所述的步骤(1)包括以下步骤:
(1-1)根据缓存提供者配置文件模板新建缓存提供者配置文件,扩展名为:.chpx;
(1-2)在所述的缓存提供者配置文件中按照模板增加缓存实例定义;
(1-3)为所述的缓存实例定义配置id属性,所配置的id值必须全局唯一;
(1-4)为所述的缓存实例定义配置provider属性,provider属性的值是一种缓存SPI接口的实现,如redis缓存SPI实现;
(1-5)为所述的缓存实例定义配置私有属性,如果是本地缓存,则配置缓存大小;如果是远程缓存,则配置远程缓存的地址、端口、用户名和密码。
在一种较佳的实施方式中,所述的步骤(2)包括以下步骤:
(2-1)根据缓存数据集配置文件模板新建缓存数据集配置文件,扩展名为:.chsx;
(2-2)在所述的缓存数据集配置文件中按照模板增加缓存数据集的定义;
(2-3)为所述的缓存数据集定义配置命名空间属性和数据集名称属性,所述的命名空间属性和所述的数据集名称属性组合生成一个唯一的id,组合规则为:命名空间+“.”+数据集名称;
(2-4)为所述的缓存数据定义配置数据源类型,如果是数据源类型是文件型,则配置文件路径,如果是关系型数据库类型,则配置关系型数据库的服务器地址和端口;
(2-5)为所述的缓存数据定义配置加载或持久化策略。
在一种更佳的实施方式中,所述的步骤(2-5)包括以下步骤:
(2-5-1)为所述的缓存数据集定义配置场景类型:“加载”或“持久化”,如果是“加载”场景类型,则继续步骤(2-5-2),如果是“持久化”场景类型,则继续步骤(2-5-3);
(2-5-2)为所述的缓存数据集定义配置read实现类,其中read实现类从上述配置的数据源中读取数据,继续步骤(2-5-4);
(2-5-3)为所述的缓存数据集定义配置write实现类,其中write实现类从将缓存中变化的内容持久化到上述的数据源中;
(2-5-4)为所述的缓存数据集定义配置调度策略,可设置的值为固定频率刷新、懒加载和缓冲区大小阈值,如果设置的值为固定刷新频率,则继续设置刷新周期,如果设置的值为缓冲区大小,则继续设置缓冲区的阈值;
(2-5-5)为所述的缓存数据集定义配置动作模式,可设置的值为同步和异步。
在一种较佳的实施方式中,所述的步骤(3)包括以下步骤:
(3-1)加载缓存提供者配置文件;
(3-2)加载缓存数据集配置文件;
(3-3)针对每个缓存数据集选择一个leader节点来执行加载或持久化动作,在有更新时判断当前节点类型,如果是非leader节点,则继续步骤(3-4),如果是leader节点,则继续步骤(3-5);
(3-4)非leader节点当缓存,通过上述事件子***通知leader节点有变化的key,继续步骤(3-3);
(3-5)leader节点根据上述配置的加载或持久化策略来加载或持久化数据,继续步骤(3-3)。
在一种更佳的实施方式中,其特征在于,所述的步骤(3-1)包括以下步骤:
(3-1-1)扫描指定目录下所有以.chpx为扩展名的文件,调用解析器解析成缓存数据配置模型对象;
(3-1-2)将模型对象注册到缓存提供者manager中,在***停止时通过manager释放资源;
(3-1-3)如果模型对象指示的缓存提供者为远程缓存,则启动该模型,建立与远程缓存的连接。
在一种更佳的实施方式中,所述的步骤(3-2)包括以下步骤:
(3-2-1)扫描指定目录下的所有以.chsx为扩展名的文件,调用解析器解析成配置模型对象;
(3-2-2)将模型对象注册到缓存数据集manager中,在***停止时通过manager释放资源。
在一种更佳的实施方式中,所述的针对每个缓存数据集选择一个leader节点来执行加载或持久化动作,具体为:
(3-3-1)生成一个唯一的节点id,目前生成id的方式为uuid;
(3-3-2)构造用于保存选举状态的缓存key,key的生成规则为“_learder_key_”+缓存数据集id,即“_leader_key_”+缓存数据集命名空间+“.”+缓存数据集名称;
(3-3-3)将用于检查状态值的计数器初始化为零;
(3-3-4)将暂存的上次选举状态值初始化为空;
(3-3-5)通过缓存SPI单元的get接口获取当前的选举状态值,并判断当前的选举状态值,如果是当前的选举状态值null,则继续步骤(3-3-6),如果当前的选举状态值不等于暂存的上次选举状态值,则继续步骤(3-3-7),如果是leader节点,则继续步骤(3-3-8),否则,继续步骤(3-3-9);
(3-3-6)自荐成为leader,继续步骤(3-4);
(3-3-7)检查状态值的计数器清零,将暂存选举状态值设置为所述的当前选举状态值,并在等待1秒后继续步骤(3-3-5);
(3-3-8)根据上述获取到的选举状态值确定是否自身是leader节点,生成新的选举状态值,并通过缓存模块的SPI接口replace更新缓存,继续步骤(3-4);
(3-3-9)将检查状态值计算器的值+1,并判断是否计算器值达到上限,如果是,则自荐成为leader。
在一种更进一步的实施方式中,所述的自荐成为leader,具体为:
(3-3-6-1)生成新的选举状态值,生成规则为:上述生成的唯一节点id+“.”+最新时间戳;
(3-3-6-2)通过缓存模块的replace接口尝试将选举状态值设置为所述的新的选举状态值,如果是设置成功,则自荐成功,否则自荐失败,其中replace接口原子的检查旧状态值没有变化才会更新为新状态值;
(3-3-6-3)将暂存的上次选举状态值更新为所述的新的选举状态值。
在一种更进一步的实施方式中,所述的根据上述获取到的选举状态值确定是否自身是leader节点,具体为:
(3-3-8-1)从上述获取到的选举状态中获取leader的节点id,获取方式为取选举状态值中的开始到“.”的部分;
(3-3-8-2)比较上述获取到的leader节点id和自身的节点id,如果相等则自身是leader节点,否则不是。
在一种较佳的实施方式中,所述的步骤(4)包括以下步骤:
(4-1)获取leader节点的事件发送地址;
(4-2)通过restful接口地址发送变化调目的key,不需要发送当前的值,对于多个key的连续更新可以合并事件。
在一个具体的实施例中,如图1、图2所示,该基于云计算实现缓存的加载或持久化的***包括调度子***、缓存子***、数据源子***、事件子***,其中调度子***包括:
分布式选举模块,负责对每个缓存的数据集选举一个leader,由该leader执行将缓存的数据项从数据源加载到缓存中,并且由该leader将缓存中的数据持久化到数据源中。
任务工作池模块,管理加载和持久化执行的线程,该任务池支持弹性调整执行线程数量,在忙时增加处理线程,在闲时释放处理线程。
所述的缓存子***包括:
缓存接口单元,定义该缓存的加载或持久化的***与在各缓存实现之间的交互接口,通过该缓存接口单元与具体的缓存实现进行解耦,从而支持多重缓存实现,如Redis,memcache等;
缓存适配模块,针对具体的缓存存储对缓存SPI的实现,比如redis的适配模块。
所述的数据源子***包括:
数据定义模块,定义缓存的数据集来源,包括从配置文件、从关系型数据库、从外部***等;并且定义数据的加载和持久化策略,包括定时加载和持久化策略、通知加载和持久化策略。加载和持久化方法包括同步和异步两种。
数据源适配模块,具体实现从数据读取数据的方法和将数据写到数据源的方法。该适配器模块可以根据需要扩展多个,分别针对不同的数据源。
所述的事件子***包括:
事件中心单元,leader节点通过该事件中心单元接收非leader节点的状态变化通知s。
在另一个实施例中,如图3、图4和图5所示,还包括一种基于上述的缓存加载或持久化的方法,其主要特点是,所述的方法包括定义缓存提供者操作、定义缓存数据集以及加载或持久化策略操作、自动调度加载或持久化操作。
所述的定义缓存提供者操作,包括以下步骤:
(11)根据缓存提供者配置文件模板新建缓存提供者配置文件,扩展名为.chpx;
(12)在上述新建的缓存提供者配置文件中按照模板增加缓存实例的定义;
(13)为上述新增的缓存实例定义配置id属性,所配置的id值必须全局唯一;
(14)为上述新增的缓存实例定义配置provider属性,provider属性的值是一种缓存SPI接口的实现,如redis缓存SPI实现;
(15)为上述新增的缓存实例配置私有属性,如果是本地缓存,配置缓存大小;如果是远程缓存,需要配置远程缓存的地址、端口、用户名、密码等属性。
所述的定义缓存数据集以及加载或持久化策略操作,包括以下步骤:
(21)根据缓存数据集配置文件模板新建缓存数据集配置文件,扩展名为.chsx;
(22)在上述新建的缓存数据集配置文件中按照模板增加缓存数据集的定义;
(23)为上述新增的缓存数据集定义配置命名空间属性和数据集名称属性,该命名空间属性和该数据集名称属性组合生成一个唯一的id,组合规则为:命名空间+“.”+数据集名称;
(24)为上述新增的缓存数据定义配置数据源类型,如果是数据源类型是文件型,需要配置文件路径;如果是关系型数据库类型,需要配置关系型数据库的服务器地址、端口等等。
(25)为上述新增的缓存数据定义配置加载或持久化策略。
所述的自动调度加载或持久化操作,包括以下步骤:
(31)加载缓存提供者配置文件;
(32)加载缓存数据集配置文件;
(33)针对每个缓存数据集选择一个leader节点来执行加载或持久化动作;
(34)非上述选举出来的leader节点当缓存有更新时,通过上述事件子***通知leader节点有变化的key;
(35)上述选举出来的leader节点根据上述配置的加载或持久化策略来加载或持久化数据;
(36)跳转到33,继续执行。
所述的发布数据变化事件操作,包括以下步骤:
(41)获取leader节点的事件发送地址;
(42)通过restful接口地址发送变化调目的key,不需要发送当前的值,对于多个key的连续更新可以合并事件。
该实现云计算环境下缓存的无感知加载或持久化的通用***及方法中的为上述新增的缓存数据定义配置加载或持久化策略操作,包括以下步骤:
(251)为所述的缓存数据集定义配置选择场景类型:“加载”或者“持久化”;
(252)如果上述选择为“加载”场景类型,为所述的缓存数据集定义配置设置read实现类,其中read实现类从上述配置的数据源中读取数据;
(253)如果上述选择为“持久化”场景类型,为所述的缓存数据集定义配置设置write实现类,其中write实现类从将缓存中变化的内容持久化到上述的数据源中;
(254)为所述的缓存数据集定义配置设置调度策略:可设置的值为固定频率刷新、懒加载、缓冲区大小阈值。如果设置的值为固定刷新频率需要设置刷新周期,如果设置为缓冲区大小需要设置缓冲区的阈值;
(255)为所述的缓存数据集定义配置设置动作模式,可设置的值为同步和异步。
该实现云计算环境下缓存的无感知加载或持久化的通用***及方法中的加载缓存提供者配置文件操作,包括以下步骤:
(311)扫描指定目录下的所有以.chpx为扩展名的文件,调用解析器解析成缓存数据配置模型对象;
(312)将模型对象注册到缓存提供者manager中,在***停止时可通过manager释放资源;
(313)如果模型对象指示的缓存提供者为远程缓存,则启动该模型,建立与远程缓存的连接。
该实现云计算环境下缓存的无感知加载或持久化的通用***及方法中的,加载缓存提供者配置文件操作,包括以下步骤:
(321)扫描指定目录下的所有以.chsx为扩展名的文件,调用解析器解析成配置模型对象;
(322)将模型对象注册到缓存数据集manager中,在***停止时可通过manager释放资源。
该实现云计算环境下缓存的无感知加载或持久化的通用***及方法中的,针对每个缓存数据集选择一个leader节点来执行加载或持久化动作操作,包括以下步骤:
(331)生成一个唯一的节点id,目前生成id的方式为uuid;
(332)构造用于保存选举状态的缓存key,key的生成规则为“_learder_key_”+缓存数据集id,实际上等于“_leader_key_”+缓存数据集命名空间+“.”+缓存数据集名称;
(333)初始化用于检查状态值的计数器为0;
(334)初始化暂存的上次选举状态值为空;
(335)通过上述缓存子***SPI的get接口获取当前的选举状态值;
(336)如果上述获取到的当前选举状态值为null,则自荐成为leader;
(337)否则如果上述获取到的当前选举状态值不等于暂存的上次选举状态值,那么检查状态值的计数器清0,将暂存选举状态值设置为上述获取到的当前选举状态值,并等待1秒后跳转到335重新执行;
(338)否则根据上述获取到的选举状态值确定是否自身是leader节点,如果是leader节点生成新的选举状态值,并通过缓存子***的SPI接口replace更新缓存;
(339)否则将检查状态值计算器的值+1,并判断是否计算器值达到上限,如果达到上限则自荐成为leader。
该实现云计算环境下缓存的无感知加载或持久化的通用***及方法中的,针对每个缓存数据集选择一个leader节点来执行加载或持久化动作操作中的自荐成为leader操作,包括以下步骤:
(3361)生成新的选举状态值,生成规则为:上述生成的唯一节点id+“.”+最新时间戳;
(3362)通过上述缓存子***SPI的replace接口将选举状态值尝试设置为上述生成的选举状态值,如果是设置成功则自荐成功,否则自荐失败。其中replace接口原子的检查旧状态值没有变化才会更新为新状态值;
(3363)将暂存的上次选举状态值更新为上述新生成的选举状态值。
该实现云计算环境下缓存的无感知加载或持久化的通用***及方法中的针对每个缓存数据集选择一个leader节点来执行加载或持久化动作操作中的确定是否自身是leader节点操作,包括以下步骤:
(3381)从上述获取到的选举状态中获取leader的节点id,获取方式为取选举状态值中的开始到“.”的部分;
(3382)比较上述获取到的leader节点id和自身的节点id,如果相等则自身是leader节点,否则不是。
在实际使用当中,云计算环境下缓存的无感知加载或持久化的通用***及方法中缓存子***定义spi接口:
其中get(K key)根据key获取缓存的值;put(K key,V value)将key对应的值value写入到缓存中;putIfAbsent(K key,V value)与put作用相同,但是只有当缓存中不存在key时才会put成功;remove(K key)从缓存中移除key;remove(K key,V oldValue)与remove作用相同,但是只有当缓存中值的值与oldValue相等时remove才能成功;replace(Kkey,V oldValue,V newValue)将缓存中key的值设置为value,但是只有当缓存中有值且值为oldValue时才能设置成功。
云计算环境下缓存的无感知加载或持久化的通用***及方法中数据源子***定义spi接口
其中CacheLoader为数据源子***定义的加载SPI接口,CacheWriter为数据源子***定义的持久化SPI接口。
其中CacheLoader中的supportChangeList()操作用于获取数据源是否支持变更清单;readChangeList(long lastSeq)用于获取自上次lastSeq开始数据源变化的所有记录;read(K key)用于返回指定key对应的值value;readNextBatch(int batchIndx,intbatchSize)用于获取数据源中一个批次的数据;readAll()用于返回数据源该数据集的所有数据。
其中CacheWriter中的save(Cache.Entry<K,V>entry)操作用于保存一条数据到数据源中,如果数据源中已经包含该记录将执行update操作,如果该数据源中不包含该记录则执行insert操作;insert(CAche.Entry<K,V>entry)用于向数据源中增加一条新记录;update(Cache.Entry<K,V>entry)用于更新数据源中已有的一条记录;delete(K key)用于删除数据源中已有的一条记录;saveAll(List<Cache.Entry<K,V>>entrys)用于批量更新数据源中的记录。
该***提供的针对上述CacheLoader SPI的实现包括:ConfFileLoader、IniFileLoader、XmlFileLoader、RdbLoader;该***提供的针对上述CacheWriter SPI的实现包括ConfFileWriter、IniFileWriter、XmlFileWriter、RdbWriter。
采用了该发明中的基于云计算实现缓存的加载或持久化的***及方法,***架构简单,不依赖于某种缓存实现或者某种具体类型的数据源,在云计算环境下能自动选择服务节点加载和持久化缓存数据,适用于不同类型的数据源硬编码,具有广泛的应用范围。
在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。
Claims (16)
1.一种基于云计算实现缓存的加载或持久化的***,其特征在于,所述的***包括调度模块、缓存模块、数据源模块和事件模块,所述的调度模块分别与所述的缓存模块、数据源模块和事件模块相连接。
2.根据权利要求1所述的基于云计算实现缓存的加载或持久化的***,其特征在于,所述的调度模块包括:
分布式选举单元,用于对每个缓存的数据集选举一个leader,由该leader执行将缓存的数据项从数据源加载到缓存中,并且由该leader将缓存中的数据持久化到数据源中;
任务工作池单元,该任务工作池单元为一用于管理加载和持久化执行的线程,并支持弹性调整执行线程数量,在忙时增加处理线程,在闲时释放处理线程。
3.根据权利要求1所述的基于云计算实现缓存的加载或持久化的***,其特征在于,所述的缓存模块包括:
缓存接口单元,定义所述的***与各缓存实现之间的交互接口,且通过该缓存接口单元与具体的缓存实现进行解耦;
缓存适配单元,用于针对具体的缓存存储对缓存SPI的实现。
4.根据权利要求1所述的基于云计算实现缓存的加载或持久化的***,其特征在于,所述的数据源模块包括:
数据定义单元,用于定义缓存的数据集来源,所述的数据来源包括配置文件、关系型数据库和外部***,并且定义数据的加载和持久化策略,所述的数据的加载和持久化策略包括定时加载和持久化策略和通知加载和持久化策略,其中,加载和持久化方法包括同步和异步两种;
数据源适配单元,用于从数据读取数据,并将数据写到数据源,该数据源适配单元可以根据需要扩展多个,分别针对不同的数据源。
5.根据权利要求1所述的基于云计算实现缓存的加载或持久化的***,其特征在于,所述的事件模块包括:
事件中心单元,leader节点通过该事件中心单元接收非leader节点的状态变化通知。
6.一种通过权利要求1所述的***基于云计算实现缓存的加载或持久化的方法,其特征在于,所述的方法包括以下步骤:
(1)定义缓存提供者;
(2)定义缓存数据集以及加载或持久化策略;
(3)自动调度加载或持久化;
(4)发布数据变化事件。
7.根据权利要求6所述的基于云计算实现缓存的加载或持久化的方法,其特征在于,所述的步骤(1)包括以下步骤:
(1-1)根据缓存提供者配置文件模板新建缓存提供者配置文件,扩展名为:.chpx;
(1-2)在所述的缓存提供者配置文件中按照模板增加缓存实例定义;
(1-3)为所述的缓存实例定义配置id属性,所配置的id值必须全局唯一;
(1-4)为所述的缓存实例定义配置provider属性,provider属性的值是一种缓存SPI接口的实现,如redis缓存SPI实现;
(1-5)为所述的缓存实例定义配置私有属性,如果是本地缓存,则配置缓存大小;如果是远程缓存,则配置远程缓存的地址、端口、用户名和密码。
8.根据权利要求6所述的基于云计算实现缓存的加载或持久化的方法,其特征在于,所述的步骤(2)包括以下步骤:
(2-1)根据缓存数据集配置文件模板新建缓存数据集配置文件,扩展名为:.chsx;
(2-2)在所述的缓存数据集配置文件中按照模板增加缓存数据集的定义;
(2-3)为所述的缓存数据集定义配置命名空间属性和数据集名称属性,所述的命名空间属性和所述的数据集名称属性组合生成一个唯一的id,组合规则为:命名空间+“.”+数据集名称;
(2-4)为所述的缓存数据定义配置数据源类型,如果是数据源类型是文件型,则配置文件路径,如果是关系型数据库类型,则配置关系型数据库的服务器地址和端口;
(2-5)为所述的缓存数据定义配置加载或持久化策略。
9.根据权利要求8所述的基于云计算实现缓存的加载或持久化的方法,其特征在于,所述的步骤(2-5)包括以下步骤:
(2-5-1)为所述的缓存数据集定义配置场景类型:“加载”或“持久化”,如果是“加载”场景类型,则继续步骤(2-5-2),如果是“持久化”场景类型,则继续步骤(2-5-3);
(2-5-2)为所述的缓存数据集定义配置read实现类,其中read实现类从上述配置的数据源中读取数据,继续步骤(2-5-4);
(2-5-3)为所述的缓存数据集定义配置write实现类,其中write实现类从将缓存中变化的内容持久化到上述的数据源中;
(2-5-4)为所述的缓存数据集定义配置调度策略,可设置的值为固定频率刷新、懒加载和缓冲区大小阈值,如果设置的值为固定刷新频率,则继续设置刷新周期,如果设置的值为缓冲区大小,则继续设置缓冲区的阈值;
(2-5-5)为所述的缓存数据集定义配置动作模式,可设置的值为同步和异步。
10.根据权利要求6所述的基于云计算实现缓存的加载或持久化的方法,其特征在于,所述的步骤(3)包括以下步骤:
(3-1)加载缓存提供者配置文件;
(3-2)加载缓存数据集配置文件;
(3-3)针对每个缓存数据集选择一个leader节点来执行加载或持久化动作,在有更新时判断当前节点类型,如果是非leader节点,则继续步骤(3-4),如果是leader节点,则继续步骤(3-5);
(3-4)非leader节点当缓存,通过上述事件子***通知leader节点有变化的key,继续步骤(3-3);
(3-5)leader节点根据上述配置的加载或持久化策略来加载或持久化数据,继续步骤(3-3)。
11.根据权利要求10所述的基于云计算实现缓存的加载或持久化的方法,其特征在于,所述的步骤(3-1)包括以下步骤:
(3-1-1)扫描指定目录下所有以.chpx为扩展名的文件,调用解析器解析成缓存数据配置模型对象;
(3-1-2)将模型对象注册到缓存提供者manager中,在***停止时通过manager释放资源;
(3-1-3)如果模型对象指示的缓存提供者为远程缓存,则启动该模型,建立与远程缓存的连接。
12.根据权利要求10所述的基于云计算实现缓存的加载或持久化的方法,其特征在于,所述的步骤(3-2)包括以下步骤:
(3-2-1)扫描指定目录下的所有以.chsx为扩展名的文件,调用解析器解析成配置模型对象;
(3-2-2)将模型对象注册到缓存数据集manager中,在***停止时通过manager释放资源。
13.根据权利要求10所述的基于云计算实现缓存的加载或持久化的方法,其特征在于,所述的针对每个缓存数据集选择一个leader节点来执行加载或持久化动作,具体为:
(3-3-1)生成一个唯一的节点id,目前生成id的方式为uuid;
(3-3-2)构造用于保存选举状态的缓存key,key的生成规则为“_learder_key_”+缓存数据集id,即“_leader_key_”+缓存数据集命名空间+“.”+缓存数据集名称;
(3-3-3)将用于检查状态值的计数器初始化为零;
(3-3-4)将暂存的上次选举状态值初始化为空;
(3-3-5)通过缓存SPI单元的get接口获取当前的选举状态值,并判断当前的选举状态值,如果是当前的选举状态值null,则继续步骤(3-3-6),如果当前的选举状态值不等于暂存的上次选举状态值,则继续步骤(3-3-7),如果是leader节点,则继续步骤(3-3-8),否则,继续步骤(3-3-9);
(3-3-6)自荐成为leader,继续步骤(3-4);
(3-3-7)检查状态值的计数器清零,将暂存选举状态值设置为所述的当前选举状态值,并在等待1秒后继续步骤(3-3-5);
(3-3-8)根据上述获取到的选举状态值确定是否自身是leader节点,生成新的选举状态值,并通过缓存模块的SPI接口replace更新缓存,继续步骤(3-4);
(3-3-9)将检查状态值计算器的值+1,并判断是否计算器值达到上限,如果是,则自荐成为leader。
14.根据权利要求13所述的基于云计算实现缓存的加载或持久化的方法,其特征在于,所述的自荐成为leader,具体为:
(3-3-6-1)生成新的选举状态值,生成规则为:上述生成的唯一节点id+“.”+最新时间戳;
(3-3-6-2)通过缓存模块的replace接口尝试将选举状态值设置为所述的新的选举状态值,如果是设置成功,则自荐成功,否则自荐失败,其中replace接口原子的检查旧状态值没有变化才会更新为新状态值;
(3-3-6-3)将暂存的上次选举状态值更新为所述的新的选举状态值。
15.根据权利要求13所述的基于云计算实现缓存的加载或持久化的方法,其特征在于,所述的根据上述获取到的选举状态值确定是否自身是leader节点,具体为:
(3-3-8-1)从上述获取到的选举状态中获取leader的节点id,获取方式为取选举状态值中的开始到“.”的部分;
(3-3-8-2)比较上述获取到的leader节点id和自身的节点id,如果相等则自身是leader节点,否则不是。
16.根据权利要求6所述的基于云计算实现缓存的加载或持久化的方法,其特征在于,所述的步骤(4)包括以下步骤:
(4-1)获取leader节点的事件发送地址;
(4-2)通过restful接口地址发送变化调目的key,不需要发送当前的值,对于多个key的连续更新可以合并事件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610917273.1A CN106502589B (zh) | 2016-10-21 | 2016-10-21 | 基于云计算实现缓存的加载或持久化的***及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610917273.1A CN106502589B (zh) | 2016-10-21 | 2016-10-21 | 基于云计算实现缓存的加载或持久化的***及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106502589A true CN106502589A (zh) | 2017-03-15 |
CN106502589B CN106502589B (zh) | 2019-08-20 |
Family
ID=58318163
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610917273.1A Active CN106502589B (zh) | 2016-10-21 | 2016-10-21 | 基于云计算实现缓存的加载或持久化的***及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106502589B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107040422A (zh) * | 2017-04-25 | 2017-08-11 | 浙江工业大学 | 一种基于物化缓存的网络大数据可视化方法 |
CN108694066A (zh) * | 2018-05-09 | 2018-10-23 | 北京酷我科技有限公司 | 一种tableView延迟刷新的方法 |
CN111694864A (zh) * | 2020-05-15 | 2020-09-22 | 苏宁云计算有限公司 | 单一进程的流式数据计算执行调度任务并避免数据丢失的方法、***及计算机设备 |
CN111966719A (zh) * | 2020-10-21 | 2020-11-20 | 四川新网银行股份有限公司 | 一种分布式消费信贷***本地数据缓存实时刷新的方法 |
CN112364100A (zh) * | 2020-11-06 | 2021-02-12 | 聚好看科技股份有限公司 | 一种服务器及服务器缓存持久化的方法 |
CN113742381A (zh) * | 2021-08-30 | 2021-12-03 | 欧电云信息科技(江苏)有限公司 | 缓存获取方法、设备和计算机可读介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103617176A (zh) * | 2013-11-04 | 2014-03-05 | 广东电子工业研究院有限公司 | 一种实现多源异构数据资源自动同步的方法 |
CN105681404A (zh) * | 2016-01-04 | 2016-06-15 | 北京百度网讯科技有限公司 | 用于分布式缓存***的元数据节点管理方法和装置 |
-
2016
- 2016-10-21 CN CN201610917273.1A patent/CN106502589B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103617176A (zh) * | 2013-11-04 | 2014-03-05 | 广东电子工业研究院有限公司 | 一种实现多源异构数据资源自动同步的方法 |
CN105681404A (zh) * | 2016-01-04 | 2016-06-15 | 北京百度网讯科技有限公司 | 用于分布式缓存***的元数据节点管理方法和装置 |
Non-Patent Citations (2)
Title |
---|
彭渊编著: "《大规模分布式***架构与设计实战》", 28 February 2014, 机械工业出版社 * |
陈敏、张东、张引、亓开元编著: "《大数据浪潮——大数据整体解决方案及关键技术探索》", 31 October 2015, 华中科技大学出版社 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107040422A (zh) * | 2017-04-25 | 2017-08-11 | 浙江工业大学 | 一种基于物化缓存的网络大数据可视化方法 |
CN107040422B (zh) * | 2017-04-25 | 2020-05-05 | 浙江工业大学 | 一种基于物化缓存的网络大数据可视化方法 |
CN108694066A (zh) * | 2018-05-09 | 2018-10-23 | 北京酷我科技有限公司 | 一种tableView延迟刷新的方法 |
CN108694066B (zh) * | 2018-05-09 | 2021-04-27 | 北京酷我科技有限公司 | 一种tableView延迟刷新的方法 |
CN111694864A (zh) * | 2020-05-15 | 2020-09-22 | 苏宁云计算有限公司 | 单一进程的流式数据计算执行调度任务并避免数据丢失的方法、***及计算机设备 |
CN111966719A (zh) * | 2020-10-21 | 2020-11-20 | 四川新网银行股份有限公司 | 一种分布式消费信贷***本地数据缓存实时刷新的方法 |
CN112364100A (zh) * | 2020-11-06 | 2021-02-12 | 聚好看科技股份有限公司 | 一种服务器及服务器缓存持久化的方法 |
CN113742381A (zh) * | 2021-08-30 | 2021-12-03 | 欧电云信息科技(江苏)有限公司 | 缓存获取方法、设备和计算机可读介质 |
CN113742381B (zh) * | 2021-08-30 | 2023-07-25 | 欧电云信息科技(江苏)有限公司 | 缓存获取方法、设备和计算机可读介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106502589B (zh) | 2019-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106502589A (zh) | 基于云计算实现缓存的加载或持久化的***及方法 | |
CN108287756A (zh) | 一种处理任务的方法及装置 | |
CN114741207B (zh) | 一种基于多维度组合并行的gpu资源调度方法和*** | |
CN101146127B (zh) | 一种分布式***中客户端缓存更新的方法和装置 | |
TW201229795A (en) | Web service patterns for globally distributed service fabric | |
US20030135615A1 (en) | Method for rebalancing resources within a global resource namespace | |
CN105227683B (zh) | 一种ldap集群数据同步方法及*** | |
CN111861412A (zh) | 面向完成时间优化的科学工作流调度方法及*** | |
US20120222037A1 (en) | Dynamic reprovisioning of resources to software offerings | |
US20140026151A1 (en) | Determining the processing order of a plurality of events | |
CN103700010A (zh) | 一种商品轨迹***及相关方法 | |
CN109067903B (zh) | 一种云平台级联*** | |
CN105874433A (zh) | 用于支持分布式数据网格中的异步调用的***和方法 | |
CN105007311A (zh) | 一种基于云平台和云计算的资源管理***和方法 | |
CN115934362B (zh) | 面向深度学习的服务器无感知计算集群调度方法及产品 | |
CN109597764A (zh) | 一种目录配额的测试方法及相关装置 | |
CN109710679A (zh) | 数据抽取方法及装置 | |
CN115964176B (zh) | 云计算集群调度方法、电子设备和存储介质 | |
CN112463376A (zh) | 一种资源分配方法及装置 | |
CN116233070A (zh) | 一种集群静态ip地址的分配***及分配方法 | |
CN107368355B (zh) | 虚拟机的动态调度方法和装置 | |
CN101390056A (zh) | 应用***智能优化器 | |
CN115904669A (zh) | 任务调度方法、***、电子设备及计算机可读存储介质 | |
CN109150593A (zh) | 云数据***中资源的管理方法和装置 | |
CN113254437B (zh) | 一种批处理作业处理方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |