CN107346307B - 分布式缓存系统及方法 - Google Patents
分布式缓存系统及方法 Download PDFInfo
- Publication number
- CN107346307B CN107346307B CN201610290288.XA CN201610290288A CN107346307B CN 107346307 B CN107346307 B CN 107346307B CN 201610290288 A CN201610290288 A CN 201610290288A CN 107346307 B CN107346307 B CN 107346307B
- Authority
- CN
- China
- Prior art keywords
- data
- cache
- node
- database
- application
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明是关于一种分布式缓存系统及方法,属于互联网数据缓存技术领域。该方法包括:接入节点,其用于应用服务器接入所述分布式缓存系统;缓存数据节点,其采用共享内存对应用方数据库中的相应数据建立热点缓存,将热点数据在不同的缓存数据节点上进行分片存储;其中,所述接入节点通过预设算法将所述应用服务器的不同请求路由到相应的所述缓存数据节点。本发明利用linux共享内存对热点数据进行缓存,能够减少数据库的压力,提供高并发低延迟的数据访问服务。
Description
技术领域
本发明涉及互联网数据缓存技术,尤其涉及一种分布式缓存系统及方法。
背景技术
随着互联网业务的高速发展,越来越多的存储服务器面临着海量存储、高并发访问、低延迟等挑战。而目前多数的业务系统,仍然使用着传统的关系型数据库存储数据,如MySQL,Oracle等。当系统面临高并发数据访问的时候,会导致访问的延迟增大,吞吐下降,严重时会导致数据库宕机,无法满足业务方需求。
同时由于关系型数据库的水平扩展能力较差,当数据量出现爆炸性增长的时候,也较难满足业务需求。
目前,针对海量数据存储访问的解决方案主要有三种,分别描述如下。
如图1所示,为关系型数据库分片存储解决方案。其中,AppServer为应用服务器,DBProxy为访问关系型数据库的代理,提供分片存储后数据库的路由功能,DB1,DB2至DBN为分片存储的关系型数据库。这种方案通过分库分表将数据在不同的机器上分片存储,充分利用多台机器的计算和存储能力,在一定程度上缓解了海量存储和大并发访问的压力。
但是,由于关系型数据库存储并不区分数据的冷热属性,并且数据的各种操作本质上还是磁盘操作,当面临大吞吐的请求时,响应时间比较长,难以满足互联网业务的要求。同时,应用服务器需要自己或借助第三方中间件进行不同分片数据的路由访问,造成了使用上的不便。
如图2所示,为分库分表与Nosql(非关系型数据库)缓存相结合的解决方案。这种是对关系型数据库通过分库分表进行分片存储,同时对热点数据使用Nosql缓存(例如,redis、memcached键值对类型的Nosql缓存等)。
第二种方案通过对关系型数据库分片存储,解决了海量数据存储的问题,同时通过将热点数据进行缓存,利用缓存的高吞吐和低延迟一定程度上解决了海量并发访问的问题。
但是,这种方案需要应用服务器来区分数据的冷热属性,由应用服务器来进行冷热数据的换入和换出,造成了使用上的不便。同时更新操作的时候需要同时修改缓存和DB,难以保证数据的一致性和数据操作的原子性,限制了该方案的使用范围。
第三种方案是全面使用Nosql存储数据,由于Nosql都是内存存储加上良好的扩展性,一定程度上解决了海量数据存储和并发访问的问题。
但是,现在多数的Nosql都存在持久化方面的问题。例如,memcached是纯内存存储,不提供持久化方案,一旦存储服务重启,数据将会丢失;redis虽然提供了两种持久化方案,但不论使用哪种持久化方案,在服务重启的时候都会长时间阻塞在加载持久化数据上,从而无法响应应用服务器的请求。
其次,Nosql存储的是非结构化类型的数据,而互联网业务中多数是结构化的数据,应用服务器使用Nosql数据的时候需要进行非结构化数据和结构化数据间的映射转换,造成了使用上的不便。
另外,由于老系统多数采用关系型数据库存储数据,将存储方式全面升级为Nosql会带来大量的开发成本,甚至部分业务的特点无法升级为Nosql存储。Nosql的这些不足,限制了该方案的使用范围。
综上所述,随着互联网业务的迅速发展,通过传统的关系型数据库存储数据难以满足海量存储、高吞吐访问、水平扩展等挑战。对关系型数据库进行分片存储、Nosql缓存等技术方案,虽然在一定程度上缓解或者部分解决了这些问题,但存在了一些明显的局限性。
因此,需要一种新的分布式缓存系统及方法。
在所述背景技术部分公开的上述信息仅用于加强对本发明的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本发明提供一种分布式缓存系统及方法,使用linux共享内存对热点数据进行缓存,提高数据访问的效率,提供低延迟高吞吐的请求质量,提高用户体验。
本发明的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本发明的实践而习得。
根据本发明的一方面,提供一种分布式缓存系统,包括:接入节点,其用于应用服务器接入所述分布式缓存系统;缓存数据节点,其采用共享内存对应用方数据库中的相应数据建立热点缓存,将热点数据在不同的缓存数据节点上进行分片存储;其中,所述接入节点通过预设算法将所述应用服务器的不同请求路由到相应的所述缓存数据节点。
根据本发明的一实施方式,其中所述共享内存为linux共享内存。
根据本发明的一实施方式,其中所述缓存数据节点包括一个主数据节点和至少一个备数据节点,所述主数据节点和所述备数据节点之间通过同步程序进行数据同步。
根据本发明的再一个方面,提供一种应用于上述的分布式缓存系统的分布式缓存方法,包括:接收所述应用服务器发起的请求,获取所有接入节点;将所述请求发送到相应的接入节点,所述接入节点通过预设算法将所述应用服务器的不同请求路由到相应的所述缓存数据节点;所述缓存数据节点采用共享内存对应用方数据库中的相应数据建立热点缓存,将热点数据在不同的缓存数据节点上进行分片存储。
根据本发明的一实施方式,其中所述预设算法为一致性哈希算法,其包括:根据所述应用方服务器发起请求中的key值作一致性哈希运算;根据运算结果将不同请求发送到相应的缓存数据节点。
根据本发明的一实施方式,其中所述一致性哈希运算通过不同请求中携带的应用方数据库中的特定索引字段内容作为操作的key值计算哈希值,根据所述哈希值将不同请求发送到相应的缓存数据节点。
根据本发明的一实施方式,其中所述请求包括更新数据和/或查找数据请求,所述特定索引字段内容为从所述应用服务器使用的设备信息表选取的设备唯一标识所述应用方数据库中所有索引中能够唯一标识一条数据记录的索引,以该特定索引字段内容作为操作的key值,用作更新数据和/或查找数据的条件。
根据本发明的一实施方式,其中更新数据的操作包括:接入节点将所述应用服务器发起的更新数据请求路由到相应的缓存数据节点;缓存数据节点将所述更新数据请求路由到对应的应用方数据库,修改所述应用方数据库中的该数据的相应记录;判断所述记录是否存储在相应的缓存数据节点;如果所述记录存储在相应的缓存数据节点,则修改所述缓存数据节点中的相应的热点数据;返回响应给相应的接入节点。
根据本发明的一实施方式,其中查找数据的操作包括:接入节点将所述应用服务器发起的查找数据请求路由到相应的缓存数据节点;判断该数据是否记录在所述缓存数据节点;如果该数据没有记录在所述缓存数据节点,将所述查找数据请求路由到对应的应用方数据库,从所述应用方数据库获取该数据,并在对应的缓存数据节点建立该数据的缓存作为热点数据;从所述缓存数据节点提取相应的热点数据返回给所述接入节点。
根据本发明的一实施方式,还包括:如果该数据记录在所述缓存数据节点,则从所述缓存数据节点提取相应的热点数据返回给所述接入节点。
根据本发明的一实施方式,其中所述共享内存为linux共享内存,其包括:所述缓存数据节点服务第一次启动时,预先从linux系统申请创建并打开一块固定大小的共享内存;缓存热点数据时,根据热点数据的大小从所述共享内存中申请对应大小的空间存储该热点数据。
根据本发明的一实施方式,还包括:所述缓存数据节点服务重启时,调用linux系统共享内存操作的API直接打开所述共享内存,加载缓存的热点数据。
根据本发明的一实施方式,其中使用ptmalloc算法对所述linux共享内存的申请、分配、释放进行管理。
根据本发明的一实施方式,其中所述热点数据从所述应用方数据库获取后,在所述分布式缓存系统的存储按照所述应用方数据库中的格式存储。
根据本发明的一实施方式,其中所述应用方数据库为关系型数据库,其通过分库分表技术将数据在不同的机器上分片存储,并按照行记录的形式存储数据。
根据本发明的一实施方式,还包括:提供分片存储后的应用方数据库的自动路由访问机制。
根据本发明的一实施方式,其中所述提供分片存储后的应用方数据库的自动路由访问机制包括:根据请求中携带的所述应用方数据库中特定索引字段内容计算哈希值;根据所述哈希值和分库分表数目进行取模操作得到的值作为库名表名后缀,确定访问应用方数据库的路由。
根据本发明的一实施方式,其中所述缓存数据节点使用LRU算法自动淘汰缓存的热点数据中的非热点数据。
本发明公开的分布式缓存系统及方法,使用linux共享内存对热点数据进行缓存,提高数据访问的效率,提供低延迟高吞吐的请求质量。同时,存储服务重启时数据不丢失,不会长时间阻塞在加载缓存数据上,提高了用户体验。
此外,在一些实施例中,通过LRU算法对缓存中数据的冷热程度进行管理,自动进行冷热数据的换入和换出。在另一些实施例中,缓存数据采样结构化的存储方式,现有采样关系型数据库的业务可以平滑接入,节省开发成本。另一些实施例中,保证了数据的一致性和数据操作的原子性。另一些实施例中,提供对分片存储后的数据的自动路由访问机制,节省开发成本。另一些实施例中,使用一致性哈希算法对缓存数据进行分片存储,提供数据的水平扩展能力。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1示意性示出的关系型数据库分片存储的示意图;
图2示意性示出分库分表与Nosql缓存相结合存储的示意图;
图3示意性示出根据本发明示例实施方式的分布式缓存系统的架构图;
图4示意性示出根据本发明示例实施方式的分布式缓存方法的流程图;
图5示意性示出根据本发明示例实施方式的分布式缓存方法的数据更新操作的流程图;
图6示意性示出根据本发明示例实施方式的分布式缓存方法的数据查找操作的流程图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本发明将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。附图仅为本发明的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本发明的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、系统、步骤等。在其它情况下,不详细示出或描述公知结构、方法、系统、实现、材料或者操作以避免喧宾夺主而使得本发明的各方面变得模糊。
附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器系统和/或微控制器系统中实现这些功能实体。
以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的系统和方法的例子。
图3示意性示出根据本发明示例实施方式的分布式缓存系统的架构图。
如图3所示,该系统包括:接入节点320,其用于应用服务器310接入所述分布式缓存系统;缓存数据节点330,其采用共享内存对应用方数据库340中的相应数据建立热点缓存,将热点数据在不同的缓存数据节点上进行分片存储;其中,所述接入节点320通过预设算法将所述应用服务器310的不同请求路由到相应的所述缓存数据节点330。
在示例性实施例,其中所述共享内存为linux共享内存。
Linux是一种支持多用户、多任务、多线程和多CPU的操作系统,其中所述linux共享内存(shared memory)linux下的一种进程通信方式。
所述缓存数据节点330服务第一次启动时,预先从linux系统申请创建并打开一块固定大小的共享内存,之后服务重启的时候,只需要调用linux系统共享内存操作的API(Application Programming Interface,应用程序编程接口)就可以直接打开该共享内存,从而可以实现缓存数据的快速加载;缓存热点数据时,根据本次缓存的热点数据的大小从这块共享内存中申请对应大小的空间存储该数据。
例如,通过linux系统API中的shmget函数申请一块固定大小的共享内存,然后调用shmat函数打开该共享内存。缓存数据时,首先计算本次要缓存的热点数据的大小,然后根据数据的大小从共享内存中申请一块满足该大小的内存存放该数据。
在示例性实施例,其中所述缓存数据节点330包括一个主数据节点331和至少一个备数据节点332,所述主数据节点331和所述备数据节点332之间通过同步程序进行数据同步。
所述缓存数据节点330主要用来存放热点数据,一般包括一个主数据节点331和若干个备数据节点332,设计为主、备数据节点的结构形式主要是为了数据容灾方面的考虑,一旦主数据节点331所在机器出现故障,可以切换到备数据节点332上,继续提供数据访问服务。备数据节点332的部署数目和方式可以根据应用服务器310的需求灵活设置。
一个缓存数据节点330主要完成如下几个功能:节点创建时linux共享内存的创建与挂载,节点对应服务重启时共享内存的快速挂载,避免服务重启时长时间阻塞在加载缓存数据上;使用ptmalloc算法(一种内存管理算法)对linux共享内存的申请、分配、释放的管理;根据数据库的表结构规划内存存储,结构化存储数据;缓存热点数据,使用LRU(LeastRecently Used,最近最少使用算法)算法自动淘汰非热点数据;提供分片存储后的应用方数据库的自动路由访问机制,该路由机制是通过某个特定字段内容做哈希运算实现的;保证缓存数据和应用方数据库数据的一致性,提供数据操作的原子性;提供数据备份、迁移、扩展等基本运维操作。
在示例性实施例,所述系统还包括配置中心350。
配置中心350主要完成如下功能:提供给应用服务器310访问该系统的所有接入节点320信息;管理接入节点320,实现接入节点320的动态增加、删除、故障摘除和恢复。
在示例性实施例,所述系统还包括监控运维节点360。
所述监控运维节点360的实现包括一个网站管理平台和一个操作运维服务器,具体完成功能如下:网站管理平台主要完成系统的部署、配置、监控数据的接收展示、系统告警、缓存使用情况分析,同时根据监控分析的结果向所述操作运维服务器下发操作运维指令;所述操作运维服务器主要接收所述网站管理平台下发的操作运维命令,协调接入节点320、缓存数据节点330、配置中心350完成相应的运维操作。这些运维操作包括缓存数据节点330中主、备数据节点331和332之间的切换、缓存数据节点330的扩容、接入节点320路由信息更新、接入节点320扩容、配置中心350中接入节点320的动态增删等。
所述接入节点320作为所述应用服务器310接入的接入点,主要完成如下功能:通过一致性哈希算法将应用服务器310的请求根据某个特定字段内容路由到不同的缓存数据节点330;当缓存数据节点330进行扩容时,将新的节点加入到路由中;向监控运维节点360上报系统的请求数、命中率、响应耗时等数据,作为监控运维节点360发送操作运维指令的依据。
在示例性实施例,所述缓存数据节点330使用一致性哈希算法对缓存的热点数据(简称“缓存数据”)进行分片存储,即根据应用服务器310发起的请求(例如,数据更新请求,数据查找请求等)中携带的应用方数据库340中某个特定索引字段内容作一致性哈希运算,将不同请求发送到不同的缓存数据节点330上,由相应的缓存数据节点330对数据建立热点缓存,并将热点数据在不同的缓存数据节点330上进行分片存储。
在示例性实施例,所述热点数据从应用方数据库340获取后,在所述分布式缓存系统中存储时是按照该应用方数据库340中的格式存储的。
在示例性实施例,当该应用方数据库340为关系型数据库,是按照行记录的形式存储的,则相应的,在该缓存数据节点330中热点数据也是按照行记录的形式记录的。
例如,以应用服务器使用应用方数据库中的设备信息表为例来进行说明,其中该设备信息表包含设备唯一标识号、操作系统版本和品牌商三个字段。
假设该设备信息表一行热数据为:”ue89292”,“ios 9.3”,“apple”,在应用方数据库中数据的组织存储是按照行记录的形式存储的:(”ue89292”,“ios 9.3”,“apple”),相应的,在该分布式缓存系统中存储该行记录时,也是按照行记录的形式存储的。
需要说明的是,虽然本发明实施例在图3中示意性示出了3个AppServer(应用服务器)、3个接入节点和3个缓存数据节点,但本发明对其不作限定,可以根据系统设计的具体需求任意选择和组合。
图4示意性示出根据本发明示例实施方式的分布式缓存方法的流程图。
如图4所示,在步骤S410,接收所述应用服务器发起的请求,获取所有接入节点。
在步骤S420,将所述请求发送到相应的接入节点,所述接入节点通过预设算法将所述应用服务器的不同请求路由到相应的所述缓存数据节点。
在示例性实施例,其中所述预设算法为一致性哈希算法,其包括:根据所述应用方服务器发起请求中的key值作一致性哈希运算;根据运算结果将不同请求发送到相应的缓存数据节点。一致性哈希算法是一种分布式哈希实现算法,设计目的是为了解决因特网中的热点问题。
在示例性实施例,其中所述一致性哈希运算通过不同请求中携带的应用方数据库中的特定索引字段内容作为操作的key值计算哈希值,根据所述哈希值将不同请求发送到相应的缓存数据节点。由该缓存数据节点对数据建立热点缓存,将热点数据在不同的缓存数据节点上进行分片存储。
例如,对一个应用服务器使用的设备信息表,该设备信息表包含设备唯一标识号、操作系统版本、品牌商等字段。其中,可以根据所述设备唯一标识号建立索引,成为索引字段。该设备信息表使用所述分布式缓存系统接入时,选取所述设备唯一标识号作为操作的key值(例如,查找、更新数据的条件),这个key值就是所述的特定索引字段内容。
在示例性实施例,其中所述请求包括更新数据和/或查找数据请求,所述特定索引字段内容为从所述应用服务器使用的设备信息表选取的设备唯一标识所述应用方数据库中所有索引中能够唯一标识一条数据记录的索引,以该特定索引字段内容作为操作的key值,用作更新数据和/或查找数据的条件。
在示例性实施例,其中更新数据的操作包括:接入节点将所述应用服务器发起的更新数据请求路由到相应的缓存数据节点;缓存数据节点将所述更新数据请求路由到对应的应用方数据库,修改所述应用方数据库中的该数据的相应记录;判断所述记录是否存储在相应的缓存数据节点;如果所述记录存储在相应的缓存数据节点,则修改所述缓存数据节点中的相应的热点数据;返回响应给相应的接入节点。
在示例性实施例,其中查找数据的操作包括:接入节点将所述应用服务器发起的查找数据请求路由到相应的缓存数据节点;判断该数据是否记录在所述缓存数据节点;如果该数据没有记录在所述缓存数据节点,将所述查找数据请求路由到对应的应用方数据库,从所述应用方数据库获取该数据,并在对应的缓存数据节点建立该数据的缓存作为热点数据;从所述缓存数据节点提取相应的热点数据返回给所述接入节点。
在示例性实施例,还包括:如果该数据记录在所述缓存数据节点,则从所述缓存数据节点提取相应的热点数据返回给所述接入节点。
在步骤S430,所述缓存数据节点采用共享内存对应用方数据库中的相应数据建立热点缓存,将热点数据在不同的缓存数据节点上进行分片存储。
在示例性实施例,其中所述共享内存为linux共享内存,其包括:所述缓存数据节点服务第一次启动时,预先从linux系统申请创建并打开一块固定大小的共享内存;缓存热点数据时,根据热点数据的大小从所述共享内存中申请对应大小的空间存储该热点数据。
在示例性实施例,还包括:所述缓存数据节点服务重启时,调用linux系统共享内存操作的API直接打开所述共享内存,加载缓存的热点数据。
在示例性实施例,其中使用ptmalloc算法对所述linux共享内存的申请、分配、释放进行管理。
在示例性实施例,其中所述热点数据从所述应用方数据库获取后,在所述分布式缓存系统的存储按照所述应用方数据库中的格式存储。
在示例性实施例,其中所述应用方数据库为关系型数据库,其通过分库分表技术将数据在不同的机器上分片存储,并按照行记录的形式存储数据。
在示例性实施例,还包括:提供分片存储后的应用方数据库的自动路由访问机制。
在示例性实施例,其中所述提供分片存储后的应用方数据库的自动路由访问机制包括:根据请求中携带的所述应用方数据库中特定索引字段内容计算哈希值;根据所述哈希值和分库分表数目进行取模操作得到的值作为库名表名后缀,确定访问应用方数据库的路由。
在示例性实施例,其中所述缓存数据节点使用LRU算法自动淘汰缓存的热点数据中的非热点数据。LRU算法是一种根据历史访问记录进行淘汰数据的缓存淘汰算法。
例如,在所述缓存数据节点中,将所有的数据组织为一个双向链表,某个数据一旦有访问操作就会把该数据从该双向链表中的当前位置摘除并移到该双向链表的头部。随着业务的不断进行,一直被访问的数据会靠近该双向链表的头部,一直没有被访问的数据靠近该双向链表的尾部。从而从该双向链表头部开始遍历的数据就是热点数据,从尾部开始遍历的数据就是非热点数据。每次淘汰数据的时候从该双向链表的尾部进行淘汰,就做到了自动淘汰非热点数据。
本发明实施例中的其它内容参考上述实施例中的内容,在此不再赘述。
图5示意性示出根据本发明示例实施方式的分布式缓存方法的数据更新操作的流程图。
如图5所示,在步骤S510,应用服务器发起更新数据请求。
在步骤S520,获取所有接入节点。
在步骤S530,将该更新数据请求发送到相应的接入节点。
在步骤S540,该接入节点将该更新数据请求路由到相应的缓存数据节点。
例如,可以通过一致性哈希算法将应用服务器的更新数据请求路由到不同的缓存数据节点。
在步骤S550,该缓存数据节点将该更新数据请求路由到对应的应用方数据库,修改该应用方数据库中的该数据的相应记录。
在步骤S560,该记录是否在该缓存数据节点中?如果存在,则进入下一步;反之,跳转到步骤S580。
在步骤S570,修改该缓存数据节点中的相应数据。
在步骤S580,返回响应给相应的接入节点。
在步骤S590,返回该更新数据请求的响应给该应用服务器。
本发明实施例中的其它内容参考上述实施例中的内容,在此不再赘述。
图6示意性示出根据本发明示例实施方式的分布式缓存方法的数据查找操作的流程图。
如图6所示,在步骤S610,应用服务器发起查找数据请求。
在步骤S620,获取所有接入节点。
在步骤S630,将该查找数据请求发送到相应的接入节点。
在步骤S640,该接入节点将该查找数据请求路由到相应的缓存数据节点。
在步骤S650,判断该记录是否在该缓存数据节点中?如果没有,则进入下一步;反之,跳转到步骤S680。
在步骤S660,该缓存数据节点将该查找数据请求路由到对应的应用方数据库,从该应用方数据库中获取数据。
在步骤S670,在对应的缓存数据节点中建立该记录的缓存。
在步骤S680,提取结果返回给相应的接入节点。
在步骤S690,返回该查找数据请求的响应给该应用服务器。
通过类似图5和图6所述的实施例,可以保证缓存数据节点中的缓存数据和应用方数据库的一致性,提供数据操作的原子性。
本发明实施例中的其它内容参考上述实施例中的内容,在此不再赘述。
本发明实施例中其它内容参考上述发明实施例中的内容,在此不再赘述。
图4、5和6示出根据本发明示例实施方式的分布式缓存方法的流程图。该方法可例如利用如图3所示的分布式缓存系统实现,但本发明不限于此。需要注意的是,图4、5和6仅是根据本发明示例实施方式的方法所包括的处理的示意性说明,而不是限制目的。易于理解,图4、5和6所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块/进程/线程中同步或异步执行的。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本发明实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本发明实施方式的方法。
本发明公开的分布式缓存系统及方法,通过采用linux共享内存对热点数据进行缓存处理,提供了高并发低延迟的数据访问服务,减少应用方数据库的压力,避免数据库在高并发存储情况下宕机;利用linux共享内存作缓存,服务重启时可以快速加载数据,提高服务的可用性。另外,通过采用一致性哈希算法对热点数据进行分片存储、分库分表技术对关系型数据库中的全量数据进行分片存储的结合,解决了海量数据的水平扩展问题。此外,由于分片存储的缓存数据采样关系型数据库中数据的结构化的存储形式,从而使得使用传统关系型数据库的业务可以平滑接入,提高并发数据存储效率,节省研发成本。本发明的技术方案还可以自动实现冷热数据在缓存系统中的换入换出和数据库分片存储后的路由访问,保证了数据的一致性和数据操作的原子性。同时,本发明的技术方案还能够监控、分析业务使用缓存的请求,做到系统动态扩容,节省运维成本。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
以上具体地示出和描述了本发明的示例性实施方式。应可理解的是,本发明不限于这里描述的详细结构、设置方式或实现方法;相反,本发明意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。
Claims (18)
1.一种分布式缓存系统,其特征在于,包括:
接入节点,其用于应用服务器接入所述分布式缓存系统;
缓存数据节点,其采用共享内存对应用方数据库中的相应数据建立热点缓存,将热点数据在不同的缓存数据节点上进行分片存储;
其中,所述接入节点通过预设算法将所述应用服务器的不同请求路由到相应的所述缓存数据节点;
其中所述预设算法为一致性哈希算法,其包括:
根据所述应用服务器发起请求中的key值作一致性哈希运算;
根据运算结果将不同请求发送到相应的缓存数据节点;
其中所述一致性哈希运算通过不同请求中携带的应用方数据库中的特定索引字段内容作为操作的key值计算哈希值,根据所述哈希值将不同请求发送到相应的缓存数据节点。
2.根据权利要求1所述的系统,其特征在于,其中所述共享内存为linux共享内存。
3.根据权利要求1所述的系统,其特征在于,其中所述缓存数据节点包括一个主数据节点和至少一个备数据节点,所述主数据节点和所述备数据节点之间通过同步程序进行数据同步。
4.一种应用于权利要求1所述的分布式缓存系统的分布式缓存方法,其特征在于,包括:
接收所述应用服务器发起的请求,获取所有接入节点;
将所述请求发送到相应的接入节点,所述接入节点通过预设算法将所述应用服务器的不同请求路由到相应的所述缓存数据节点;
所述缓存数据节点采用共享内存对应用方数据库中的相应数据建立热点缓存,将热点数据在不同的缓存数据节点上进行分片存储;
其中所述预设算法为一致性哈希算法,其包括:
根据所述应用服务器发起请求中的key值作一致性哈希运算;
根据运算结果将不同请求发送到相应的缓存数据节点;
其中所述一致性哈希运算通过不同请求中携带的应用方数据库中的特定索引字段内容作为操作的key值计算哈希值,根据所述哈希值将不同请求发送到相应的缓存数据节点。
5.根据权利要求4所述的方法,其特征在于,其中所述请求包括更新数据和/或查找数据请求,特定索引字段内容为所述应用方数据库中所有索引中能够唯一标识一条数据记录的索引,以该特定索引字段内容作为操作的key值,用作更新数据和/或查找数据的条件。
6.根据权利要求5所述的方法,其特征在于,其中更新数据的操作包括:
接入节点将所述应用服务器发起的更新数据请求路由到相应的缓存数据节点;
缓存数据节点将所述更新数据请求路由到对应的应用方数据库,修改所述应用方数据库中的该数据的相应记录;
判断所述记录是否存储在相应的缓存数据节点;
如果所述记录存储在相应的缓存数据节点,则修改所述缓存数据节点中的相应的热点数据;
返回响应给相应的接入节点。
7.根据权利要求5所述的方法,其特征在于,其中查找数据的操作包括:
接入节点将所述应用服务器发起的查找数据请求路由到相应的缓存数据节点;
判断该数据是否记录在所述缓存数据节点;
如果该数据没有记录在所述缓存数据节点,将所述查找数据请求路由到对应的应用方数据库,从所述应用方数据库获取该数据,并在对应的缓存数据节点建立该数据的缓存作为热点数据;
从所述缓存数据节点提取相应的热点数据返回给所述接入节点。
8.根据权利要求7所述的方法,其特征在于,还包括:
如果该数据记录在所述缓存数据节点,则从所述缓存数据节点提取相应的热点数据返回给所述接入节点。
9.根据权利要求4所述的方法,其特征在于,其中所述共享内存为linux共享内存,其包括:
所述缓存数据节点服务第一次启动时,预先从linux系统申请创建并打开一块固定大小的共享内存;
缓存热点数据时,根据热点数据的大小从所述共享内存中申请对应大小的空间存储该热点数据。
10.根据权利要求9所述的方法,其特征在于,还包括:所述缓存数据节点服务重启时,调用linux系统共享内存操作的API直接打开所述共享内存,加载缓存的热点数据。
11.根据权利要求9所述的方法,其特征在于,其中使用ptmalloc算法对所述linux共享内存的申请、分配、释放进行管理。
12.根据权利要求4所述的方法,其特征在于,其中所述热点数据从所述应用方数据库获取后,在所述分布式缓存系统的存储按照所述应用方数据库中的格式存储。
13.根据权利要求12所述的方法,其特征在于,其中所述应用方数据库为关系型数据库,其通过分库分表技术将数据在不同的机器上分片存储,并按照行记录的形式存储数据。
14.根据权利要求13所述的方法,其特征在于,还包括:提供分片存储后的应用方数据库的自动路由访问机制。
15.根据权利要求14所述的方法,其特征在于,其中所述提供分片存储后的应用方数据库的自动路由访问机制包括:
根据请求中携带的所述应用方数据库中特定索引字段内容计算哈希值;
根据所述哈希值和分库分表数目进行取模操作得到的值作为库名表名后缀,确定访问应用方数据库的路由。
16.根据权利要求4所述的方法,其特征在于,其中所述缓存数据节点使用LRU算法自动淘汰缓存的热点数据中的非热点数据。
17.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求4-16中任一所述的方法。
18.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求4-16中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610290288.XA CN107346307B (zh) | 2016-05-04 | 2016-05-04 | 分布式缓存系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610290288.XA CN107346307B (zh) | 2016-05-04 | 2016-05-04 | 分布式缓存系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107346307A CN107346307A (zh) | 2017-11-14 |
CN107346307B true CN107346307B (zh) | 2021-02-26 |
Family
ID=60253896
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610290288.XA Active CN107346307B (zh) | 2016-05-04 | 2016-05-04 | 分布式缓存系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107346307B (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108183947A (zh) * | 2017-12-27 | 2018-06-19 | 深圳天源迪科信息技术股份有限公司 | 分布式缓存方法及系统 |
CN108282405B (zh) * | 2017-12-27 | 2020-09-18 | 好活(昆山)网络科技有限公司 | 应用程序接口缓存管理方法、应用服务器及存储介质 |
CN108200196B (zh) * | 2018-01-31 | 2020-12-04 | 杭州优工品科技有限公司 | 基于分布式架构的数据储存、查询方法及系统 |
CN108762822B (zh) * | 2018-03-23 | 2021-11-16 | 中国银联股份有限公司 | 一种数据加载方法及装置 |
CN108616581B (zh) * | 2018-04-11 | 2021-07-16 | 深圳纳实大数据技术有限公司 | 基于olap/oltp混合应用的数据存储系统及方法 |
EP3794802A4 (en) | 2018-06-06 | 2021-05-19 | Huawei Technologies Co., Ltd. | SYSTEM AND PROCEDURES FOR CONTROLLING ADMINISTRATIVE OPERATIONS AND SHARED STORAGE SPACE FOR A CLOUD COMPUTING CLOUD COMPUTING |
CN109101195A (zh) * | 2018-08-07 | 2018-12-28 | 郑州云海信息技术有限公司 | 一种memcached集群数据读写的方法、装置和可读存储介质 |
CN109343979A (zh) * | 2018-09-28 | 2019-02-15 | 珠海沙盒网络科技有限公司 | 一种配置管理方法及系统 |
CN111061680A (zh) * | 2018-10-15 | 2020-04-24 | 北京京东尚科信息技术有限公司 | 一种数据检索的方法和装置 |
CN109656958B (zh) * | 2018-12-18 | 2021-11-16 | 北京小米移动软件有限公司 | 数据查询方法以及系统 |
CN109992597A (zh) * | 2019-03-11 | 2019-07-09 | 福建天泉教育科技有限公司 | 一种热点数据的存储方法及终端 |
CN110263010B (zh) * | 2019-05-31 | 2023-05-02 | 广东睿江云计算股份有限公司 | 一种缓存文件自动更新方法及装置 |
CN110287252A (zh) * | 2019-06-27 | 2019-09-27 | 南方电网科学研究院有限责任公司 | 一种数据安全防护系统 |
CN110753099B (zh) * | 2019-10-12 | 2023-09-29 | 平安健康保险股份有限公司 | 分布式缓存系统以及缓存数据更新方法 |
CN112418747A (zh) * | 2019-12-19 | 2021-02-26 | 上海哔哩哔哩科技有限公司 | 电商热点商品库存扣减控制方法及系统 |
CN111427878B (zh) * | 2020-03-20 | 2024-02-27 | 深圳乐信软件技术有限公司 | 数据监控告警方法、装置、服务器和存储介质 |
CN112115167B (zh) * | 2020-08-21 | 2022-11-18 | 苏宁云计算有限公司 | 缓存系统热点数据访问方法、装置、设备和存储介质 |
CN112381346A (zh) * | 2020-10-13 | 2021-02-19 | 广州赛意信息科技股份有限公司 | 一种基于api网关的产品工艺配方参数下发校验方法及系统 |
CN112558869B (zh) * | 2020-12-11 | 2024-07-16 | 北京航天世景信息技术有限公司 | 基于大数据遥感影像缓存方法 |
CN113297211B (zh) * | 2021-03-03 | 2023-12-22 | 苏州合数科技有限公司 | 一种大数据高并发下人群画像存储及定向系统及方法 |
CN112699154B (zh) * | 2021-03-25 | 2021-06-18 | 上海洋漪信息技术有限公司 | 应对大流量数据的多级缓存方法 |
CN112988680B (zh) * | 2021-03-30 | 2022-09-27 | 联想凌拓科技有限公司 | 数据加速方法、缓存单元、电子设备及存储介质 |
CN113312520B (zh) * | 2021-06-11 | 2023-05-02 | 西安微电子技术研究所 | 一种基于HASH和LRU算法的Linux模块化的并行冗余协议系统及数据处理方法 |
CN113596094B (zh) * | 2021-06-29 | 2023-08-11 | 武汉思诚科技有限公司 | 一种基于云集群的负载均衡方法及装置 |
CN113407662B (zh) * | 2021-08-19 | 2021-12-14 | 深圳市明源云客电子商务有限公司 | 敏感词识别方法、系统及计算机可读存储介质 |
CN113779089A (zh) * | 2021-09-14 | 2021-12-10 | 杭州沃趣科技股份有限公司 | 一种保持数据库热点数据方法、装置、设备及介质 |
CN113918603B (zh) * | 2021-10-11 | 2024-07-02 | 平安国际智慧城市科技股份有限公司 | 散列缓存生成方法、装置、电子设备及存储介质 |
CN113779043A (zh) * | 2021-11-05 | 2021-12-10 | 北京泰策科技有限公司 | 一种数据分布式缓存自动加载与转换方法 |
CN114422434A (zh) * | 2021-12-08 | 2022-04-29 | 联动优势电子商务有限公司 | 一种热键存储方法及装置 |
CN115617770B (zh) * | 2022-11-17 | 2023-03-28 | 达芬骑动力科技(北京)有限公司 | 一种用于车辆状态信号数据存储的数据磁盘存储管理方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100505762C (zh) * | 2006-04-19 | 2009-06-24 | 华中科技大学 | 适用于对象网络存储的分布式多级缓存系统 |
US8990821B2 (en) * | 2009-09-29 | 2015-03-24 | International Business Machines Corporation | Task dispatching based on composite queue size and upper and lower compare values |
CN102117309B (zh) * | 2010-01-06 | 2013-04-17 | 卓望数码技术(深圳)有限公司 | 一种数据缓存系统和数据查询方法 |
CN103309818B (zh) * | 2012-03-09 | 2015-07-29 | 腾讯科技(深圳)有限公司 | 存储数据的方法及装置 |
CN104252457B (zh) * | 2013-06-25 | 2018-11-23 | 北京百度网讯科技有限公司 | 一种用于对数据集合进行管理的方法与设备 |
CN103929500A (zh) * | 2014-05-06 | 2014-07-16 | 刘跃 | 一种分布式存储系统的数据分片方法 |
CN104065568B (zh) * | 2014-07-07 | 2017-01-18 | 电子科技大学 | 一种Web服务器集群的路由方法 |
CN104361030A (zh) * | 2014-10-24 | 2015-02-18 | 西安未来国际信息股份有限公司 | 一种具有任务分发功能的分布式缓存架构及缓存方法 |
-
2016
- 2016-05-04 CN CN201610290288.XA patent/CN107346307B/zh active Active
Non-Patent Citations (2)
Title |
---|
"A load balanced directory for distributed shared memory objects";Gokarna Sharma 等;《Journal of Parallel and Distributed Computing》;20150223;第78卷;6-24 * |
"基于云计算的数据存储技术研究";孙知信 等;《南京邮电大学学报(自然科学版)》;13-19;20140826;第34卷(第04期);13-19 * |
Also Published As
Publication number | Publication date |
---|---|
CN107346307A (zh) | 2017-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107346307B (zh) | 分布式缓存系统及方法 | |
JP7263314B2 (ja) | 分散ストアによる高可用性データベース | |
CN108363641B (zh) | 一种主备机数据传递方法、控制节点以及数据库系统 | |
EP2830284B1 (en) | Caching method for distributed storage system, node and computer readable medium | |
CN103678523B (zh) | 分布式高速缓存cache数据访问方法和装置 | |
CN105635196B (zh) | 一种获取文件数据的方法、系统和应用服务器 | |
JP2008542887A (ja) | 仮想化ネットワークストレージシステム、ネットワークストレージ装置及びその仮想化方法 | |
CN107341114B (zh) | 一种目录管理的方法、节点控制器和系统 | |
CN104750757B (zh) | 一种基于HBase的数据存储方法和设备 | |
CN113051221B (zh) | 数据存储方法、装置、介质、设备及分布式文件系统 | |
US20240264773A1 (en) | Data Prefetching Method, Computing Node, and Storage System | |
CN110309156A (zh) | 数据库系统、数据库更新、扩容方法及设备 | |
CN108777718B (zh) | 一种业务系统通过客户端访问读多写少系统的方法和装置 | |
CN109165078B (zh) | 一种虚拟分布式服务器及其访问方法 | |
CN117539915B (zh) | 一种数据处理方法及相关装置 | |
CN111031126A (zh) | 集群缓存共享方法、系统、设备及存储介质 | |
CN111796772B (zh) | 缓存的管理方法、缓存节点及分布式存储系统 | |
CN112395453B (zh) | 一种自适应分布式遥感影像缓存及检索方法 | |
US11010410B1 (en) | Processing data groupings belonging to data grouping containers | |
US20200045085A1 (en) | Authentication method for anonymous account and server | |
CN116303267A (zh) | 数据访问方法、装置、设备以及存储介质 | |
CN114547108A (zh) | 数据处理方法、装置、设备及介质 | |
CN114764403A (zh) | 一种数据迁移方法、装置、设备及存储介质 | |
CN113672652A (zh) | 一种数据访问方法、装置、设备及存储介质 | |
US20240171827A1 (en) | Bullet-screen comment processing method and system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | 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 |