具体实施方式
下面结合附图,对本发明的实施例进行描述。
本申请实施例提供的数据存储方法、应用服务器及远程存储服务器,适用于应用服务器集群中的应用服务器存储数据的场景,该应用服务器集群用于部署同一业务***(如,淘宝交易***以及支付宝账户***等),其可以包括两个以上的应用服务器。
图1为本申请提供的数据存储方法的应用场景示意图,图1中,同一业务***同时部署在两个应用服务器上,也即应用服务器集群10可以包括两个应用服务器,该两个应用服务器分别为:应用服务器101和应用服务器102,其中,应用服务器101的互联网协议地址(Internet Protocol Address,IP)为:IP1,应用服务器102的IP为:IP2。该两个应用服务器的组成结构相同,以应用服务器101为例来说,其可以包括缓存组件(component)和本地缓存(也称内存或者本地数据中心),缓存组件中同时封装了本地缓存的相关组件以及远程缓存的相关组件,其用于在本地缓存中存储数据,还用于在远程存储服务器中存储数据。在一个例子中,缓存组件在本地缓存中是以键值对(Key-Vlaue)的形式来存储数据的,如,<key1,data1>,<key2,data2>,…,<keyn,datan>,其中,data1,data2,…,datan是指存储的实实在在的数据,而key1,key2,…,keyn是指上述数据的标识,其通常是由业务***根据业务最常用的使用条件来设定的。如,在应用服务器集群10上部署的业务***为淘宝交易***时,数据的标识可以为商品的唯一标识(identifier,ID),而在应用服务器集群10上部署的业务***为支付宝账户***时,上述数据的标识可以为用户的ID(user_id)。
图1中的远程存储服务器20可以包括控制单元201(也称控制中心)和存储单元202(也称数据中心),控制单元201用于记录与远程存储服务器已建立连接的应用服务器的地址,并用于记录远程存储服务器与该应用服务器的通讯通道的通道标识。在一个例子中,上述地址与通道标识可以对应存储。存储单元202用于存储应用服务器发送的数据,其可以是指内存也可以是指外存,当存储单元202为外存时,该外存可以为磁盘等。可以理解的是,存储单元202中的数据也可以是以键值对的形式存储的。
图2为本申请一种实施例提供的数据存储方法流程图。所述方法的执行主体可以为具有处理能力的设备:服务器或者***或者装置,如图1中的应用服务器。如图2所示,所述方法具体可以包括:
步骤210,第一应用服务器确定待写入数据。
此处的第一应用服务器可以为用于部署同一业务***的应用服务器集群中的任一应用服务器。如,可以为用于部署淘宝交易***的应用服务器集群中的任一应用服务器,也可以为用于部署支付宝账户***的应用服务器集群中的任一应用服务器。
步骤210中,第一应用服务器可以通过两种方式来确定待写入数据:第一种方式是,第一应用服务器想要提高某一数据的访问效率,则可以将该数据确定为待写入数据。第二种方式是,第一应用服务器接收调用方的写数据请求,该写数据请求包括请求写入的数据,则可以将该请求写入的数据确定为待写入数据。
可选地,在确定待写入数据之后,还可以确定该待写入数据的标识。在一个例子中,第一应用服务器可以根据业务最常用的使用条件来确定上述标识。如,在应用服务器集群10上部署的业务***为淘宝交易***时,则确定的待写入数据的标识可以为商品的ID,而在应用服务器集群10上部署的业务***为支付宝账户***时,则确定的待写入数据的标识可以为用户的ID。
步骤220,将待写入数据存储到本地缓存中。
此处的本地缓存可以是指第一应用服务器的内存。
可选地,本地缓存中的数据可以是存储在队列中的。在本地缓存中的数据是存储在队列中时,第一应用服务器在将待写入数据存储到本地缓存之前,可以先判断队列的长度是否超过预设阈值,若未超过预设阈值,则直接将待写入数据存储到所述队列的尾部;而若超过预设阈值,则可以按照预设的数据移除算法,对队列中的数据进行移除,比如,按照先进先出(First In FirstOut,FIFO)算法,对队列中的数据进行移除,之后将待写入数据存储到移除数据后的队列中。
当然,在实际应用中,第一应用服务器也可以通过其它的方式来维护内存的队列,本申请对此不作限定。如,第一应用服务器可以周期性判断队列中的数据是否超过时间阈值,若超过时间阈值,则将该数据移除。
需要说明的是,在还确定待写入数据的标识的情况下,第一应用服务器还可以将该标识也存储到本地缓存的队列中。在一个例子中,可以将待写入数据的标识以及待写入数据以键值对的形式存储到本地缓存的队列中。如,<KEY,DATA>,其中,KEY是指待写入数据的标识,DATA是指待写入数据。
步骤230,向远程存储服务器发送第一远程调用请求。
其中,第一远程调用请求可以包括待写入数据,第一远程调用请求用于指示远程存储服务器将待写入数据存储到远程存储服务器对应的存储单元中。
需要说明的是,在还确定待写入数据的标识的情况下,第一应用服务器还可以将该标识发送给远程存储服务器,从而远程存储服务器可以将该标识以及待写入数据以键值对的形式存储到对应的存储单元中。在一个例子中,上述第一远程调用请求可以为:put(keyi,datai),其中,keyi为待写入数据的标识,datai为待写入数据。
可选地,上述第一远程调用请求还可以包括第一应用服务器的地址(如,IP)。在第一远程调用请求还包括第一应用服务器的地址时,远程存储服务器在接收到第一远程调用请求之后,可以根据该地址,从控制单元中查找第一应用服务器,若查找到,则将待写入数据或者待写入数据以及标识存储到存储单元中;若未查找到,则远程存储服务器可以尝试与第一应用服务器建立通讯通道,并为该通讯通道分配通道标识,之后在控制单元中记录上述地址与通道标识的对应关系,此外,还可以单独记录上述地址。在一个例子中,控制单元中记录的地址可以为:[IP1,IP2,IP3,…,IPN],而控制单元中记录的地址与通道标识的对应关系可以为:<IP1,通道标识1>,<IP2,通道标识2>,…,<IPM,通道标识M>。在单独记录上述地址或者记录上述地址与通道标识的对应关系之后,远程存储服务器可以将待写入数据或者待写入数据以及标识存储到存储单元中。
综上,由于本申请将待写入数据存储到了远程存储服务器中,而该远程存储服务器可以被整个应用服务器集群所访问,由此,可以提高整个应用服务器集群的数据的访问效率。此外,本申请还将待写入数据存储到了本地缓存中,当应用服务器集群中的应用服务器在读取数据时,首先会从本地缓存中查找该数据,在查找不到的情况下,才从远程存储服务器中查找,由此可以避免当应用服务器集群中同时有多个应用服务器访问同一数据时,造成的数据热点问题。
当执行完成上述步骤210-步骤230之后;或者,依照第一应用服务器在本地缓存以及远程存储服务器中存储数据的方式,当应用服务器集群中的其它应用服务器在本地缓存以及远程存储服务器的存储单元中以键值对的形式存储数据以及对应的标识之后,本申请的实施例还可以包括如下步骤:
步骤A:接收调用方发送的读数据请求。
此处,可以是由第一应用服务器接收调用方发送的读数据请求,该读数据请求可以包括待读取数据的第一标识。
步骤B:根据第一标识,从本地缓存中查找待读取数据。
如,可以根据第一标识,从本地缓存的队列中查找待读取数据。
步骤C:若查找到待读取数据,将该读取数据返回给调用方。
由此,可以提高第一应用服务器的数据的访问效率。
步骤D:若未查找到待读取数据,则向远程存储服务器发送第二远程调用请求。
其中,第二远程调用请求可以包括第一标识,第二远程调用请求用于指示远程存储服务器根据第一标识,从存储单元中查找待读取数据。
具体地,远程存储服务器在接收到第二远程调用请求之后,可以根据第二远程调用请求中的第二标识,从存储单元中查找待读取数据,若未查找到待读取数据,则直接向第一应用服务器返回用于表示查找失败的消息,再由第一应用服务器将该用于表示查找失败的消息转发给调用方。若查找到待读取数据,则远程存储服务器将该待读取数据返回给第一应用服务器。
步骤E:接收远程存储服务器发送的待读取数据。
步骤F:将待读取数据存储到本地缓存中,并向调用方返回待读取数据。
第一应用服务器在接收到待读取数据之后,首先将该待读取数据或者待读取数据以及第二标识存储到本地缓存中,以便当该待读取数据被再次访问时,可以直接从本地缓存中获取到。在本地缓存中存储待读取数据之后,第一应用服务器可以将该待读取数据返回给调用方。
可选地,上述第二远程调用请求还可以包括第一应用服务器的地址。在第二远程调用请求还包括第一应用服务器的地址时,远程存储服务器在执行从存储单元中查找待读取数据之前,先执行在控制单元中查找第一应用服务器的步骤,并在查找不到的情况下,执行记录第一应用服务器的地址、建立与第一应用服务器的通讯通道、分配通道标识以及记录地址与通道标识的对应关系的步骤,其具体执行过程同上所述,在此不复赘述。在执行上述步骤之后,再执行根据第二标识,从存储单元中查找待读取数据的步骤。
由上述步骤A-步骤F可以看出,本申请中,当应用服务器集群中的应用服务器在读取数据时,首先会从本地缓存中查找该数据,在查找不到的情况下,才从远程存储服务器中查找,由此可以避免当应用服务器集群中同时有多个应用服务器访问同一数据时,造成的数据热点问题。
当执行完成上述步骤210-步骤230之后;或者,执行完成上述步骤A-步骤F之后;或者,依照第一应用服务器在本地缓存以及远程存储服务器中存储数据的方式,当应用服务器集群中的其它应用服务器在本地缓存以及远程存储服务器的存储单元中以键值对的形式存储数据以及对应的标识之后,本申请的实施例还可以包括如下步骤:
步骤X:确定待删除数据的第二标识。
此处,可以是由第一应用服务器确定待删除数据的第二标识。在一个例子中,当确定相同的标识对应的两个数据不一致时,则将已存储的该标识对应的数据确定为待删除数据。如,假设已存储的数据为:<key1,data1>,而新获取的数据为:<key1,data2>,则data1为待删除数据。
步骤Y:根据第二标识,从本地缓存中查找待删除数据,并删除待删除数据。
需要说明的是,当本地缓存中以键值对的形式存储了待删除数据以及第二标识时,直接删除该键值对,如,删除<key1,data1>。
步骤Z:向远程存储服务器发送第三远程调用请求。
其中,第三远程调用请求可以包括第二标识。在一个例子中,第三远程调用请求可以为:delete(keyj,dataj),其中,keyj为待删除数据的标识,datai为待删除数据。
远程存储服务器在接收到第三调用请求之后,可以根据第二标识,从存储单元中查找并删除待删除数据。此处,当存储单元中以键值对的形式存储了待删除数据以及第二标识时,直接删除该键值对。
在删除待删除数据之后,在控制单元中有已记录的地址以及通道标识的对应关系的情况下,远程存储服务器从控制单元中获取应用服务器集群中与远程存储服务器已建立连接的其它应用服务器的地址,并获取该地址对应的通道标识。之后,通过通道标识对应的通讯通道向其它应用服务器发送指示消息,该指示消息用于指示其它应用服务器从对应的本地缓存中查找并删除待删除数据。举例来说,假设图1中,应用服务器101以及应用服务器102均与远程存储服务器建立了连接,且远程存储服务器的控制单元的内容如下:[IP1,IP2];<IP1,通道标识1>,<IP2,通道标识2>。当图1中的应用服务器101向远程存储服务器发送第三调用请求时,远程存储服务器在根据第三远程调用请求删除待删除数据之后,因为获取到应用服务器102与远程存储服务器建立了连接,所以可以从控制单元中获取与应用服务器102对应的通道标识:通道标识2,并通过通道标识2对应的通讯通道向应用服务器102发送指示消息,该指示消息可以包括第二标识。应用服务器102在接收到指示消息之后,根据第二标识,从本地缓存中查找并删除待删除数据。
通过上述步骤X-步骤Z就实现了应用服务器的本地缓存与远程存储服务器间的同步通讯机制,由此可以保证两者之间数据的一致性。
图3为本申请另一种实施例提供的数据存储方法流程图。所述方法的执行主体可以为具有处理能力的设备:服务器或者***或者装置,如图1中的远程存储服务器。如图3所示,所述方法具体可以包括:
步骤310,远程存储服务器接收第一应用服务器在将待写入数据存储到本地缓存之后发送的第一远程调用请求。
此处的第一应用服务器为用于部署同一业务***的应用服务器集群中的任一应用服务器。上述第一远程调用请求可以包括待写入数据,此外,还可以包括待写入数据的标识。
需要说明的是,上述第一应用服务器将待写入数据存储到本地缓存可以是指:第一应用服务器将待写入数据存储到本地缓存的队列中。在第一应用服务器将待写入数据存储到本地缓存的队列之前,可以先判断队列的长度是否超过预设阈值,若未超过预设阈值,则直接将待写入数据存储到所述队列的尾部;而若超过预设阈值,则可以按照预设的数据移除算法,对队列中的数据进行移除,之后将待写入数据存储到移除数据后的队列中。
还需要说明的是,在第一远程调用请求还包括待写入数据的标识时,第一应用服务器还可以将该标识也存储到本地缓存的队列中。在一个例子中,可以将待写入数据的标识以及待写入数据以键值对的形式存储到本地缓存的队列中。
步骤320,根据第一远程调用请求,将待写入数据存储到远程存储服务器对应的存储单元中。
在第一远程调用请求还包括待写入数据的标识时,第一应用服务器还可以将该标识发送给远程存储服务器,从而远程存储服务器可以将该标识以及待写入数据以键值对的形式存储到对应的存储单元中。
可选地,上述第一远程调用请求还可以包括第一应用服务器的地址(如,IP)。在第一远程调用请求还包括第一应用服务器的地址时,远程存储服务器在接收到第一远程调用请求之后,可以根据该地址,从控制单元中查找第一应用服务器,若查找到,则将待写入数据或者待写入数据以及标识存储到存储单元中;若未查找到,则远程存储服务器可以尝试与第一应用服务器建立通讯通道,并为该通讯通道分配通道标识,之后在控制单元中记录上述地址与通道标识的对应关系,此外,还可以单独记录上述地址。在单独记录上述地址或者记录上述地址与通道标识的对应关系之后,远程存储服务器可以将待写入数据或者待写入数据以及标识存储到存储单元中。
当执行完成上述步骤310-步骤320之后,本申请的实施例还可以包括如下步骤:
步骤a,接收第一应用服务器在根据调用方发送的待读取数据的第一标识,从本地缓存中未查找到待读取数据时发送的第二远程调用请求。
此处的第二远程调用请求可以包括第一标识。
步骤b,根据第一标识,从存储单元中查找待读取数据。
步骤c:若未查找到待读取数据,则直接向第一应用服务器返回用于表示查找失败的消息。
之后,第一应用服务器将该用于表示查找失败的消息转发给调用方。
步骤d:若查找到待读取数据,则向第一应用服务器返回待读取数据,以用于第一应用服务器将待读取数据存储到本地缓存中,并向调用方返回待读取数据。
第一应用服务器在接收到待读取数据之后,首先将该待读取数据或者待读取数据以及第二标识存储到本地缓存中,以便当该待读取数据被再次访问时,可以直接从本地缓存中获取到。在本地缓存中存储待读取数据之后,第一应用服务器可以将该待读取数据返回给调用方。
可选地,上述第二远程调用请求还可以包括第一应用服务器的地址。在第二远程调用请求还包括第一应用服务器的地址时,远程存储服务器在执行从存储单元中查找待读取数据之前,先执行在控制单元中查找第一应用服务器的步骤,并在查找不到的情况下,执行记录第一应用服务器的地址、建立与第一应用服务器的通讯通道、分配通道标识以及记录地址与通道标识的对应关系的步骤,其具体执行过程同上所述,在此不复赘述。在执行上述步骤之后,再执行根据第二标识,从存储单元中查找待读取数据的步骤。
当执行完成上述步骤310-步骤320之后;或者,执行完成上述步骤a-步骤d之后,本申请的实施例还可以包括如下步骤:
步骤w:接收第一应用服务器在根据待删除数据的第二标识,从本地缓存中查找并删除待删除数据之后发送的第三远程调用请求。
此处的第三远程调用请求可以包括第二标识。
需要说明的是,当本地缓存中以键值对的形式存储了待删除数据以及第二标识时,第一应用服务器直接删除该键值对。
步骤x:根据第二标识,从存储单元中查找并删除待删除数据。
远程存储服务器在接收到第三调用请求之后,可以根据第二标识,从存储单元中查找并删除待删除数据。此处,当存储单元中以键值对的形式存储了待删除数据以及第二标识时,直接删除该键值对。
步骤y:从控制单元中获取应用服务器集群中与远程存储服务器已建立连接的其它应用服务器的地址,并获取地址对应的通道标识。
在删除待删除数据之后,在控制单元中有已记录的地址以及通道标识的对应关系的情况下,远程存储服务器从控制单元中获取应用服务器集群中与远程存储服务器已建立连接的其它应用服务器的地址,并获取该地址对应的通道标识。
步骤z:通过通道标识对应的通讯通道向其它应用服务器发送指示消息.
该指示消息用于指示其它应用服务器从对应的本地缓存中查找并删除待删除数据。
通过上述步骤w-步骤z就实现了应用服务器的本地缓存与远程存储服务器间的同步通讯机制,由此可以保证两者之间数据的一致性。
与上述数据存储方法对应地,本申请实施例还提供的一种应用服务器,如图4所示,该应用服务器包括:
确定单元401,用于确定待写入数据。
存储单元402,用于将确定单元401确定的待写入数据存储到本地缓存中。
存储单元402具体可以用于:
判断本地缓存的队列的长度是否超过预设阈值;
若超过预设阈值,则按照预设的数据移除算法,对队列中的数据进行移除;
将待写入数据存储到移除数据后的队列中。
发送单元403,用于向远程存储服务器发送第一远程调用请求,该第一远程调用请求包括待写入数据,第一远程调用请求用于指示远程存储服务器将待写入数据存储到远程存储服务器中。
可选地,该应用服务器还可以还包括:
接收单元404,用于接收调用方发送的读数据请求,该读数据请求包括待读取数据的第一标识。
第一查找单元405,用于根据接收单元404接收的第一标识,从本地缓存中查找待读取数据。
发送单元403,还用于若第一查找单元405未查找到待读取数据,则向远程存储服务器发送第二远程调用请求,第二远程调用请求包括第一标识,第二远程调用请求用于指示远程存储服务器根据第一标识,查找待读取数据。
接收单元404,还用于接收远程存储服务器发送的待读取数据。
存储单元402,还用于将接收单元404接收的待读取数据存储到本地缓存中,并向调用方返回待读取数据。
可选地,该应用服务器还可以包括:第二查找单元407。
确定单元401,还用于确定待删除数据的第二标识。
第二查找到单元407,用于根据确定单元401确定的第二标识,从本地缓存中查找待删除数据,并删除待删除数据。
发送单元403,还用于向远程存储服务器发送第三远程调用请求,第三远程调用请求包括第二标识,第三远程调用请求用于指示远程存储服务器根据第二标识,查找并删除待删除数据,确定远程存储服务器与其它应用服务器之间的通讯通道,并通过通讯通道向其它服务器发送指示消息,指示消息用于指示其它应用服务器从对应的本地缓存中删除待删除数据,其它应用服务器是指应用服务器集群中与远程存储服务器已建立连接的应用服务器。
本申请实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本申请提供的装置的具体工作过程,在此不复赘述。
本申请实施例提供的应用服务器,确定单元401确定待写入数据。存储单元402将待写入数据存储到本地缓存中。发送单元403向远程存储服务器发送第一远程调用请求,该第一远程调用请求包括待写入数据,第一远程调用请求用于指示远程存储服务器将待写入数据存储到远程存储服务器中。由此,可以提高整个应用服务器集群的数据的访问效率。
与上述数据存储方法对应地,本申请实施例还提供的一种远程存储服务器,如图5所示,该远程存储服务器包括:
接收单元501,用于接收第一应用服务器在将待写入数据存储到本地缓存之后发送的第一远程调用请求,第一应用服务器为用于部署同一业务***的应用服务器集群中的任一应用服务器,第一远程调用请求包括待写入数据。
存储单元502,用于根据第一远程调用请求,存储待写入数据。
可选地,第一远程调用请求还包括第一应用服务器的地址。
存储单元502具体用于:
根据地址,从控制单元中查找第一应用服务器;
若查找到第一应用服务器,则存储待写入数据;
若未查找到第一应用服务器,则建立与第一应用服务器的通讯通道,为通讯通道分配通道标识,并在控制单元中记录地址与通道标识的对应关系,存储待写入数据。
可选地,该远程存储服务器还可以包括:第一查找单元503和发送单元504。
接收单元501,还用于接收第一应用服务器在根据调用方发送的待读取数据的第一标识,从本地缓存中未查找到待读取数据时发送的第二远程调用请求,第二远程调用请求包括第一标识。
第一查找单元503,用于根据接收单元501接收的第一标识,查找待读取数据。
发送单元504,用于若第一查找单元503查找到待读取数据,则向第一应用服务器返回待读取数据,以用于第一应用服务器将待读取数据存储到本地缓存中,并向调用方返回待读取数据。
可选地,第二远程调用请求还包括第一应用服务器的地址。
第一查找单元503具体用于:
根据地址,从控制单元中查找第一应用服务器;
若查找到第一应用服务器,则根据第一标识,查找待读取数据;
若未查找到第一应用服务器,则建立与第一应用服务器的通讯通道,为通讯通道分配通道标识,并在控制单元中记录地址与通道标识的对应关系,根据第一标识,查找待读取数据。
可选地,该远程存储服务器还可以包括:第二查找单元505和获取单元506。
接收单元501,还用于接收第一应用服务器在根据待删除数据的第二标识,从本地缓存中查找并删除待删除数据之后发送的第三远程调用请求,第三远程调用请求包括第二标识。
第二查找单元505,用于根据接收单元501接收的第二标识,查找并删除待删除数据。
获取单元506,用于从控制单元中获取应用服务器集群中与远程存储服务器已建立连接的其它应用服务器的地址,并获取地址对应的通道标识。
发送单元504,还用于通过获取单元506获取的通道标识对应的通讯通道向其它应用服务器发送指示消息,指示消息用于指示其它应用服务器从对应的本地缓存中查找并删除待删除数据。
本申请实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本申请提供的装置的具体工作过程,在此不复赘述。
本申请实施例提供的远程存储服务器,接收单元501接收第一应用服务器在将待写入数据存储到本地缓存之后发送的第一远程调用请求,第一应用服务器为用于部署同一业务***的应用服务器集群中的任一应用服务器,第一远程调用请求包括待写入数据。存储单元502根据第一远程调用请求,存储待写入数据。由此,可以避免现有技术的数据热点问题,从而可以提高远程存储服务器的性能。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。