本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种服务内存缓存调用方法和装置。
背景技术:
近十年以来,随着信息化,互联网 及保险行业的快速发展,软件开发不断进行革新,相应的框架也向生态化进行发展,当今的软件应用的开发逐渐展现出微服务化,个性化,周期短,高品质等特征。新的快读迭代的个性化需求是传统的应用开发不具备的,因此将聚合型项目拆开形成按照特定功能或者需求的单个微服务工程成为了目前的研究热点。
系统架构设计是系统构建过程中的非常关键的一部分,决定着系统的稳定性、鲁棒性、扩展性等一系列问题,并定义了在系统内部,如何根据技术、业务和组织及可扩展性、可维护性和灵活性等一系列因素,把系统划分成不同的组成部件,并使这些部件相互协作为用户提供某种特定的服务。不过伴随着业务的不断发展,功能的持续增加,传统单块架构对应的沟通、管理、协调等成本越来越高,出现了维护成本增加,交付周期长,技术选型成本高,水平和垂直扩展性差等一系列问题。为解决传统系统架构面临的问题,随着领域驱动设计,持续交付技术,虚拟化技术,小型自治团队组建,基础设施智能化自动化,大型集群系统设计等技术和实践的发展,微服务应运而生。微服务作为一种分布式系统解决方案,聚焦细粒度服务使用的推动。不同的微服务协同工作,每个服务都有自己的生命周期。由于微服务主要围绕业务领域构建模型,而且整合了过去十多年来的新概念和新技术,因此可以避免由传统的分层架构引发的很多问题及陷阱,具有很大的研究价值和实用意义。
目前现有的缓存技术有内存式缓存jetcache等或者分布式缓存redis(redis:一个开源的使用ansic语言编写、支持网络、可基于内存亦可持久化的日志型、键-值数据库,并提供多种语言的api),使用jetcache对数据进行缓存由于load数据时没有提供锁功能,会造成缓存穿透,在使用的时候,需要实现分布式锁以配合使用,另外,如果单独在应用服务节点中做全部数据的缓存,应用服务器的内存开销将会非常之巨大,也会对系统的稳定性造成巨大的影响。当使用分布式缓存redis的时候虽然可以实现相同的缓存功能,但是redis服务器与应用服务器会有很大的耦合性。当redis服务出现宕机的时候会对应用服务器造成致命的打击。
而非一致性服务器hash的缓存,多数会在每台服务器都进行相同的缓存,以此来保证不同用户并发的请求缓存的命中率,但是如果缓存的内容较多或这较大,那么对内存的开销是很大的,与此同时增加了大量的硬件成本,导致对非交易数据进行缓存会得不偿失,而且再大多数情况下会因此造成缓存穿透或者其他系统不稳定的情况。
技术实现要素:
有鉴于此,本说明书一个或多个实施例的目的在于提出一种服务内存缓存调用方法,以解决微服务间调用量大、并发高的请求,从而影响系统稳定性的问题,从而可以实现通过将服务请求命中到目标服务节点,可以将非交易返回数据按照服务节点进行内存式缓存,从而可以大大提升请求的tps,降低服务器性能损耗,保证系统的稳定性的效果。
基于上述目的,本说明书一个或多个实施例提供了一种服务内存缓存调用方法,所述方法包括:
获取服务请求,当前服务节点列表和哈希环的服务节点信息;
判断所述当前服务节点列表对应的服务节点信息与所述哈希环的服务节点信息是否相同;
若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,则根据所述服务请求,在所述所述哈希环中确定所述服务请求对应的目标服务节点;
若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点;
基于所述服务请求对应的目标服务节点,调用所述服务请求对应的服务内存缓存。
可选的,所述获取当前服务节点列表,包括:
判断内存缓存中是否存储有所述当前服务节点列表;
若所述内存缓存中存储有所述当前服务节点列表,从所述内存缓存中获取所述当前服务节点列表;
若所述内存缓存中未存储有所述当前服务节点列表,从注册中心获取所述当前服务节点列表。
可选的,在所述获取服务请求,当前服务节点列表和哈希环的服务节点信息之后,所述方法还包括:
将所述服务请求中的用户信息输入拦截器中进行线程隔离,并将所述用户信息转换为预设格式,得到转换后的用户信息,并将所述转换后的用户信息作为所述服务请求对应的用户信息。
可选的,所述若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,则根据所述服务请求,在所述所述哈希环中确定所述服务请求对应的目标服务节点,包括:
若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同;
基于一致性哈希算法,将所述服务请求对应的用户信息映射到所述哈希环上,得到所述用户信息在所述哈希环上的哈希值;
根据所述用户信息在所述哈希环上的哈希值,在所述所述哈希环中确定所述服务请求对应的目标服务节点。
可选的,所述若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点,包括:
若所述当前服务节点列表中的服务节点的数量与所述哈希环的服务节点的数量不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点。
可选的,所述基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,包括:
针对所述当前服务节点列表中的每一个服务节点,根据该服务节点的节点信息,进行预设次数的一致性哈希算法的转译,得到该服务节点对应的哈希值,以及该服务节点对应的若干个虚拟节点的哈希值;将该服务节点对应的哈希值,以及该服务节点对应的若干个虚拟节点的哈希值,映射至一哈希环;其中,服务节点的节点信息包括以下至少一个信息:服务名、端口号、随机数和时间戳。
可选的,所述根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点,包括:
根据所述服务请求的用户信息,进行一致性哈希算法的转译,得到所述用户信息对应的哈希值;
根据所述用户信息对应的哈希值,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点。
本说明书一个或多个实施例提供了一种服务内存缓存调用装置,所述装置包括:
获取单元,用于获取服务请求,当前服务节点列表和哈希环的服务节点信息;
判断单元,用于判断所述当前服务节点列表对应的服务节点信息与所述哈希环的服务节点信息是否相同;
第一确定单元,用于若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,则根据所述服务请求,在所述所述哈希环中确定所述服务请求对应的目标服务节点;
第二确定单元,用于若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点;
调用单元,用于基于所述服务请求对应的目标服务节点,调用所述服务请求对可选的,所述获取当前服务节点列表,包括:
判断内存缓存中是否存储有所述当前服务节点列表;
若所述内存缓存中存储有所述当前服务节点列表,从所述内存缓存中获取所述当前服务节点列表;
若所述内存缓存中未存储有所述当前服务节点列表,从注册中心获取所述当前服务节点列表。
可选的,所述装置还包括:拦截单元,用于:
将所述服务请求中的用户信息输入拦截器中进行线程隔离,并将所述用户信息转换为预设格式,得到转换后的用户信息,并将所述转换后的用户信息作为所述服务请求对应的用户信息。
可选的,所述第一确定单元,用于:
若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同;
基于一致性哈希算法,将所述服务请求对应的用户信息映射到所述哈希环上,得到所述用户信息在所述哈希环上的哈希值;
根据所述用户信息在所述哈希环上的哈希值,在所述所述哈希环中确定所述服务请求对应的目标服务节点。
可选的,所述第二确定单元,用于:
若所述当前服务节点列表中的服务节点的数量与所述哈希环的服务节点的数量不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点。
可选的,所述第二确定单元,用于:
针对所述当前服务节点列表中的每一个服务节点,根据该服务节点的节点信息,进行预设次数的一致性哈希算法的转译,得到该服务节点对应的哈希值,以及该服务节点对应的若干个虚拟节点的哈希值;将该服务节点对应的哈希值,以及该服务节点对应的若干个虚拟节点的哈希值,映射至一哈希环;其中,服务节点的节点信息包括以下至少一个信息:服务名、端口号、随机数和时间戳。
可选的,所述第二确定单元,用于:
根据所述服务请求的用户信息,进行一致性哈希算法的转译,得到所述用户信息对应的哈希值;
根据所述用户信息对应的哈希值,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点。
本说明书一个或多个实施例提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行上述提及的所述服务内存缓存调用方法。
本说明书一个或多个实施例提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述提及的任意一项所述服务内存缓存调用方法。
本说明书一个或多个实施例提供了一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行上述提及的任意一项所述服务内存缓存调用方法。
从上面所述可以看出,本说明书一个或多个实施例提供的一种服务内存缓存调用方法,所述方法可以先获取服务请求,当前服务节点列表和哈希环的服务节点信息;然后,可以判断所述当前服务节点列表对应的服务节点信息与所述哈希环的服务节点信息是否相同;若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,则根据所述服务请求,在所述所述哈希环中确定所述服务请求对应的目标服务节点;若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点;基于所述服务请求对应的目标服务节点,调用所述服务请求对应的服务内存缓存。可见,本申请可以通过将服务节点虚拟化并将服务节点进行一致性哈希算法运算,得到服务节点对应的哈希值,然后,根据服务节点对应的哈希值将服务节点分配到哈希环上,可以将服务间的调用固定到哈希环上不变的hash值节点上,这样,便可以根据用户端的服务请求命中到哈希环上固定的目标服务节点,并可以从目标服务节点对应的服务器中读取所述服务请求对应的服务内存缓存数据,即本申请可以通过将服务请求命中到目标服务节点,可以将非交易返回数据按照服务节点进行内存式缓存,从而可以大大提升请求的tps,降低服务器性能损耗,保证系统的稳定性。
附图说明
为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书一个或多个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一实施例提供的一种服务内存缓存调用方法的流程示意图;
图2为本申请一实施例提供的一种服务内存缓存调用系统的系统架构示意图;
图3为本申请一实施例提供的一种服务内存缓存调用装置的结构示意图;
图4为本发明一实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
需要说明的是,除非另外定义,本说明书一个或多个实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本说明书一个或多个实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
发明人经研究发现,由于现有的非一致性服务器hash的缓存,多数会在每台服务器都进行相同的缓存,以此来保证不同用户并发的请求缓存的命中率,但是如果缓存的内容较多或这较大,那么对内存的开销是很大的,与此同时增加了大量的硬件成本,导致对非交易数据进行缓存会得不偿失,而且再大多数情况下会因此造成缓存穿透或者其他系统不稳定的情况。
故此,本发明提供了一种服务内存缓存调用方法,所述方法可以先获取服务请求,当前服务节点列表和哈希环的服务节点信息;然后,可以判断所述当前服务节点列表对应的服务节点信息与所述哈希环的服务节点信息是否相同;若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,则根据所述服务请求,在所述所述哈希环中确定所述服务请求对应的目标服务节点;若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点;基于所述服务请求对应的目标服务节点,调用所述服务请求对应的服务内存缓存。可见,本申请可以通过将服务节点虚拟化并将服务节点进行一致性哈希算法运算,得到服务节点对应的哈希值,然后,根据服务节点对应的哈希值将服务节点分配到哈希环上,可以将服务间的调用固定到哈希环上不变的hash值节点上,这样,便可以根据用户端的服务请求命中到哈希环上固定的目标服务节点,并可以从目标服务节点对应的服务器中读取所述服务请求对应的服务内存缓存数据,即本实施例可以通过将服务请求命中到目标服务节点,可以将非交易返回数据按照服务节点进行内存式缓存,从而可以大大提升请求的tps,降低服务器性能损耗,保证系统的稳定性。需要强调的是,在一种实现场景下,本发明提供的一种服务内存缓存调用方法可以为基于resttemplate服务间负载均衡调用的一致性hash服务内存缓存调用的方法。其中,resttemplate是spring(一个轻量级控制反转(ioc)和面向切面(aop)的容器框架)提供的用于访问rest服务的客户端,resttemplate提供了多种便捷访问远程http服务的方法,能够大大提高客户端的编写效率。rest为高表述性状态传递(英文:representationalstatetransfer,简称rest),它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
下面结合附图详细说明本发明实施例的技术方案。
参见图1,示出了本发明实施例中的一种服务内存缓存调用方法,所述方法包括以下步骤:
s101:获取服务请求,当前服务节点列表和哈希环的服务节点信息。
在本实施例中,当服务器接收到客户端发送的服务请求时,可以先获取当前服务节点列表和哈希(hash)环的服务节点信息。需要说明的是,当前服务节点列表可以包括当前提供服务的服务节点的信息,例如可以是当前提供服务的服务节点的数量、服务名、端口号、时间戳、哈希值等信息;当前提供服务的服务节点可以理解为当前能正常运行提供数据读取功能且存储有服务内存缓存数据的服务器。哈希环的服务节点信息可以理解为在获取服务请求之前,完成调用一服务请求(与本次获取服务请求相邻的上一次获取到的服务请求)时所确定的哈希环上的服务节点信息,例如,服务节点信息可以包括哈希环上的服务节点的数量、服务名、端口号、时间戳、哈希值等信息。
需要说明的是,在本实施例的一种实现方式中,获取当前服务节点列表的方式可以为,先判断内存缓存中是否存储有所述当前服务节点列表,若所述内存缓存中存储有所述当前服务节点列表,从所述内存缓存中获取所述当前服务节点列表,若所述内存缓存中未存储有所述当前服务节点列表,从注册中心获取所述当前服务节点列表。需要说明的是,在本实施例中,当服务节点需要连接服务器以提供数据读取功能时,服务节点需要先在注册中心进行注册,即注册中心可以存储当前连接服务器且能够提供数据读取功能的服务节点的节点信息,其中,服务节点的节点信息包括以下至少一个信息:服务名、端口号、随机数和时间戳;这样,注册中心可以根据各个服务节点对应的节点信息生成当前服务节点列表。若注册中心将该当前服务节点列表预先存储至内存缓存(比如国寿e店wings缓存框架)中,则获取服务请求之后,可以直接在内存缓存中获取所述当前服务节点列表,若注册中心未将该当前服务节点列表预先存储至内存缓存,则获取服务请求之后,可以先从注册中心获取所述当前服务节点列表,并缓存所述当前服务节点列表。另外,需要强调的是,本实施例中在完成调用一服务请求(与本次获取服务请求相邻的上一次获取到的服务请求)时确定一哈希环之后,可以将该哈希环缓存在本地,以便可以直接获取。例如,可以如图2所示,假设当前连接服务器且能够提供数据读取功能的服务节点包括服务节点1、服务节点2、服务节点3和服务节点4,则所获取到的当前服务节点列表包括服务节点1、服务节点2、服务节点3和服务节点4的节点信息。
需要说明的是,在一种实现方式中,为了能够实现服务节点之间的服务内存缓存调用,从而实现数据的传递,在实施例中,可以设置有拦截器,以便通过拦截器对各个服务请求进行线程隔离。具体地,在所述获取服务请求,当前服务节点列表和哈希环的服务节点信息之后,所述方法还可以包括以下步骤:
将所述服务请求中的用户信息输入拦截器中进行线程隔离,并将所述用户信息转换为预设格式,得到转换后的用户信息,并将所述转换后的用户信息作为所述服务请求对应的用户信息。
具体地,可以如图2所示,拦截器接收到服务请求的用户信息(即图中的“请求信息中的用户数据”)之后,将服务请求的用户信息放入到拦截器中进行线程隔离,接着,再初始化自定义路由策略(即后续需要执行的步骤)的beam,即在启动需要调用所述服务请求对应的服务内存缓存的程序时,以自动注入的方式对自定义路由策略的beam进行初始化。并且,拦截器可以提取服务请求中的用户信息,例如,用户信息一般设置在服务请求中的body或header部分的字段,故拦截器可以从服务请求中的body或header部分获取到用户信息;以及,可以根据预设的格式,对用户信息进行格式转换,得到转换后的用户信息。这样,转换后的用户信息便为符合预设的格式的用户信息,以便于后续进行数据处理,并可以将所述转换后的用户信息作为所述服务请求对应的用户信息。需要说明的是,在一些实现方式中,在对用户信息进行格式转换之后,还可以对用户信息进行字段拼装,例如,预设的格式中需要有用户信息对应的客户端的标识,而转换后的用户信息中没有对应的客户端的标识时,可以将对应的客户端的标识拼装到该转换后的用户信息中。
s102:判断所述当前服务节点列表对应的服务节点信息与所述哈希环的服务节点信息是否相同。
在本实施例中,为了能够准确确定所述服务请求对应的目标服务节点,需要先判断当前服务节点列表对应的服务节点信息与所述哈希环的服务节点信息是否相同,以便可以根据判断结果,确定是否需要重新对哈希环上的服务节点进行调整,以根据哈希环上的服务节点确定所述服务请求对应的目标服务节点。
作为一种示例,判断所述当前服务节点列表对应的服务节点信息与所述哈希环的服务节点信息是否相同,可以为判断当前服务节点列表中的服务节点的数量与哈希环上的服务节点(不包括服务节点对应的虚拟节点)的数量是否相同,也可以为判断当前服务节点列表中的各个服务节点的哈希值与哈希环上的各个服务节点的哈希值是否完全相对应,还可以为判断当前服务节点列表中的各个服务节点的服务名和/或端口号与哈希环上的各个服务节点的服务名和/或端口号是否完全相对应。
需要强调的是,判断当前服务节点列表中的各个服务节点的哈希值与哈希环上的各个服务节点的哈希值是否完全相对应的方式具体为:可以是先基于一致性哈希算法,根据当前服务节点列表中的各个服务节点的节点信息,确定当前服务节点列表对应的哈希环。例如,可以先将当前服务节点列表中的各个服务节点的节点信息进行json转换,然后,确定转换后的各个服务节点的节点信息的哈希值,需要说明的是,通过缓存内存(比如国寿e店wings缓存框架)对当前服务节点列表中的各个服务节点的节点信息进行json字符转换后进行缓存,可以降低获取服务节点部分内容的性能损耗;具体地,可以分别根据当前服务节点列表中的各个服务节点的服务名(servicename)和端口号(port),或者,服务名、端口号和随机数/时间戳,进行一致性哈希算法运算,得到当前服务节点列表中的各个服务节点的哈希值,再将各个服务节点的哈希值映射到一新的哈希环上,得到当前服务节点列表对应的哈希环。接着,再判断当前服务节点列表对应的哈希环与之前的哈希环上的各个服务节点的哈希值是否相同。
s103:若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,则根据所述服务请求,在所述所述哈希环中确定所述服务请求对应的目标服务节点。
在本实施例中,若确定所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,比如,当前服务节点列表中的服务节点的数量与哈希环上的服务节点(不包括服务节点对应的虚拟节点)的数量相同,或者,当前服务节点列表中的各个服务节点的哈希值与哈希环上的各个服务节点的哈希值完全相对应,或者当前服务节点列表中的各个服务节点的服务名和/或端口号与哈希环上的各个服务节点的服务名和/或端口号完全相对应。说明哈希环的服务节点信息与当前服务节点列表中的服务节点信息相同,即当前服务节点列表中的服务节点与生成哈希环时所对应的服务节点并未发生变化,即哈希环上的服务节点并未发生变化(比如并未增加、减少),从而不需要重新对哈希环上的服务节点进行调整,也就是说,可以直接根据哈希环上的服务节点确定所述服务请求对应的目标服务节点。
然后,可以基于一致性哈希算法,将所述服务请求对应的用户信息映射到所述哈希环上,得到所述用户信息在所述哈希环上的哈希值。作为一种示例,可以根据服务请求对应的用户信息,进行一致性哈希算法的转译,得到该用户信息对应的哈希值,并且,根据该用户信息对应的哈希值,将该用户信息映射到哈希环上。
接着,可以根据所述用户信息在所述哈希环上的哈希值,在所述所述哈希环中确定所述服务请求对应的目标服务节点。在一种实现方式中,可以先根据所述服务请求的用户信息,进行一致性哈希算法的转译,得到所述用户信息对应的哈希值,接着,可以根据所述用户信息对应的哈希值,在哈希环中确定所述服务请求对应的目标服务节点。作为一种示例,在哈希环上,可以沿着哈希环的圆环的预设方向(比如顺时针方向)从该用户信息映射在哈希环上的节点出发,直到遇见一个服务节点或一个服务节点对应的虚拟节点(即遇到的第一个服务节点或者虚拟节点),此时,可以将该服务节点(或者该虚拟节点对应的服务节点)确定为所述服务请求对应的目标服务节点。
s104:若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点。
在本实施例中,若所述当前服务节点列表中的服务节点的数量与所述哈希环的服务节点的数量不相同,比如,当前服务节点列表中的服务节点的数量与哈希环上的服务节点(不包括服务节点对应的虚拟节点)的数量不相同,或者,当前服务节点列表中的各个服务节点的哈希值与哈希环上的各个服务节点的哈希值不完全相对应,或者当前服务节点列表中的各个服务节点的服务名和/或端口号与哈希环上的各个服务节点的服务名和/或端口号不完全相对应。说明哈希环的服务节点信息与当前服务节点列表中的服务节点信息相同,即当前服务节点列表中的服务节点与生成哈希环时所对应的服务节点发生变化,即哈希环上的服务节点发生变化(比如增加、减少),此时,为了保证缓存数据可以均衡的分布在各个服务器(服务节点)中,可以通过使得哈希环中的服务节点为均衡、均匀分布的,以使得缓存数据可以均衡的分布在各个服务节点中,从而在本实施例中,需要重新对哈希环上的服务节点进行调整,也就是说,不可以直接根据哈希环上的服务节点确定所述服务请求对应的目标服务节点,而是需要根据当前服务节点列表中的服务节点信息重新确定哈希环,再根据重新确定的哈希环确定所述服务请求对应的目标服务节点,以使得根据当前服务节点列表中的服务节点信息重新确定的哈希环中的服务节点更为均衡、均匀分布的,这样,哈希环可以自动平均分配服务请求,达到负载均衡性的效果。需要说明的是,在本实施例中,可以将根据当前服务节点列表中的服务节点信息重新确定的哈希环称之为当前服务节点列表对应的哈希环。
然后,可以基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环。具体地,可以分别针对所述当前服务节点列表中的每一个服务节点,根据该服务节点的节点信息,进行预设次数的一致性哈希算法的转译,得到该服务节点对应的哈希值,以及该服务节点对应的若干个虚拟节点的哈希值;将该服务节点对应的哈希值,以及该服务节点对应的若干个虚拟节点的哈希值,映射至一哈希环。比如,可以采用对该服务节点的服务名(servicename)、端口号(port),或者,服务名、端口号和随机数/时间戳,对其进行一次一致性哈希算法的转译以及进行1000次的一致性哈希算法的转译后得到该服务节点对应的哈希值,以及其对应的1000个虚拟节点的哈希值,然后,将该服务节点以及其对应的虚拟节点均映射到哈希环上,从而得到当前服务节点列表对应的哈希环。需要说明的是,可以是映射至一全新的哈希环,也可以是在原有的哈希环的基础上进行的调整,在本实施例中并不限定。
接着,可以根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点。在一种实现方式中,可以先根据所述服务请求的用户信息,进行一致性哈希算法的转译,得到所述用户信息对应的哈希值,接着,可以根据所述用户信息对应的哈希值,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点。作为一种示例,在当前服务节点列表对应的哈希环上,可以沿着哈希环的圆环的预设方向(比如顺时针方向)从该用户信息映射在哈希环上的节点出发,直到遇见一个服务节点或一个服务节点对应的虚拟节点(即遇到的第一个服务节点或者虚拟节点),此时,可以将该服务节点(或者该虚拟节点对应的服务节点)确定为所述服务请求对应的目标服务节点。并且,当下次再接收到相同的服务请求后,会再次命中此目标服务节点,这样,可以通过选择固定的服务节点进行访问,以便提升缓存命中率。
s105:基于所述服务请求对应的目标服务节点,调用所述服务请求对应的服务内存缓存。
在确定服务请求对应的目标服务节点之后,可以将服务请求向目标服务节点对应的服务器发送,以便目标服务节点对应的服务器返回所述服务请求对应的服务内存缓存,从而可以完成调用所述服务请求对应的服务内存缓存,进而可以使用该服务内存缓存。
可见,本实施例提供一种服务内存缓存调用方法,所述方法可以先获取服务请求,当前服务节点列表和哈希环的服务节点信息;然后,可以判断所述当前服务节点列表对应的服务节点信息与所述哈希环的服务节点信息是否相同;若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,则根据所述服务请求,在所述所述哈希环中确定所述服务请求对应的目标服务节点;若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点;基于所述服务请求对应的目标服务节点,调用所述服务请求对应的服务内存缓存。可见,本申请可以通过将服务节点虚拟化并将服务节点进行一致性哈希算法运算,得到服务节点对应的哈希值,然后,根据服务节点对应的哈希值将服务节点分配到哈希环上,可以将服务间的调用固定到哈希环上不变的hash值节点上,这样,便可以根据用户端的服务请求命中到哈希环上固定的目标服务节点,并可以从目标服务节点对应的服务器中读取所述服务请求对应的服务内存缓存数据,即本实施例可以通过将服务请求命中到目标服务节点,可以将非交易返回数据按照服务节点进行内存式缓存,从而可以大大提升请求的tps,降低服务器性能损耗,保证系统的稳定性。
需要说明的是,在本实施例中,可以通过将整体内容即所有操作流程(即s101-s105)均进行sdk封装,并且增加开关设置,以达到开箱即用,随需随用的效果。另外,外部工程或者系统想使用此项一致性hash功能可以直接引用wings-consistent-hash对应的sdk,也可以使用wings-rmi的starter,此starter已集成一致性hash功能。
相应于上述的一种服务内存缓存调用方法,本发明实施例提供了一种服务内存缓存调用装置,结构如图3所示,包括:
获取单元301,用于获取服务请求,当前服务节点列表和哈希环的服务节点信息;
判断单元302,用于判断所述当前服务节点列表对应的服务节点信息与所述哈希环的服务节点信息是否相同;
第一确定单元303,用于若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,则根据所述服务请求,在所述所述哈希环中确定所述服务请求对应的目标服务节点;
第二确定单元304,用于若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点;
调用单元305,用于基于所述服务请求对应的目标服务节点,调用所述服务请求对可选的,所述获取当前服务节点列表,包括:
判断内存缓存中是否存储有所述当前服务节点列表;
若所述内存缓存中存储有所述当前服务节点列表,从所述内存缓存中获取所述当前服务节点列表;
若所述内存缓存中未存储有所述当前服务节点列表,从注册中心获取所述当前服务节点列表。
可选的,在所述获取服务请求,当前服务节点列表和哈希环的服务节点信息之后,所述装置方法还包括:拦截单元,用于:
将所述服务请求中的用户信息输入拦截器中进行线程隔离,并将所述用户信息转换为预设格式,得到转换后的用户信息,并将所述转换后的用户信息作为所述服务请求对应的用户信息。
可选的,所述第一确定单元303,用于若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,则根据所述服务请求,在所述所述哈希环中确定所述服务请求对应的目标服务节点,包括:
若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同;
基于一致性哈希算法,将所述服务请求对应的用户信息映射到所述哈希环上,得到所述用户信息在所述哈希环上的哈希值;
根据所述用户信息在所述哈希环上的哈希值,在所述所述哈希环中确定所述服务请求对应的目标服务节点。
可选的,所述第二确定单元304,用于若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点,包括:
若所述当前服务节点列表中的服务节点的数量与所述哈希环的服务节点的数量不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点。
可选的,所述第二确定单元304,用于基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,包括:
针对所述当前服务节点列表中的每一个服务节点,根据该服务节点的节点信息,进行预设次数的一致性哈希算法的转译,得到该服务节点对应的哈希值,以及该服务节点对应的若干个虚拟节点的哈希值;将该服务节点对应的哈希值,以及该服务节点对应的若干个虚拟节点的哈希值,映射至一哈希环;其中,服务节点的节点信息包括以下至少一个信息:服务名、端口号、随机数和时间戳。
可选的,所述第二确定单元304,用于根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点,包括:
根据所述服务请求的用户信息,进行一致性哈希算法的转译,得到所述用户信息对应的哈希值;
根据所述用户信息对应的哈希值,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点。
本说明书实施例中所述支付涉及的技术载体,例如可以包括近场通信(nearfieldcommunication,nfc)、wifi、3g/4g/5g、pos机刷卡技术、二维码扫码技术、条形码扫码技术、蓝牙、红外、短消息(shortmessageservice,sms)、多媒体消息(multimediamessageservice,mms)等。
本说明书实施例中所述生物识别所涉及的生物特征,例如可以包括眼部特征、声纹、指纹、掌纹、心跳、脉搏、染色体、dna、人牙咬痕等。其中眼纹可以包括虹膜、巩膜等生物特征。
需要说明的是,本说明书一个或多个实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本说明书一个或多个实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
图4示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的cpu(centralprocessingunit,中央处理器)、微处理器、应用专用集成电路(applicationspecificintegratedcircuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用rom(readonlymemory,只读存储器)、ram(randomaccessmemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本说明书一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本说明书一个或多个实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(ic)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本说明书一个或多个实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本说明书一个或多个实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本说明书一个或多个实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态ram(dram))可以使用所讨论的实施例。
本说明书一个或多个实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
1.一种服务内存缓存调用方法,其特征在于,所述方法包括:
获取服务请求,当前服务节点列表和哈希环的服务节点信息;
判断所述当前服务节点列表对应的服务节点信息与所述哈希环的服务节点信息是否相同;
若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,则根据所述服务请求,在所述所述哈希环中确定所述服务请求对应的目标服务节点;
若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点;
基于所述服务请求对应的目标服务节点,调用所述服务请求对应的服务内存缓存。
2.根据权利要求1所述的方法,其特征在于,所述获取当前服务节点列表,包括:
判断内存缓存中是否存储有所述当前服务节点列表;
若所述内存缓存中存储有所述当前服务节点列表,从所述内存缓存中获取所述当前服务节点列表;
若所述内存缓存中未存储有所述当前服务节点列表,从注册中心获取所述当前服务节点列表。
3.根据权利要求1所述的方法,其特征在于,在所述获取服务请求,当前服务节点列表和哈希环的服务节点信息之后,所述方法还包括:
将所述服务请求中的用户信息输入拦截器中进行线程隔离,并将所述用户信息转换为预设格式,得到转换后的用户信息,并将所述转换后的用户信息作为所述服务请求对应的用户信息。
4.根据权利要求3所述的方法,其特征在于,所述若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,则根据所述服务请求,在所述所述哈希环中确定所述服务请求对应的目标服务节点,包括:
若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同;
基于一致性哈希算法,将所述服务请求对应的用户信息映射到所述哈希环上,得到所述用户信息在所述哈希环上的哈希值;
根据所述用户信息在所述哈希环上的哈希值,在所述所述哈希环中确定所述服务请求对应的目标服务节点。
5.根据权利要求1-4中任一所述的方法,其特征在于,所述若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点,包括:
若所述当前服务节点列表中的服务节点的数量与所述哈希环的服务节点的数量不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点。
6.根据权利要求5所述的方法,其特征在于,所述基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,包括:
针对所述当前服务节点列表中的每一个服务节点,根据该服务节点的节点信息,进行预设次数的一致性哈希算法的转译,得到该服务节点对应的哈希值,以及该服务节点对应的若干个虚拟节点的哈希值;将该服务节点对应的哈希值,以及该服务节点对应的若干个虚拟节点的哈希值,映射至一哈希环;其中,服务节点的节点信息包括以下至少一个信息:服务名、端口号、随机数和时间戳。
7.根据权利要求5所述的方法,其特征在于,所述根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点,包括:
根据所述服务请求的用户信息,进行一致性哈希算法的转译,得到所述用户信息对应的哈希值;
根据所述用户信息对应的哈希值,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点。
8.一种服务内存缓存调用装置,其特征在于,所述方法包括:
获取单元,用于获取服务请求,当前服务节点列表和哈希环的服务节点信息;
判断单元,用于判断所述当前服务节点列表对应的服务节点信息与所述哈希环的服务节点信息是否相同;
第一确定单元,用于若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息相同,则根据所述服务请求,在所述所述哈希环中确定所述服务请求对应的目标服务节点;
第二确定单元,用于若所述当前服务节点列表中的服务节点信息与所述哈希环的服务节点信息不相同,则基于一致性哈希算法,根据当前服务节点列表中的服务节点,确定当前服务节点列表对应的哈希环,以及,根据所述服务请求,在所述当前服务节点列表对应的哈希环中确定所述服务请求对应的目标服务节点;
调用单元,用于基于所述服务请求对应的目标服务节点,调用所述服务请求对应的服务内存缓存。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任意一项所述服务内存缓存调用方法。
10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行权利要求1至7任意一项所述服务内存缓存调用方法。
技术总结