一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

memcache缓存系统、其同步方法及计算机可读存储介质与流程

2022-02-22 01:51:33 来源:中国专利 TAG:


1.本发明涉及memcache缓存技术领域,特别地涉及memcache缓存系统、同步方法及计算机可读存储介质。


背景技术:

2.memcache是一套分布式的高速缓存系统,目前被许多大型网站使用,缓存相关数据库数据用以提升网站的服务能力。对于数据库访问压力较大的服务,将数据缓存在内存中,可以大大的减少磁盘io读写,这对于服务的性能提升有显著效果。主从同步功能则是指系统由主节点与从节点构成,数据由主节点同步到从节点的功能,随着现在各种服务对于系统稳定性的追求,为了向客户提供数据的高可用服务,为服务提供主备功能变的越来越重要。
3.memcache的工作流程如下:先检查客户端的请求数据是否存在于缓存区域中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcache中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcache中;每次更新数据库的同时更新memcache中的数据,保证一致性;当分配给memcache内存空间用完之后,会使用lru(最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。


技术实现要素:

4.在现有技术的memcache缓存系统中,所有数据都存储于内存中,没有提供实时备份功能。当服务故障、设备宕机、网络不通等情况发生时,缓存中存储的数据会无法被查询甚至永久性丢失,这可能造成很严重的后果。
5.由于不同的数据库具有非常明显的差异性,因此针对mysql的主从同步方法、redis的主从同步方法等并不能应用于memcache服务。目前业界针对memcache的主从同步方法包括基于代理的主从同步方案,这种方案是使用一个代理层代理主从节点,用户直接链接代理服务,代理服务会将用户的命令分别转发到主从服务器上,以实现数据的备份,例如magent实现memcache主从就是使用这一方案。但是该方法由于多了一层代理,服务性能也会下降,这与缓存服务器高性能的核心需求相矛盾。
6.本发明是鉴于以上的问题而完成的,其目的之一在于提供了一种memcache缓存系统、其同步方法及计算机可读存储介质,为memcache缓存系统提供数据备份功能,保障数据的安全性、完整性,提供高可用的服务。
7.在下文中给出了关于本发明的简要概述,以便提供关于本发明的一些方面的基本理解。但是,应当理解,这个概述并不是关于本发明的穷举性概述。它并不是意图用来确定本发明的关键性部分或重要部分,也不是意图用来限定本发明的范围。其目的仅仅是以简化的形式给出关于本发明的某些概念,以此作为稍后给出的更详细描述的前序。
8.根据本发明的一个方面,提供了一种memcache缓存系统,包括第一主机和第二主
机,其中,第一主机包括:第一memcache模块,响应于来自客户端的请求对所述客户端请求的数据进行缓存;以及第一管理模块,监测所述第一memcache模块,向第二管理模块通知所述第一memcache模块的工作状况,第二主机包括:第二memcache模块,更新缓存数据以与由所述第一memcache模块所缓存的数据同步;以及第二管理模块,响应于来自所述第一管理模块的通知,在判定为所述第一memcache模块发生了故障的情况下使所述第二memcache模块响应于来自所述客户端的请求对所述客户端请求的数据进行缓存。
9.根据本发明的另一方面,提供了一种memcache缓存系统的同步方法,该memcache缓存系统包括第一主机和第二主机,所述第一主机包括第一memcache模块以及第一管理模块,所述第二主机包括第二memcache模块以及第二管理模块,所述主从同步方法包括以下步骤:所述第一memcache模块响应于客户端的请求对数据进行缓存;所述第二memcache模块更新缓存数据以与由所述第一memcache模块所缓存的数据同步;所述第一管理模块监测所述第一memcache模块,向第二管理模块通知所述第一memcache模块的工作状况;以及所述第二管理模块响应于来自所述第一管理模块的通知,在判定为所述第一memcache模块发生了故障的情况下使所述第二memcache模块响应于来自所述客户端的请求对所述客户端请求的数据进行缓存。
10.根据本发明的另一方面,提供了一种计算机可读存储介质,包括可执行指令,当所述可执行指令由信息处理装置执行时,使所述信息处理装置执行根据本发明的memcache缓存系统的同步方法。
11.根据本发明的一个或多个实施例,能够提供数据备份功能,保障数据的安全性、完整性,提供高可用的服务。
附图说明
12.构成说明书的一部分的附图描述了本发明的实施例,并且连同说明书一起用于解释本发明的原理。
13.参照附图,根据下面的详细描述,可以更清楚地理解本发明,其中:
14.图1是示出了根据本发明一个实施例的memcache缓存系统的框图。
15.图2是示出了根据本发明一个实施例的memcache缓存系统的同步方法的流程图。
16.图3是示出了根据本发明另一实施例的memcache缓存系统的同步方法的流程图。
17.图4是示出了根据本发明又一实施例的memcache缓存系统的框图。
18.图5示出了根据本发明一个实施例中主节点的增量同步的流程图。
19.图6示出了根据本发明一个实施例的主节点和从节点全量同步时的流程图。
具体实施方式
20.现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
21.同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
22.以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明
及其应用或使用的任何限制。
23.对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
24.在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。
25.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
26.图1是示出了根据本发明一个实施例的memcache缓存系统的框图。
27.在图1中,本发明实施例的memcache缓存系统1经由网络与客户端300(包括300-1、300-2、300-n,n是自然数)以及数据库400可通信地连接。memcache缓存系统1响应于客户端的请求对数据进行缓存的过程如下。在例如由客户端300-1向memcache缓存系统1请求数据时,memcache缓存系统1响应于该请求检查客户端300-1的请求数据是否存在于缓存区域中。如果存在,则直接把请求数据返回给客户端300-1,不对数据库400进行任何操作;如果请求的数据不在缓存区域中,则查询数据库400,将从数据库400中获取的数据返回给客户端300-1,同时把数据缓存一份到缓存区域中。每次更新数据库400的同时更新缓存区域中的数据,保证一致性。当分配给缓存区域的内存空间用完之后,根据lru(最近最少使用)策略以及期失效策略,首先替换失效数据,然后替换掉最近未使用的数据。
28.memcache缓存系统1包括第一主机101和第二主机201。在一个实施例中第一主机101和第二主机102可以是服务器设备。第一主机101包括第一memcache模块110和第一管理模块120。第一memcache模块110响应于来自客户端300的请求对客户端300请求的数据进行缓存。第一管理模块120检测第一memcache模块110,向第二管理模块120通知第一memcache模块110的工作状况。第二主机201包括第二memcache模块210和第二管理模块220。第二memcache模块210更新缓存的数据以便与由第一memcache模块110缓存的数据同步。第二管理模块220响应于第一管理模块120的通知,在判定为第一memcache模块110发生了故障的情况下使第二memcache模块210响应于客户端300的请求对客户端300请求的数据进行缓存。
29.此外,在一个实施例中,第一管理模块120检测到第一memcache模块110发生故障(服务故障、设备宕机、网络不通等情况)时将表示第一memcache模块110发生了故障的信息通知发送到第二管理模块220,第二管理模块220响应于接收到该通知,判定为第一memcache模块110发生了故障,使第二memcache模块210响应于来自客户端300的请求对客户端300请求的数据进行缓存。在一个实施例中该通知包括故障代码和/或故障类型。另外,可替换地或可追加地,在另一个实施例中,第一管理模块120定期地向第二管理模块220发送心跳信号,在第二管理模块220经过了规定的时间未接收到来自第一管理模块120的心跳信号之后第二管理模块220判定第一memcache模块110发生了故障,由此使第二memcache模块210响应于来自客户端300的请求对客户端300请求的数据进行缓存。
30.在一个实施例中,第一管理模块120和第二管理模块220管理虚拟ip地址。memcache缓存系统1响应于客户端300的请求经由该虚拟ip地址将客户端300请求的数据发送到客户端300。第一管理模块120在检测到第一memcache模块110正常工作的情况下,将虚拟ip地址设置为第一主机101的ip地址ip1,当检测到第一memcache模块110发生故障时将
虚拟ip地址设置为第二主机201的ip地址。
31.在一个实施例中,memcache缓存系统1响应于客户端300的请求经由对外服务端口port1将数据发送给客户端300。此外,第一主机101和第二主机201经由主从同步端口port2将由第一memcache模块110所缓存的数据同步到第二memcache模块210。
32.在一个实施例中,当第一主机101在发生了故障后而从故障状态恢复到正常状态的情况下,首先将第二主机201缓存的数据以全量同步的方式同步到第一主机101,接着可以由第一管理模块110将虚拟ip地址设置为第一主机101的ip地址,也可以由第二管理模块220在检测到第一管理模块110的心跳信号后将虚拟ip地址设置为第一主机101的ip地址。此时,第一主机101的第一memcache模块110恢复响应于客户端的请求对客户端请求的数据进行缓存,第二主机201的第二memcache模块210更新的缓存数据以便与由第一memcache模块110缓存的数据进行同步。
33.图2是示出了根据本发明的一个实施例的memcache缓存系统的同步方法的流程图。
34.首先,在memcache缓存系统1中,第一主机101的第一memcache模块110响应于来自客户端300的请求对客户端300所请求的数据进行缓存(步骤s210)。
35.接着,在步骤s220中判断第一memcache模块110所缓存的数据是否有变更。在发生了变更的情况下(步骤220中的“是”),第二memcache模块210更新缓存数据以与由第一memcache模块110所缓存的数据同步(步骤s230),之后进入到步骤s240。在一个实施例中,第二memcache模块210仅将由第一memcache模块110所缓存的数据中的变更了的数据替换(同步)第二memcache模块210中相应的数据。在一个实施例中,第一主机101和第二主机201经由主从同步端口port2将由第一memcache模块110缓存的数据同步到第二memcache模块210。
36.在没有发生变更的情况下(步骤s220中的“否”),第二管理模块220判断第一memcache模块110是否发生故障(步骤s240),当第二管理模块220判断为第一memcache模块110发生了故障(步骤s240中的“是”)的情况下,第二管理模块220响应于来自第一管理模块120的通知,使第二memcache模块210响应于客户端300的请求对客户端300请求的数据进行缓存。此外,在一个实施例中,首先第一管理模块120在检测到第一memcache模块110发生故障(服务故障、设备宕机、网络不通等情况)时将表示第一memcache模块110发生了故障的信息通知发送到第二管理模块220,第二管理模块响应于接收到该通知,判定为第一memcache模块110发生了故障,使第二memcache模块210响应于来自客户端300的请求对客户端300请求的数据进行缓存。另外,可替换地或可追加地,在另一个实施例中,第一管理模块120定期地向第二管理模块220发送心跳信号,在第二管理模块220经过了规定的时间未接收到来自第一管理模块120的心跳信号之后第二管理模块220判定第一memcache模块110发生了故障,由此使第二memcache模块210响应于来自客户端300的请求对客户端300请求的数据进行缓存。
37.图3是示出了根据本发明另一实施例的memcache缓存系统的同步方法的流程图。
38.如图3所示,在另一个实施例中,当第一主机101发生了故障后而从故障状态恢复到正常状态的情况下(步骤s260中的“是”),由第一管理模块110将虚拟ip地址设置为第一主机101的ip地址,可替换地或者可追加地由第二管理模块220在检测到第一管理模块110
的心跳信号后将虚拟ip地址设置为第一主机101的ip地址。此后,第一主机101的第一memcache模块110恢复响应于客户端的请求对客户端请求的数据进行缓存,第二主机201的第二memcache模块210更新缓存数据以便与由第一memcache模块110所缓存的数据同步。由此,在第一主机101从故障状态重新接入memcache缓存系统1并作为主机(缓存部分)发挥作用,而第二主机201作为从机(备份部分)发挥作用。
39.图4是示出了根据本发明又一实施例的memcache缓存系统的框图。下面结合图4来更详细地描述memcache缓存系统的工作过程,其中,图4的主服务器1101对应于图1的第一主机101,从服务器1201对应于图1的第二主机201,主管理模块1120对应于图1的第一管理模块120,从管理模块1220对应于图1的第二管理模块220
40.在图4中,本发明实施例的memcache缓存系统10经由网络与客户端300(包括300-1、300-2、300-n,n是自然数)以及数据库400可通信地连接。
41.memcache缓存系统10包括主服务器1101和从服务器1201。主服务器1101包括主memcache模块1110和主管理模块1120。主memcache模块1110响应于来自客户端300的请求对客户端300请求的数据进行缓存。主管理模块1120监测主memcache模块1110,向第二管理模块通知主memcache模块1110的工作状况。从服务器1201包括从memcache模块1210和从管理模块1220。从memcache模块1210更新缓存数据以便与由主memcache模块1110所缓存的数据同步。从管理模块1220响应于主管理模块1120的通知,在判定为主memcache模块1110发生了故障的情况下使从memcache模块1210响应于客户端300的请求对客户端300请求数据进行缓存。
42.主服务器1101的ip地址设置为ip1,从服务器1201的ip地址设置为ip2。主管理模块1120和从管理模块1220能够通过硬件、软件、固件或者它们的组合来实现其各自的功能。在一个实施例中,主管理模块1120和从管理模块1220通过在硬件(例如处理器、控制器等)或固件上执行keepalived软件来实现,主管理模块1120和从管理模块1220共同管理memcache缓存系统10的虚拟ip地址,该虚拟ip地址设置为ip3。memcache缓存系统10对外服务端口为port1,主服务器1101和从服务器1201的主从同步端口为port2。主服务器1101和从服务器1201预先配置有memcache部署必需的工具,如:gcc、make、cmake、autoconf、libtool、libevent等,在工作时需要保证两台服务器(即主机)间网络通畅。
43.作为主节点的主服务器1101和作为从节点的从服务器1201包括运行主从版本的memcache的部件和运行keepalived的部件。主从版本的memcache是通过对当前memcache(例如1.5版本)增加了主从接口命令后得到的。
44.为了实现主节点和从节点之间的同步功能,为memcache新增启动参数用于指定从节点ip以及主从同步端口。其中,-e参数指定主从同步端口,新增-x参数指定从节点ip。
45.在memcache原有的命令基础上设计专门用于主从同步的命令。例如,针对用于变更与新增数据的命令,例如文本命令set、add、replace、prepend、append、cas、incr、decr、touch等以及二进制命令set(0x01)、add(0x02)、replace(0x03)、delete(0x04)、increment(0x05)、decrement(0x06)、flush(0x08)、append(0x0e)、prepend(0x0f)、setq(0x11)、addq(0x12)、replaceq(0x13)、deleteq(0x14)、incrementq(0x15)、decrementq(0x16)、appendq(0x19)、prependq(0x1a)、touch(0x1c)等,设计例如这样的主从同步命令:rep key flag exp_time data_bytes cas\r\ndata\r\n。针对文本命令delete以及二进制命令delete
(0x04)、deleteq(0x14)等用来删除数据的命令,设计例如这样的主从同步命令:delete key\r\n。针对文本命令flush_all与二进制命令flush(0x08)、flushq(0x18)等用来设置数据过期的命令,设计例如这样的主从同步命令:flush_all rel_time_t\r\n,其中rel_time_t为当前时间戳。
46.在使memcache缓冲系统运行时,首先,使主服务器1101启动主从版本memcache,启动命令为:
47.memcached-p port1-e port2-l ip1

x ip2-v-d-u root
48.其中,-p port1表示将tcp端口号设置为port1;-e port2表示将主从同步端口号设置为port2;-l ip1表示将ip1设置为本机ip地址;-xip2表示将ip2设置为从机ip地址;-v表示打印日志;-d表示以daemon方式运行;-u root表示绑定使用指定用于运行进程root。
49.同时使从服务器1201启动主从版本memcache,启动命令为:
50.memcached-p port1-e port2-l ip2

x ip1-v-d-u root
51.需要注意主服务器1101和从服务器1201启动时的-l和-x设置,这样可以使两台主机服务形成互为主从关系,使数据更加安全可靠。
52.接着,监测主服务器1101和从服务器1201的启动日志,确保主从memcache已启动,如有错误,日志提示详细错误信息。
53.接着,启动主服务器1101和从服务器1201中的主管理模块1120和从管理模块1220的keepalived功能,使其监视各自服务器上的memcache服务是否故障,若发现主服务器1101发生故障,则将作为虚拟ip的ip3迁移到从服务器1201;之后如果主服务器1101从故障状态恢复到正常工作状态,则将作为虚拟ip的ip3迁移到主服务器1201。由此能够实现针对用户的无感知转换。在该状态下memcache主从模式实施完毕,客户端可以连接ip3:port1对主从memcache进行访问。
54.本技术相比现有开源memcache版本,在保证功能完善、请求方式不变、性能损耗低的基础上,实现了主从同步方案。
55.在功能方面,该主从方案在原有的命令基础上进行主备改造,在满足原有功能基础上,满足主备需求。
56.在数据方面,当其中一台机器发生服务故障、机器宕机、网络不通等情况,客户连接不失效,存储数据不丢失,客户处于无感知状态,且当发生故障的服务或机器恢复后,能够重组主从模式,继续数据安全保障。由此,能够提供可靠性高、稳定的服务。
57.在性能方面,该主从方案相比原生memcache性能损耗微小。如下表所示,在单客户连接情况下,针对value大小为1kb、10kb的数据做get和set操作100,000次,测试结果如下(单位ms)。
58.方案操作value 1kvalue 10k原生set0.521.1本设计set0.6111.12原生get0.460.78本设计get0.5920.892
59.与目前业界采用的基于代理的memcache主从同步方案相比,本发明的方案的性能也明显更优。基于代理的memcache主从同步方案是使用一个代理层代理主从节点,用户直
接链接代理服务,代理服务会将用户的命令分别转发到主从服务器上,以实现数据的备份。因为使用代理架构,客户端需要先访问代理agent节点的服务,再由agent转发到相关的memcache服务器上,网络通信上的性能损耗较大,使用代理模式预计时间将较原有方案增加50%以上。
60.此外,主机服务器和从机服务器在设备结构上相同,作为主节点还是从节点取决于系统参数的设置,因此系统硬件的可替换性高,无需单独生产主节点设备或从节点设备。
61.主节点和从节点之间可以采用增量同步,也可以采用全量同步,或者二者结合。
62.图5示出了根据本发明一个实施例中主节点(例如主服务器1101)的增量同步的流程图。
63.在主服务器1101接收到如上文描述的根据本发明的实施例而专门设计的主从同步命令时,使用对应主从同步命令通过主从同步端口port2发送给从服务器1201,从服务器1201接收到了命令后更新从服务器1201的数据以实现与主节点的数据同步。
64.以变更类命令为例来说明。具体地,在步骤s510中,主服务器1101接收到变更类命令,使主memcache模块1110中缓存的数据发生变更。在步骤s520中,判断主memcache模块1110中缓存的数据是否发生了变更。在缓存的数据未发生变更的情况下(步骤s520为“否”),结束处理;在缓存的数据发生了变更的情况下(步骤s520为“是”),主服务器1101判断是否有从节点(从服务器)连接到自身(步骤s530)。在不存在连接到自身的从节点的情况下(步骤s530为“否”),结束处理;在存在连接到自身的从节点(例如从服务器1201)的情况下(步骤s530为“是”),则将更新命令写入到队列(步骤s540),之后工作线程通知主线程有数据需要复制(更新)到从节点(步骤s550),接着主服务器1101构建主从复制命令内容(步骤s570)。在此,判断主从连接是否断开(步骤s580),在判断为断开的情况下(步骤s570为“是”),绑定主从同步端口,等待其它节点的连接(步骤s590);在判断为未断开的情况下(步骤s570为“否”),则向从节点(例如从服务器1201)发送主从复制命令,更新从服务器1201的数据以实现与主节点的数据同步。
65.通过以上的流程,可以实现数据的增量同步功能。
66.另外,为了实现全量同步功能,可以设计命令data_syn_end\r\n,因为全量同步时服务器需要停止对外服务,上述命令用以通知节点全量同步已完成可以对外提供服务。
67.图6示出了根据本发明一个实施例的主节点和从节点全量同步时的流程图。
68.在步骤s610中主服务器1101的服务节点启动,接着在步骤s620中主服务器1101通过主从同步端口与作为从节点的从服务器1201建立tcp连接。在步骤s630中判断连接是否成功,在连接失败的情况下(步骤s630为“否”),绑定主从同步端口,等待其他节点连接;在连接建立的情况下(步骤s630为“是”),实施全量数据复制,即将主服务器1101的主memcache模块1110缓存的所有数据复制(同步)到从服务器1201的从memcache模块1210。之后持续判断数据同步是否完成,直至判断为数据同步完成为止(步骤s660)。之后即可以向客户端300提供服务。
69.通过以上的步骤,即可实现主节点和从节点全量同步。
70.应当理解,本说明书中“实施例”或类似表达方式的引用是指结合该实施例所述的特定特征、结构、或特性系包括在本发明的至少一具体实施例中。因此,在本说明书中,“在本发明的实施例中”及类似表达方式的用语的出现未必指相同的实施例。
71.本领域技术人员应当知道,本发明被实施为一系统、装置、方法或作为计算机程序产品的计算机可读媒体(例如非瞬态存储介质)。因此,本发明可以实施为各种形式,例如完全的硬件实施例、完全的软件实施例(包括固件、常驻软件、微程序代码等),或者也可实施为软件与硬件的实施形式,在以下会被称为“电路”、“模块”或“系统”。此外,本发明也可以任何有形的媒体形式实施为计算机程序产品,其具有计算机可使用程序代码存储于其上。
72.本发明的相关叙述参照根据本发明具体实施例的系统、装置、方法及计算机程序产品的流程图和/或框图来进行说明。可以理解每一个流程图和/或框图中的每一个块,以及流程图和/或框图中的块的任何组合,可以使用计算机程序指令来实施。这些计算机程序指令可供通用型计算机或特殊计算机的处理器或其它可编程数据处理装置所组成的机器来执行,而指令经由计算机或其它可编程数据处理装置处理以便实施流程图和/或框图中所说明的功能或操作。
73.在附图中显示根据本发明各种实施例的系统、装置、方法及计算机程序产品可实施的架构、功能及操作的流程图及框图。因此,流程图或框图中的每个块可表示一模块、区段、或部分的程序代码,其包括一个或多个可执行指令,以实施指定的逻辑功能。另外应当注意,在某些其它的实施例中,块所述的功能可以不按图中所示的顺序进行。举例来说,两个图示相连接的块事实上也可以同时执行,或根据所涉及的功能在某些情况下也可以按图标相反的顺序执行。此外还需注意,每个框图和/或流程图的块,以及框图和/或流程图中块的组合,可藉由基于专用硬件的系统来实施,或者藉由专用硬件与计算机指令的组合,来执行特定的功能或操作。
74.以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献