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

数据读取方法和系统与流程

2021-10-23 01:22:00 来源:中国专利 TAG:读取 方法 数据 系统


1.本技术涉及存储领域,尤其涉及数据读取方法和系统。


背景技术:

2.随着科技的不断发展,人们对网络存储系统的性能要求越来越高。传统网络存储系统采用集中的存储服务器存放所有数据,使得存储服务器的性能成为系统性能的瓶颈,不能满足大规模存储应用的需要。因此,分布式存储系统应运而生,分布式存储系统指的是将数据分散存储在多台独立设备上,利用多台存储服务器分担存储负荷,利用元数据服务器定位存储数据的位置信息,与传统的网络存储系统相比,分布式存储系统不但提高了系统可靠性、可用性和存取效率,还易于扩展。
3.但是,分布式存储系统由于利用多台存储服务器分担存储负荷,需要利用元数据服务器定位存储数据的位置信息,因此每次用户使用客户端读取数据时,客户端和元数据服务器之间、元数据服务器和存储服务器之间、存储服务器和客户端之间都需要进行多次通信,产生了大量的通信开销,使得分布式系统的数据读取速度受到限制。


技术实现要素:

4.本技术提供了数据读取方法和系统,用于解决上述分布式系统数据读取速度受到限制的问题。
5.第一方面,提供了一种数据读取方法,应用于存储系统,该存储系统包括元数据服务器以及存储服务器,该方法包括:
6.元数据服务器接收客户端发送的数据读取请求,其中,该数据读取请求用于读取存储服务器中的待读取数据;
7.元数据服务器根据该数据读取请求,获得待读取数据的位置信息;
8.元数据服务器向存储服务器发送位置信息以请求数据;
9.存储服务器根据所述位置信息获取待读取数据;
10.存储服务器将待读取数据发送至客户端。
11.可以理解的,上述数据读取过程中,客户端、元数据服务器以及存储服务器之间的数据交互次数只有3次,客户端和元数据服务器之间只需要一次通信,元数据服务器和存储服务器之间只需要一次通信,存储服务器和客户端之间只需要一次通信,使得数据读取过程中的传输开销大大减少,数据读取速度得到提升。
12.在一实施例中,数据读取请求包括客户端内存的地址信息,存储服务器包括远程直接数据存取网卡rnic和存储介质,存储服务器根据位置信息获取待读取数据包括:存储服务器的rnic根据位置信息,从存储介质中获取待读取数据;存储服务器将待读取数据发送至客户端包括:存储服务器的rnic根据客户端内存的地址信息,通过远程直接数据存取rdma方法,将待读取数据写入与地址信息对应的客户端内存中。
13.可以理解的,存储服务器的rnic具体可以通过rdma单边写操作,将待读取数据写
入客户端内存中,rdma单边写操作只需要发送端明确信息的源和目的地址,接收端不需要感知此次通信,数据的写入通过rdma在rnic和客户端内存(buffer)之间完成,客户端无需再额外分出资源处理收发流程,使得客户端的资源占用大大减少,降低了客户端实现复杂度,客户端性能要求降低,进而使得本技术提供的方法适用场景更加广泛。
14.在一实施例中,位置信息包括待读取数据的多个副本数据的位置信息,元数据服务器向存储服务器发送位置信息以请求数据包括:元数据服务器向多个副本数据中的一个副本数据的位置信息对应的存储服务器,发送多个副本数据中的一个副本数据的位置信息以请求数据。可以理解的,如果存储系统使用副本策略进行数据存储,由于存储磁盘粒度需要对齐、数据被分区打散的缘故,元数据服务器在确定了待读取数据的位置信息后,需要从待读取数据的多个副本数据中确定可以被读取的有效数据,然后将有效的副本数据的位置信息向客户端110返回,该元数据只对应一台指定存储服务器。其中,有效数据可以是在多个副本数据中随机选择的一个完好的副本数据,如果客户端a恰好处于某个存储服务器上,那么有效数据还可以是存储于客户端a所在存储服务器的副本数据,本技术不作具体限定。
15.需要说明的,元数据服务器向存储服务器发送位置信息以请求数据时,也可以通过向存储服务器发送副本数据的读取请求的方式以请求数据,该副本数据的读取请求可以是对客户端发送的数据读取请求中的部分参数进行修改并重新封装后获得的,比如客户端发送的数据读取请求包括源地址、数据长度和待读取数据的数据id等等,元数据服务器在获得副本数据中的有效数据的位置信息之后,可以将数据读取请求中的数据长度由客户需求的待读取数据的长度修改为有效数据的长度,然后将待读取数据的数据id替换为有效数据的位置信息,从而获得该副本数据的读取请求,然后将该副本数据的读取请求发送给存储服务器。可以理解的,副本数据的数据读取请求还可以是使用其他方式对客户端发送的数据请求进行修改和封装后获得的,本技术不对获得副本数据的数据读取请求的具体方式进行限定。
16.在一实施例中,位置信息包括待读取数据的多个分片数据的位置信息,元数据服务器向存储服务器发送位置信息以请求数据包括:元数据服务器向多个分片数据中的每个分片数据的位置信息对应的存储服务器发送分片数据的位置信息,以获取分片数据;存储服务器根据位置信息获取待读取数据包括:存储服务器根据分片数据的位置信息,获取分片数据;存储服务器将待读取数据发送至客户端包括:存储服务器将分片数据发送至客户端,使得客户端根据接收到的多个分片数据,获得待读取数据。
17.可以理解的,如果存储系统使用纠删码(erasure coding,ec)策略进行数据存储,将会有多个存储服务器(多个分片数据对应的多个存储服务器)接收到分片数据的位置信息,多个存储服务器只能读取到待读取数据的多个分片数据,而无法直接读取到所述待读取数据,因此元数据服务器可以将每一个分片数据的位置信息发给对应的存储服务器,以供其读取分片数据,然后将读取得到的分片数据写入客户端的内存中。本技术实施例中元数据服务器只负责查询待存储数据的位置信息,以及确认多个副本数据中的有效数据这两个步骤,而无需额外处理如ec反编码等操作,使得元数据服务器的处理压力大大减少,元数据服务器出现故障并不会对整个数据读取流程造成过多影响,同时也减少了元数据服务器的业务逻辑的复杂度,提高元数据服务器的处理效率。
18.需要说明的,元数据服务器向存储服务器发送位置信息以请求数据时,也可以通
过向存储服务器发送分片数据的读取请求的方式以请求数据,该分片数据的读取请求可以是对客户端发送的数据读取请求中的部分参数进行修改并重新封装后获得的,比如客户端发送的数据读取请求包括源地址、数据长度和待读取数据的数据id等等,元数据服务器在获得多个分片数据的位置信息之后,可以将数据读取请求中的数据长度由客户需求的待读取数据的长度修改为分片数据的长度,然后将待读取数据的数据id替换为分片数据的位置信息,从而获得每一个分片数据的读取请求,然后将该分片数据的读取请求发送给对应的存储服务器。可以理解的,分片数据的数据读取请求还可以是使用其他方式对客户端发送的数据请求进行修改和封装后获得的,本技术不对获得分片数据的数据读取请求的具体方式进行限定。
19.在一实施例中,该存储服务器的rnic根据该位置信息,从该存储介质中获取该待读取数据包括:该存储服务器的rnic根据该位置信息,从该存储介质中读取该位置信息对应的存储数据;该存储服务器的rnic对该存储数据进行解压缩和解压紧操作,获得该待读取数据。
20.可以理解的,存储服务器存储的数据一般是按照粒度对齐处理的数据,比如按照512b粒度对齐的数据,并且,为了降低存储成本,存储服务器中的存储数据一般会经过数据压缩和数据压紧的操作,因此存储服务器的rnic在读取到存储介质中的存储数据之后,可以对存储数据进行数据解压缩和解压紧的操作,从而获得待读取数据。由存储服务器的rnic进行数据解压缩和解压紧的操作,可以减少客户端和元数据服务器的资源占用,使得客户端和元数据服务器的处理效率提高,客户端和元数据服务器性能要求降低,进而使得本技术提供的方法的适用场景更加广泛。
21.具体实现中,对于使用ec策略进行数据存储的存储系统来说,存储数据被分为多个分片数据,存储在不同的存储服务器中,而每个用户真正想要读取的数据可能只是每个被分片的原始数据的一部分,举例来说,被分片存储的原始数据a的长度总共有12k,以2个4k的数据块和1个4k校验块的形式存储在存储系统中,但是用户只想读取的数据a0只是被分片存储的原始数据a的前2k内容。因此在步骤s420处,元数据服务器还可以先确认用户的待读取数据a0所在的被分片的原始数据a的位置信息,然后将待读取数据a0与该原始数据a之间的对应关系(即待读取数据在该原始数据的哪一部分,比如前2k,中间2k-4k,后4k等等)放入位置信息,然后将其传输至存储服务器。步骤s440处,存储服务器的rnic可以将原始数据a的全部分片数据写入客户端内存中,并将用户的待读取数据a0与原始数据a的对应关系同时发送给客户端,仍以前述例子为例,此时存储服务器可以将2个4k的数据块和1个4k校验块写入客户端的内存中,并将用户实际需要读取的数据a0与原始数据a的对应关系(即待读取数据是数据a的前2k)一同发送给客户端,客户端收到完整的12k数据后,先通过ec反编码计算出原始数据a0,然后摘取原始数据a的前2k返回给用户。可以理解的,本技术通过将用户的待读取数据与被分片的原始数据的对应关系进行映射,结合rdma单边写入的技术,使得客户端只需要对分片数据进行ec反编码,而无需再额外分出资源处理收发流程,使得客户端的资源占用大大减少,降低了客户端实现复杂度,客户端性能要求降低,进而使得本技术提供的方法适用场景更加广泛。
22.第二方面,提供了一种数据读取方法,应用于存储系统,该存储系统包括元数据服务器以及存储服务器,该方法包括:
23.该元数据服务器接收客户端发送的数据读取请求,该数据读取请求用于读取该存储服务器中的待读取数据;
24.该元数据服务器根据该数据读取请求,获得该待读取数据的位置信息;
25.该元数据服务器根据该位置信息,向该位置信息对应的存储服务器发送该数据读取请求和该位置信息,使得该存储服务器根据该数据读取请求和该位置信息,获取该待读取数据,并将该待读取数据写入该客户端的内存中。
26.可以理解的,使用本技术提供的元数据服务,在存储系统中进行数据读取时,客户端元数据服务器以及存储服务器之间的数据交互次数只有3次,包括2次读取请求的传输和1次数据传输,传输开销大大减少,数据读取速度大大提升。
27.在一实施例中,该位置信息包括该待读取数据的多个副本数据的位置信息,该元数据服务器根据该位置信息,向该待读取数据对应的存储服务器发送该数据读取请求和该位置信息包括:该元数据服务器确定该多个副本数据中的一个有效数据;该元数据服务器向该有效数据的位置信息对应的存储服务器发送该数据读取请求和该位置信息。
28.可以理解的,如果存储系统使用副本策略进行数据存储,由于存储磁盘粒度需要对齐、数据被分区打散的缘故,元数据服务器在确定了待读取数据的位置信息后,需要从待读取数据的多个副本数据中确定可以被读取的有效数据,然后将有效的副本数据的位置信息向客户端110返回,该元数据只对应一台指定存储服务器。其中,有效数据可以是在多个副本数据中随机选择的一个完好的副本数据,如果客户端a恰好处于某个存储服务器上,那么有效数据还可以是存储于客户端a所在存储服务器的副本数据,本技术不作具体限定。
29.在一实施例中,该位置信息包括该待读取数据的多个分片数据的位置信息,该元数据服务器根据该位置信息,向该待读取数据对应的存储服务器发送该数据读取请求和该位置信息包括:该元数据服务器根据该位置信息,向该多个分片数据的位置信息对应的多个存储服务器发送该数据读取请求和该位置信息,使得该存储服务器根据该数据读取请求,获取该多个分片数据,并将该分片数据写入该客户端的内存中,以供客户端根据该多个分片数据,获得该待读取数据,其中,一个该分片数据的位置信息对应一个存储服务器。
30.可以理解的,如果存储系统使用纠删码(erasure coding,ec)策略进行数据存储,将会有多个存储服务器(多个分片数据对应的多个存储服务器)接收到数据读取请求和位置信息,多个存储服务器只能读取到待读取数据的多个分片数据,而无法直接读取到所述待读取数据,因此元数据服务器可以将数据读取请求和位置信息发给每一个分片数据对应的存储服务器,以供其读取分片数据,然后将读取得到的分片数据写入客户端的内存中。本技术实施例中元数据服务器只负责查询待存储数据的位置信息,以及确认多个副本数据中的有效数据这两个步骤,而无需额外处理如ec反编码等操作,使得元数据服务器的处理压力大大减少,元数据服务器出现故障并不会对整个数据读取流程造成过多影响,同时也减少了元数据服务器的业务逻辑的复杂度,提高元数据服务器的处理效率。
31.上述实施例中,元数据服务器只负责根据客户端发送的数据读取请求进行位置信息的查询,以及确认多个副本数据中的有效数据这两个步骤,而无需额外处理如ec反编码等操作,使得元数据服务器的处理压力大大减少,元数据服务器出现故障并不会对整个数据读取流程造成过多影响,同时也减少了元数据服务器的业务逻辑的复杂度,提高元数据服务器的处理效率。
32.第三方面,提供了一种数据读取方法,应用于存储系统,该存储系统包括元数据服务器以及存储服务器,该方法包括:
33.该存储服务器接收元数据服务器发送的数据读取请求和位置信息,其中,该数据读取请求是该元数据服务器接收的客户端发送的数据读取请求,该位置信息是该元数据服务器根据该数据读取请求获得的待读取数据的位置信息;
34.该存储服务器根据该数据读取请求和该位置信息,获取该待读取数据;
35.该存储服务器将该待读取数据写入该客户端的内存中。
36.可以理解的,使用本技术提供的存储服务器,在存储系统中进行数据读取时,客户端、元数据服务器以及存储服务器之间的数据交互次数只有3次,包括2次读取请求的传输和1次数据传输,传输开销大大减少,数据读取速度大大提升。
37.在一实施例中,该数据读取请求包括该客户端内存的地址信息,该存储服务器包括远程直接数据存取网卡rnic和存储介质,该存储服务器根据该数据读取请求和该位置信息,获取该待读取数据包括:该存储服务器的rnic根据该数据读取请求和该位置信息,从该存储介质中获取该待读取数据;该存储服务器将该待读取数据写入该客户端的内存中包括:该存储服务器的rnic根据该客户端内存的地址信息,通过远程直接数据存取rdma单边写入方法,将该待读取数据写入与该地址信息对应的客户端内存中。
38.可以理解的,rdma单边写操作只需要发送端明确信息的源和目的地址,接收端不需要感知此次通信,数据的写入通过rdma在rnic和客户端内存(buffer)之间完成,客户端无需再额外分出资源处理收发流程,使得客户端的资源占用大大减少,降低了客户端实现复杂度,客户端性能要求降低,进而使得本技术提供的方法适用场景更加广泛。
39.在一实施例中,该位置信息是该待读取数据的多个副本数据中的一个有效数据的位置信息。
40.可以理解的,如果存储系统使用副本策略进行数据存储,由于存储磁盘粒度需要对齐、数据被分区打散的缘故,元数据服务器在确定了待读取数据的位置信息后,需要从待读取数据的多个副本数据中确定可以被读取的有效数据,然后将有效的副本数据的位置信息向客户端110返回,该元数据只对应一台指定存储服务器。其中,有效数据可以是在多个副本数据中随机选择的一个完好的副本数据,如果客户端a恰好处于某个存储服务器上,那么有效数据还可以是存储于客户端a所在存储服务器的副本数据,本技术不作具体限定。
41.在一实施例中,该位置信息是该待读取数据的多个分片数据的位置信息,其中,一个分片数据的位置信息对应一个存储服务器,该存储服务器根据该数据读取请求和该位置信息,获取该待读取数据包括:该存储服务器根据该数据读取请求,获取分片数据;该存储服务器将该待读取数据写入该客户端的内存中包括:该存储服务器将该分片数据写入该客户端的内存中,使得该客户端根据多个存储服务器写入的多个分片数据,获得该待读取数据。
42.可以理解的,如果存储系统使用纠删码(erasure coding,ec)策略进行数据存储,将会有多个存储服务器(多个分片数据对应的多个存储服务器)接收到数据读取请求和位置信息,多个存储服务器只能读取到待读取数据的多个分片数据,而无法直接读取到所述待读取数据,因此元数据服务器可以将数据读取请求和位置信息发给每一个分片数据对应的存储服务器,以供其读取分片数据,然后将读取得到的分片数据写入客户端的内存中。本
申请实施例中元数据服务器只负责查询待存储数据的位置信息,以及确认多个副本数据中的有效数据这两个步骤,而无需额外处理如ec反编码等操作,使得元数据服务器的处理压力大大减少,元数据服务器出现故障并不会对整个数据读取流程造成过多影响,同时也减少了元数据服务器的业务逻辑的复杂度,提高元数据服务器的处理效率。
43.在一实施例中,该存储服务器的rnic根据该数据读取请求和该位置信息,从该存储介质中获取该待读取数据包括:该存储服务器的rnic根据该数据读取请求和该位置信息,从该存储介质中读取该位置信息对应的存储数据;该存储服务器的rnic对该存储数据进行解压缩和解压紧操作,获得该待读取数据。
44.可以理解的,存储服务器存储的数据一般是按照粒度对齐处理的数据,比如按照512b粒度对齐的数据,并且,为了降低存储成本,存储服务器中的存储数据一般会经过数据压缩和数据压紧的操作,因此存储服务器的rnic在读取到存储介质中的存储数据之后,可以对存储数据进行数据解压缩和解压紧的操作,从而获得待读取数据。由存储服务器的rnic进行数据解压缩和解压紧的操作,可以减少客户端和元数据服务器的资源占用,使得客户端和元数据服务器的处理效率提高,客户端和元数据服务器性能要求降低,进而使得本技术提供的方法的适用场景更加广泛。
45.第四方面,提供了一种元数据服务器,应用于存储系统,该存储系统包括元数据服务器以及存储服务器,该元数据服务器包括:
46.接收单元,用于接收客户端发送的数据读取请求,该数据读取请求用于读取该存储服务器中的待读取数据;
47.获取单元,用于根据该数据读取请求,获得该待读取数据的位置信息;
48.发送单元,用于根据该位置信息,向该位置信息对应的存储服务器发送该数据读取请求和该位置信息,使得该存储服务器根据该数据读取请求和该位置信息,获取该待读取数据,并将该待读取数据写入该客户端的内存中。
49.在一实施例中,该位置信息包括该待读取数据的多个副本数据的位置信息,该发送单元,用于确定该多个副本数据中的一个有效数据;该发送单元,用于向该有效数据的位置信息对应的存储服务器发送该数据读取请求和该位置信息。
50.在一实施例中,该位置信息包括该待读取数据的多个分片数据的位置信息,该发送单元,用于根据该位置信息,向该多个分片数据的位置信息对应的多个存储服务器发送该数据读取请求和该位置信息,使得该存储服务器根据该数据读取请求,获取该多个分片数据,并将该分片数据写入该客户端的内存中,以供客户端根据该多个分片数据,获得该待读取数据,其中,一个该分片数据的位置信息对应一个存储服务器。
51.第五方面,提供了一种存储服务器,应用于存储系统,该存储系统包括元数据服务器以及存储服务器,该存储服务器包括:
52.接收单元,用于接收元数据服务器发送的数据读取请求和位置信息,其中,该数据读取请求是该元数据服务器接收的客户端发送的数据读取请求,该位置信息是该元数据服务器根据该数据读取请求获得的待读取数据的位置信息;
53.获取单元,用于根据该数据读取请求和该位置信息,获取该待读取数据;
54.写入单元,用于将该待读取数据写入该客户端的内存中。
55.在一实施例中,该数据读取请求包括该客户端内存的地址信息,该存储服务器包
括远程直接数据存取网卡rnic和存储介质,该获取单元,用于根据该数据读取请求和该位置信息,通过该rnic从该存储介质中获取该待读取数据;该写入单元,用于根据该客户端内存的地址信息,通过该rnic使用远程直接数据存取rdma单边写入方法,将该待读取数据写入与该地址信息对应的客户端内存中。
56.在一实施例中,该位置信息是该待读取数据的多个副本数据中的一个有效数据的位置信息。
57.在一实施例中,该位置信息是该待读取数据的多个分片数据的位置信息,其中,一个分片数据的位置信息对应一个存储服务器,该获取单元,用于根据该数据读取请求,获取分片数据;该写入单元,用于将该分片数据写入该客户端的内存中,使得该客户端根据多个存储服务器写入的多个分片数据,获得该待读取数据。
58.在一实施例中,该获取单元,用于根据该数据读取请求和该位置信息,通过该rnic从该存储介质中读取该位置信息对应的存储数据;该获取单元,用于通过该rnic对该存储数据进行解压缩和解压紧操作,获得该待读取数据。
59.第六方面,提供了一种数据读取系统,包括:
60.元数据服务器,用于接收客户端发送的数据读取请求,其中,所述数据读取请求用于读取所述存储服务器中的待读取数据;
61.所述元数据服务器,还用于根据所述数据读取请求,获得所述待读取数据的位置信息;
62.所述元数据服务器,还用于向所述存储服务器发送所述位置信息以请求数据;
63.存储服务器,用于根据所述位置信息获取所述待读取数据;
64.所述存储服务器,还用于将所述待读取数据发送至所述客户端。
65.在一实施例中,所述数据读取请求包括所述客户端内存的地址信息,所述存储服务器包括远程直接数据存取网卡rnic和存储介质,所述存储服务器的所述rnic用于根据所述位置信息,从所述存储介质中获取所述待读取数据;所述存储服务器的所述rnic用于根据所述客户端内存的地址信息,通过远程直接数据存取rdma方法,将所述待读取数据写入与所述地址信息对应的客户端内存中。
66.在一实施例中,所述位置信息包括所述待读取数据的多个副本数据的位置信息,所述元数据服务器用于向所述多个副本数据中的一个副本数据的位置信息对应的存储服务器,发送所述多个副本数据中的一个副本数据的位置信息以请求数据。
67.在一实施例中,所述位置信息包括所述待读取数据的多个分片数据的位置信息,所述元数据服务器用于向所述多个分片数据中的每个分片数据的位置信息对应的存储服务器发送所述分片数据的位置信息,以获取所述分片数据;所述存储服务器用于根据所述分片数据的位置信息,获取所述分片数据;所述存储服务器用于将所述分片数据发送至所述客户端,使得所述客户端根据接收到的多个分片数据,获得所述待读取数据。
68.在一实施例中,所述存储服务器的所述rnic用于根据所述位置信息,从所述存储介质中读取所述位置信息对应的存储数据;所述存储服务器的所述rnic用于对所述存储数据进行解压缩和解压紧操作,获得所述待读取数据。
69.第七方面,提供了一种计算机程序产品,当所述计算机程序产品被计算设备读取并执行时,实现如第一方面、第二方面以及第三方面描述的方法。
70.第八方面,提供了一种计算机非瞬态存储介质,包括指令,当所述指令在计算设备上运行时,使得所述计算设备实现如第一方面、第二方面以及第三方面描述的方法。
71.第九方面,提供了一种电子设备,包括处理器和存储器,所述处理器执行所述存储器中的代码时,实现如第一方面、第二方面以及第三方面描述的方法。
附图说明
72.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
73.图1是一种存储系统的结构示意图;
74.图2是一种数据读取方法的流程示意图;
75.图3是另一种数据读取方法的流程示意图;
76.图4是本技术提供的一种数据读取方法的流程示意图;
77.图5是本技术提供的一种数据读取方法在一应用场景下的流程示意图;
78.图6是本技术提供的一种元数据服务器的结构示意图;
79.图7是本技术提供的一种存储服务器的结构示意图;
80.图8是本技术提供的一种电子设备的结构示意图。
具体实施方式
81.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
82.为了便于理解本技术实施例,首先,对本技术涉及的应用场景进行简要说明。
83.现代互联网已进入大数据时代,每天都有数以万计的数据产生,这些数据的规模非常之大,使得传统的单机存储早已捉襟见肘,根本无法满足大数据多存储系统的要求,因此,分布式存储系统应运而生。
84.分布式存储系统,指的是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,使得存储服务器的性能成为系统性能的瓶颈,不能满足大规模存储应用的需要。因此,分布式存储系统应运而生,分布式存储系统指的是将数据分散存储在多台独立设备上,利用多台存储服务器分担存储负荷,利用元数据服务器定位存储数据的位置信息,与传统的网络存储系统相比,分布式存储系统不但提高了系统可靠性、可用性和存取效率,还易于扩展。下面对分布式存储系统的结构进行简要说明。
85.图1是一种存储系统100的结构示意图。如图1所示,存储系统100可以包括客户端110、元数据服务器120以及存储服务器130,其中,元数据服务器120、存储服务器130和客户端的数量可以是一个或者多个。应理解,图1中客户端110、元数据服务器120和存储服务器130的数量仅用于举例,并不能构成具体限定。其中,
86.客户端(client)110用于向用户提供交互界面,用户可以通过客户端输入指令,客户端将其翻译成用户的读取请求,并将其发送给元数据服务器,以供元数据服务器120根据用户的读数据请求,查询待读取数据的元数据。其中,客户端的具体形态可以是网页浏览
器,也可以是在本地运行的应用程序,本技术不作具体限定。并且,客户端110部署十分灵活,可以部署在任意一个元数据服务器120上,也可以部署在任意一个存储服务器130上,还可以部署在独立的服务器或者终端上,该服务器既不是元数据服务器120也不是存储服务器130,本技术不作具体限定。
87.元数据服务器120用于存储元数据(metadata),这里的元数据指的是描述存储服务器130中的存储数据的数据(data about data),主要描述存储数据的属性信息(property),用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。具体地,存储数据a0的元数据可以包括:该存储数据a0的访问权限、文件拥有者以及数据的位置信息等,其中位置信息还可以包括存储数据a0所在的磁盘上的具体位置、该磁盘对应的存储服务器的具体位置等。简单来说,用户需要操作一个存储系统服务器中的文件,那么用户必须要先得到该文件的元数据,才能定位到文件的位置。
88.具体实现中,元数据服务器120可以是实体设备,也可以是虚拟设备。当元数据服务器是实体设备时,元数据服务器可以具有处理器、硬盘、内存、网卡以及系统总线等等。当元数据服务器是虚拟设备时,元数据服务器可以通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中计算设备。比如,元数据服务器可以是服务器上虚拟出来的虚拟机。虚拟机在计算机上运行的应用程序,它可以模拟一个基于x86的标准pc环境。这个环境和真实的计算机一样,都有芯片组、cpu、内存、显卡、声卡、网卡、软驱、硬盘、光驱、串口、并口、usb控制器、小型计算机系统接口(small computer system interface,scsi)控制器等等中的一种或者多种设备。
89.存储服务器130用于存储数据。具体地,存储服务器可以包括多个如图1所示的存储介质,而存储介质可以是用于存储数据的全部载体,比如软盘、光盘、硬盘、闪存、磁盘、记忆棒等等,本技术不作具体限定。在分布式云存储应用场景中,存储服务器还可以是数据中心中的存储域网络(storage area network,san)中的存储设备,san中的存储设备是智能设备,比如独立磁盘副本阵列(redundant arrays of independent drives,raid,raid),也可称之为基于对象的存储设备(object-based storage device,osd),每个osd具有自己的存储控制器/处理器、缓存以及网络系统,可以提供osd对象接口,使得存储服务器可以通过osd对象接口和元数据服务器120以及客户端110通信,为其提供数据存储和业务访问的功能。
90.需要说明的,在一些应用场景下,元数据服务器120和存储服务器可以以其他形式存在,比如适用于企业的数据存储场景中,存储服务器130可以以存储阵列或者硬盘框的形态存在,元数据服务器还可以以控制该存储阵列或者硬盘柜的控制器的形态存在,该控制器也用于存储上述元数据,本技术不作具体限定。
91.应理解,存储系统100为了保证海量数据的可靠性,一般通过冗余存储策略来防止数据丢失,其中,冗余存储策略包括副本策略以及纠删码(erasure coding,ec)策略。简单来说,副本策略指的是将待存储的数据进行镜像获得多个镜像文件,然后将原数据和多个镜像文件分别存储在不同的存储服务器中,ec策略指的是将待存储的存储数据按照一定的ec编码逻辑分为多个分片数据,分片数据包括数据块和检验块,数据块即为原存储数据中的部分数据,当数据块丢失时,可以使用检验块重新计算出丢失的数据块。将这些分片数据分别存储在不同的存储服务器中。举例来说,可以根据分片数据的某一种数据特征(比如分
片id)计算哈希值,并将哈希值与多个存储服务器130建立映射关系,从而将不同哈希值的分片数据分布到不同的存储服务器上。还可以将key为[1,10000]的分片数据放在存储服务器1,将key为[100001,20000]的分片数据放在存储服务器2,以此类推。应理解,上述举例仅用于说明,本技术不对具体实现中的ec编码逻辑进行限定。
[0092]
因此,存储系统100中的存储数据多为分片数据或者副本数据,这样,存储服务器130每一次接收到数据读取请求时,将会先获取分片数据或者副本数据,然后对分片数据或者副本数据进行处理后,才能获得待读取数据。具体的,如果存储服务器130使用副本策略进行存储,那么存储服务器130在接收到数据读取请求后,将会先获取多个副本数据,然后从多个副本数据中获取有效数据,将其返回至客户端。如果分布式存储系统使用ec策略进行存储,那么存储服务器130在接收到数据读取请求后,需要先获取多个分片数据,然后根据存储时使用的ec编码逻辑,使用对应的ec反编码逻辑完成分片数据的组装,将组装后的数据返回至客户端。
[0093]
下面将分别对上述分布式存储系统100进行数据读取的两种方法进行解释说明。其中,图2实施例中通过客户端进行数据分片的组装,图3实施例中通过元数据服务器进行数据分片的组装。
[0094]
图2是一种分布式存储系统数据读取方法的流程图。如图2所示,图2所示的数据读取方法可以包括以下步骤:
[0095]
步骤11:客户端110向元数据服务器120发送数据a0的数据读取请求,该数据读取请求可以包括数据a0的数据id或者属性信息等等,以使得元数据服务120可以根据该数据id或者属性信息等等查询到数据a0的元数据。可以理解的,元数据服务器120包括至少一个元数据服务器,因此客户端110可以将数据a0的读取请求发送给元数据服务器中的一个元数据服务器x,比如默认的元数据服务器,或者离客户端a的地理位置距离最近的一台元数据服务器,或者随机一台元数据服务器,本技术不作具体限定。
[0096]
步骤12:元数据服务器120向客户端110返回数据a0的元数据。
[0097]
可以理解的,元数据服务器中的各个元数据服务器由于负载均衡、可靠性等缘故,各自负责不同的存储资源元数据管理,也就是说,每一个元数据服务器120可以维护一个元数据库,元数据服务器x在步骤s210接收到客户端110发送的数据a0的读取请求之后,元数据服务器x将会查询自己的元数据库,如果自己的元数据库中包含了数据a0的元数据信息,那么元数据服务器x可以直接将数据a0的元数据信息返回客户端110;如果自己的元数据库中没有数据a0的元数据信息,元数据服务器x需要查询该数据a0的元数据存储在哪一个元数据服务器上,并向该元数据服务器转发数据a0的读取请求供其进行元数据的查询。
[0098]
举例来说,假设数据a0的元数据存储在元数据服务器y,那么元数据服务器x在步骤s12接收到数据a0的数据读取请求后,可以确定数据a0元数据所在的元数据服务器y的地址,并将该数据读取请求转发给元数据服务器y,元数据服务器y在查询得到数据a0的元数据之后,元数据服务器y可以将数据a0的元数据返回给客户端110。应理解,上述举例仅用于说明,并不能构成具体限定。
[0099]
具体实现中,元数据服务器x可以通过对数据读取请求中的数据id和元数据服务器总数取模的方式,确定存储数据a0元数据的元数据服务y。可以理解的,用户需要读取某个数据a0时,需要输入一些数据a0相关信息才能查询到待读取数据a0,比如数据a0的数据
id,那么元数据服务器可以通过对数据读取信息中的数据a0的数据id和元数据服务器总数之间取模的形式,确定数据a0的元数据存储在哪一个元数据服务器。其中,取模指的是两个数相除后获得的余数。举例来说,假设元数据服务器总共有3台,元数据服务器的编号分别为0、1、2,数据a0的id为90,那么数据a0可以存储在编号0的元数据服务器上,如果数据a0的数据id为88,那么数据a0可以存储在编号为1的元数据服务器上。当元数据服务器接收到数据读取请求时,可以根据数据读取请求中的数据编号,查询到存储该数据的元数据服务器的编号,每台元数据服务器可以存储有每个元数据服务器编号对应的网络地址,从而实现元数据服务器x需要查询该数据a0的元数据存储在哪一个元数据服务器上,并向该元数据服务器转发数据a0的读取请求供其进行元数据的查询。
[0100]
元数据服务器x还可以通过查询索引来确定存储数据a0元数据的元数据服务y。其中,索引中包含了多个路由信息,每个路由信息包括一个数据id(可以是数字也可以是字符串)和对应的存储地址,当数据a0的元数据被写入元数据服务器y时,元数据服务器y可以在自己维护的索引中创建一条路由a’,该路由a’记录了数据id“a0”对应的地址信息为元数据服务器y的地址信息,然后元数据服务器y将该条路由a’同步到集群中的每一个元数据服务器维护的索引上。这样,当任何一台元数据服务器接收到的数据查询请求包含数据id“a0”时,每一个元数据服务器都可以根据索引中的路由a’记录的信息,获得“数据a0”对应的地址信息,即元数据服务器y的地址信息。需要说明的,上述两种确定存储数据a0元数据的元数据服务器y的方法仅用于举例说明,本技术不对元数据服务器x如何确定存储数据a0元数据服务器y的具体方式进行限定。
[0101]
具体实现中,数据a0的元数据可以包括数据a0的位置信息,位置信息具体可以包括存储服务器地址、分区信息、盘上的起始位置和数据长度等等,具体可以参考前述内容,这里不再展开赘述。
[0102]
需要说明的,如果存储系统使用副本策略进行数据存储,由于存储磁盘粒度需要对齐、数据被分区打散的缘故,元数据服务器在确定了数据a0的元数据之后,需要从多个副本数据中确定可以被读取的1个有效数据,然后将有效的副本数据的元数据向客户端110返回,此时的位置信息只对应了1个指定存储服务器。其中,有效数据可以是在多个副本数据中随机选择的一个完好的副本数据,如果客户端a恰好处于某个存储服务器上,那么有效数据还可以是存储于客户端a所在存储服务器的副本数据,本技术不作具体限定。
[0103]
需要说明的,如果存储系统使用ec策略进行数据存储,由于数据被分为多个分片数据存储在不同的存储服务器中,此时数据a0的元数据将包括多个分片数据的位置信息,这些位置信息分别对应了不同的指定存储服务器。
[0104]
步骤13:客户端110根据数据a0的元数据,访问指定存储服务器。
[0105]
参考步骤12可知,存储系统使用副本策略进行存储时,数据a0的元数据只包括了一个有效副本数据的位置信息,因此步骤13处客户端110可以只访问一台与元数据对应的存储服务器即可;分布式存储系统使用ec策略进行存储时,数据a0的元数据包括了多个冗余数据的位置信息,因此客户端110可以根据这些位置信息,一一访问位置信息对应多个指定存储服务器,向指定存储服务器获取数据a0的多个分片数据。
[0106]
步骤14:指定存储服务器向客户端110返回数据a0或者数据a0的多个分片数据。
[0107]
可以理解的,如果分布式存储系统使用副本策略进行存储,那么步骤14返回的是
副本数据中的有效数据,即完整的数据a0,数据读取完成。但是,如果分布式存储系统使用ec策略进行存储,那么步骤14返回的是多个分片数据,还需要继续执行步骤15。
[0108]
步骤15:客户端110将多个分片数据进行组装,获得需要读取的数据a0。
[0109]
具体实现中,如果分布式存储系统使用ec策略将数据分为多个分片数据进行存储,客户端110可以使用与其对应的ec反编码逻辑对分片数据进行组装,从而获得需要读取的数据a0。其中,客户端使用的ec反编码逻辑可以是在存储系统110搭建后,从元数据服务器120处获取的,也就是说,存储系统110在系统搭建结束后,将会通知与系统相连的客户端,本存储系统110使用的ec编码存储逻辑和ec反编码逻辑。
[0110]
可以理解的,上述数据读取流程中,客户端110、元数据服务器120以及存储服务器130之间的数据交互次数共有4次,包括3次读取请求的传输和1次数据传输,网络交互次数较多,过多的传输开销导致数据读取速度出现瓶颈。
[0111]
图3是另一种分布式存储系统数据读取方法的流程图。如图3所示,图3所示的数据读取方法可以包括以下步骤:
[0112]
步骤21:客户端110向元数据服务器120发送数据a0的读取请求。具体可以参考步骤11,这里不再进行赘述。
[0113]
步骤22:元数据服务器120根据数据a0的读取请求,获取数据a0的元数据。参考步骤12可知,不同的元数据服务器负责不同的存储资源元数据管理,因此元数据服务器x接收到数据a0的读取请求后,将会通过对数据读取请求中的数据id取模的方式,或者查询本地维护的索引的方式,获得待读取数据的元数据所在的元数据服务器y的地址,然后将数据a0的读取请求发送给该元数据服务器y,以供其查询获得数据a0的元数据。
[0114]
步骤23、元数据服务器120根据元数据信息访问指定存储服务器。
[0115]
具体实现中,负责管理数据a0的元数据服务器y在获取到数据a0的元数据之后,直接根据数据a0的元数据中的位置信息,然后向位置信息对应的一个或者多个指定存储服务器发送数据读取请求,其中,位置信息的具体描述可以参考前述内容中的步骤12,这里不再展开赘述。
[0116]
需要说明的,如果分布式存储系统使用副本策略进行数据存储,那么元数据服务器y在确定了数据a0的元数据之后,需要从多个副本数据中确定可以被读取的有效数据,然后根据该有效数据的位置信息,访问对应的存储服务器。如果分布式存储系统使用ec策略进行数据存储,由于数据通过ec编码操作被分为多个分片数据存储在不同的存储服务器中,此时数据a0的元数据将包括多个分片数据的位置信息,这些位置信息分别对应了不同的指定存储服务器,元数据服务器y将分别访问每一个分片数据对应的指定存储服务器。
[0117]
步骤24、元数据服务器120接收指定存储服务器返回数据a0或者数据a0的多个分片数据。
[0118]
具体实现中,多个指定存储服务器可以根据读取请求,完成数据读取操作,并将数据返回给发起读取请求的元数据服务y,使得元数据服务器y可以接收到数据a0或者数据a0的多个分片数据。其中,在分布式存储系统是按副本策略进行存储的情况下,元数据服务器y将接收到数据a0,元数据服务器y可以直接执行步骤26;在分布式存储系统是在ec策略进行存储的情况下,元数据服务器y将接收到数据a0的多个分片数据,因此还需要执行步骤25将分片数据组装后,才可以执行步骤s26。
[0119]
步骤25、元数据服务器120将数据a0的分片数据进行组装,获得数据a0。具体可以参考前述内容中的步骤s15,即通过ec反编码操作将接收到的多个分片数据进行组装,从而获得完整的数据a0,这里不展开赘述。
[0120]
步骤26:元数据服务器120向客户端120发送数据a0。
[0121]
可以理解的,上述数据读取流程中存在诸多弊端,首先,客户端110、元数据服务器120以及存储服务器130之间的数据交互次数共有4次,包括2次读取请求的传输和2次数据传输,网络交互次数较多,过多的传输开销导致数据读取速度出现瓶颈;其次,元数据服务器还要根据分布式存储系统的存储策略(ec或者副本),对数据进行处理,在副本策略的情况下,元数据服务器需要在多个副本数据中获取有效数据,在ec策略的情况下,元数据服务器还需要完成数据分片的组装,增加了元数据服务器110业务逻辑的复杂度,导致元数据服务器110的处理效率低;第三,由于大部分数据处理过程都由元数据服务器进行,因此在数据读取过程中如果元数据服务器出现了故障,很多步骤流程都无法进行,需要等待元数据服务器恢复后才能继续完成数据读取操作,增大了客户端读取数据时延,降低用户体验,同时导致整个数据读取流程的稳定性差。
[0122]
综上可知,分布式存储系统由于利用多台存储服务器分担存储负荷,需要利用元数据服务器定位存储数据的位置信息,并且为了提高数据的可靠性,采用副本策略和ec策略进行数据存储,每个存储数据对应了多个副本数据和/或分片数据,导致用户使用客户端读取数据时,无论使用图2实施例的数据读取方法在客户端处进行分片数据的组装,还是图3实施例的数据读取方法在元数据服务器进行分片数据的组装,都需要在元数据服务器和存储服务器之间进行多次通信,产生了大量的通信开销,同时也对客户端或者元数据服务器带来了巨大的处理压力,使得分布式系统的数据读取速度受到限制,客户端读取数据的时延较大。
[0123]
为了解决上述分布式存储系统的数据读取速度受到限制的问题,本技术提供了一种数据存储方法,该方法应用于如图1所示的存储系统中,其中,该存储系统包括至少一个客户端、至少一个元数据服务器以及至少一个存储服务器。如图4所示,该方法包括以下步骤:
[0124]
s410:元数据服务器接收客户端发送的数据读取请求。
[0125]
具体实现中,客户端可以将数据读取请求发送给至少一个元数据服务器中的某一个元数据服务器上,该数据读取请求可以包括待读取数据的数据id等可以被元数据服务器用来查询元数据信息的关键字信息,使得元数据服务器x可以通过对数据读取请求中的数据id取模的方式,或者查询本地维护的索引的方式,获得待读取数据的元数据所在的元数据服务器y的地址,并将数据读取请求转发给元数据服务器y,这一过程可以参考前述内容中的步骤11-步骤12以及步骤21-步骤22,这里不再进行赘述。
[0126]
在一实施例中,所述数据读取请求包括所述客户端内存的地址信息,该地址信息可以包括客户端内存的地址、长度等信息。简单来说,在客户端向元数据服务器发送读取请求之前,还可以在客户端的内存中申请一片用于写入待读取数据的缓存空间(buffer),然后将该缓存空间的地址、长度等信息封装入所述数据读取请求,应理解,该地址信息将随着数据读取请求依次发送给元数据服务器和存储服务器,这样,当元数据服务器将该数据读取请求发送给存储服务器时,存储服务器可以直接根据数据读取请求中包含的客户端内存
的地址信息,将待读取数据写入所述客户端的内存。
[0127]
s420:元数据服务器120根据所述数据读取请求,获得所述待读取数据的位置信息。
[0128]
其中,所述位置信息可以是前述内容中的元数据,元数据服务器120可以维护一个位置信息数据库(即元数据库)如果存储系统100使用副本策略进行数据存储,那么位置信息可以包括待读取数据的多个副本数据的位置信息,如果存储系统100使用ec策略进行数据存储,那么位置信息可以包括待读取数据的多个分片数据的位置信息。
[0129]
s430:元数据服务器向存储服务器发送位置信息以请求数据。
[0130]
在一实施例中,如果存储系统100使用副本策略进行数据存储,元数据服务器可以在多个副本数据中选择一个有效数据,然后向有效数据的位置信息对应的存储服务器发送数据读取请求和位置信息,也就是说,位置信息包括待读取数据的多个副本数据的位置信息,元数据服务器向存储服务器发送位置信息以请求数据包括:元数据服务器向多个副本数据中的一个副本数据的位置信息对应的存储服务器,发送多个副本数据中的一个副本数据的位置信息以请求数据。其中,有效数据的选取过程可以参考前述内容的步骤12,这里不再展开赘述。
[0131]
需要说明的,元数据服务器向存储服务器发送位置信息以请求数据时,也可以通过向存储服务器发送副本数据的读取请求的方式以请求数据,该副本数据的读取请求可以是对客户端发送的数据读取请求中的部分参数进行修改并重新封装后获得的,比如客户端发送的数据读取请求包括源地址、数据长度和待读取数据的数据id等等,元数据服务器在获得副本数据中的有效数据的位置信息之后,可以将数据读取请求中的数据长度由客户需求的待读取数据的长度修改为有效数据的长度,然后将待读取数据的数据id替换为有效数据的位置信息,从而获得该副本数据的读取请求,然后将该副本数据的读取请求发送给存储服务器。可以理解的,副本数据的数据读取请求还可以是使用其他方式对客户端发送的数据请求进行修改和封装后获得的,本技术不对获得副本数据的数据读取请求的具体方式进行限定。
[0132]
在一实施例中,如果存储系统100使用ec策略进行数据存储,元数据服务器可以向多个分片数据对应的存储服务器一一发送数据读取请求和位置信息。也就是说,位置信息包括待读取数据的多个分片数据的位置信息,元数据服务器向存储服务器发送位置信息以请求数据包括:元数据服务器向多个分片数据中的每个分片数据的位置信息对应的存储服务器发送分片数据的位置信息,以获取分片数据。
[0133]
需要说明的,元数据服务器向存储服务器发送位置信息以请求数据时,也可以通过向存储服务器发送分片数据的读取请求的方式以请求数据,该分片数据的读取请求可以是对客户端发送的数据读取请求中的部分参数进行修改并重新封装后获得的,比如客户端发送的数据读取请求包括源地址、数据长度和待读取数据的数据id等等,元数据服务器在获得多个分片数据的位置信息之后,可以将数据读取请求中的数据长度由客户需求的待读取数据的长度修改为分片数据的长度,然后将待读取数据的数据id替换为分片数据的位置信息,从而获得每一个分片数据的读取请求,然后将该分片数据的读取请求发送给对应的存储服务器。可以理解的,分片数据的数据读取请求还可以是使用其他方式对客户端发送的数据请求进行修改和封装后获得的,本技术不对获得分片数据的数据读取请求的具体方
式进行限定。
[0134]
可以理解的,本技术实施例中元数据服务器只负责查询待存储数据的位置信息,以及确认多个副本数据中的有效数据这两个步骤,相比于图3实施例描述的数据读取方法,元数据服务器的处理压力大大减少,元数据服务器出现故障并不会对整个数据读取流程造成过多影响,同时也减少了元数据服务器的业务逻辑的复杂度,提高元数据服务器的处理效率。
[0135]
s440:存储服务器根据所述位置信息获取待读取数据。
[0136]
具体实现中,如果存储系统100使用副本策略进行数据存储,只有一个存储服务器(即有效数据的存储服务器)将会接收到副本数据的读取请求,该请求中包含了多个副本数据中的一个有效数据的位置信息,因此,在存储服务器接收到上述副本数据的读取请求之后,存储服务器可以直接根据有效数据的位置信息读取有效数据,然后将其写入客户端的内存中。
[0137]
但是,如果存储系统100使用ec策略进行数据存储,将会有多个存储服务器(多个分片数据对应的多个存储服务器)接收到分片数据的读取请求,该请求中包含了一个分片数据的位置信息,每一个接收到分片数据的读取请求的存储服务器只能读取各自的分片数据,而无法直接读取到完整的待读取数据,因此,在步骤s450处,每个存储服务器将读取到的分片数据写入客户端之后,客户端可以对多个分片数据进行ec反编码,从而获得待读取数据。也就是说,存储服务器根据位置信息获取待读取数据包括:存储服务器根据分片数据的位置信息,获取分片数据;存储服务器将待读取数据发送至客户端包括:存储服务器将分片数据发送至客户端,使得客户端根据接收到的多个分片数据,获得待读取数据。
[0138]
在一实施例中,如图4所示,所述存储服务器包括远程直接数据存取网卡rnic和存储介质,所述存储服务器根据所述位置信息,获取所述待读取数据包括:所述存储服务器的rnic根据所述位置信息,从所述存储介质中获取所述待读取数据。其中,存储介质的定义可以参考图1实施例中的内容,具体可以是硬盘、存储芯片、智能盘等等,这里不再进行赘述;rnic(rdma enabled nic)是具有远程直接内存访问(remote direct memory access,rdma)功能的网卡(nic),rnic通过rdma单边写操作,可以通过网络将待读取数据从存储服务器快速移动到远程客户端的内存中,而不对客户端的操作系统造成任何影响,可以理解的,存储服务器直接通过rdma单边写操作将待读取数据写入客户端,使得客户端资源占用大大降低,从而提高客户端的处理效率。
[0139]
s450:存储服务器将待读取数据发送至客户端。
[0140]
在一实施例中,所述存储服务器将所述待读取数据发送至所述客户端包括:所述存储服务器的rnic根据所述客户端内存的地址信息,通过远程直接数据存取rdma方法,将所述待读取数据写入与所述地址信息对应的客户端内存中。具体地,rnic可以通过rdma单边写入方法将所述待读取数据写入与所述地址信息对应的客户端内存中。应理解,rdma单边写操作只需要发送端明确信息的源和目的地址,接收端不需要感知此次通信,数据的写入通过rdma在rnic和客户端内存(buffer)之间完成,相比图2实施例,客户端的处理压力大大减少,提高了数据读取的速度。具体实现中,客户端的网卡也是rnic,这样客户端才可以兼容存储服务器的rdma操作。
[0141]
在一实施例中,存储服务器的存储介质中存储的数据一般是按照粒度对齐处理的
数据,比如按照512b粒度对齐的数据,并且,为了降低存储成本,存储介质中存储的数据一般会经过数据压缩(data compression)和数据压紧(data compaction)的操作,因此存储服务器的rnic在读取到存储介质中的存储数据之后,可以对存储数据进行数据解压缩和解压紧的操作,从而获得待读取数据。也就是说,所述存储服务器的rnic根据所述位置信息,从所述存储介质中获取所述待读取数据包括:所述存储服务器的rnic根据所述位置信息,从所述存储介质中读取所述位置信息对应的存储数据;所述存储服务器的rnic对所述存储数据进行解压缩和解压紧操作,获得所述待读取数据。可以理解的,该步骤交由存储服务器的rnic进行,可以减少客户端的资源占用,相比图2实施例,客户端处理效率提高,客户端性能要求降低,进而使得本技术提供的方法的适用场景更加广泛,相比图3实施例,元数据服务器处理效率提高,客户端性能要求降低,进而使得本技术提供的方法适用场景更加广泛。
[0142]
具体实现中,对于使用ec策略进行存储的存储系统来说,存储数据被分为多个分片数据,存储在不同的存储服务器中,而每个用户真正想要读取的数据可能只是每个被分片的原始数据的一部分,举例来说,被分片存储的原始数据a的长度总共有12k,以2个4k的数据块和1个4k校验块的形式存储在存储系统中,但是用户只想读取的数据a0只是被分片存储的原始数据a的前2k内容。因此在步骤s420处,元数据服务器还可以先确认用户的待读取数据a0所在的被分片的原始数据a的位置信息,然后将待读取数据a0与该原始数据a之间的对应关系(即待读取数据在该原始数据的哪一部分,比如前2k,中间2k-4k,后4k等等)放入位置信息,然后将其封装进分片数据的读取请求,将分片数据的读取请求传输至存储服务器。步骤s440处,存储服务器的rnic可以将原始数据a的全部分片数据写入客户端内存中,并将用户的待读取数据a0与原始数据a的对应关系同时发送给客户端,仍以前述例子为例,此时存储服务器可以将2个4k的数据块和1个4k校验块写入客户端的内存中,并将用户实际需要读取的数据a0与原始数据a的对应关系(即待读取数据是数据a的前2k)一同发送给客户端,客户端收到完整的12k数据后,先通过ec反编码计算出原始数据a0,然后摘取原始数据a的前2k返回给用户。可以理解的,本技术通过将用户的待读取数据与被分片的原始数据的对应关系进行映射,结合rdma单边写入的技术,使得客户端只需要对分片数据进行ec反编码,而无需再额外分出资源处理收发流程,使得客户端的资源占用大大减少,降低了客户端实现复杂度,客户端性能要求降低,进而使得本技术提供的方法适用场景更加广泛。
[0143]
综上可知,前述内容中图2实施例描述的数据读取方法需要交互4次,包括3次读取请求的传输和1次数据传输,前述内容中图3实施例描述的数据读取方法需要交互4次,包括2次读取请求的传输和2次数据传输。而本技术提供的数据读取方法的整个流程中,如图4所示,客户端110、元数据服务器120以及存储服务器130之间的数据交互次数只有3次,包括2次读取请求的传输和1次数据传输,本技术提供的数据读取方法相比图2和图3实施例描述的数据读取方法,传输开销大大减少,数据读取速度大大提升。
[0144]
下面以ec2 1冗余模式为例,对本技术提供的数据读取方法进行举例说明。其中,ec2 1指的是存储系统中的数据将通过ec编码将每个数据分为3个分片数据进行存储,3个分片数据包括2个数据块和1个校验块。如图5所示,本技术提供的数据读取方法可以包括以下步骤:
[0145]
步骤1、客户端在内存空间中申请一片缓存空间,并向元数据服务器x发送数据a0的数据读取请求,其中,数据读取请求包括该内存空间的地址信息。具体可以参考前述内容
的步骤s410及其可选步骤,这里不再展开赘述。
[0146]
步骤2、元数据服务器x通过对数据读取请求中的数据id取模的方式,或者查询本地维护的索引的方式,获得待读取数据的元数据所在的元数据服务器y的地址,向元数据服务器y转发该数据读取请求,元数据服务器y接收该数据读取请求。其中,元数据服务器x可以是客户端随机选择的一个元数据服务器,也可以是离客户端最近的元数据服务器,也可以是存储系统的默认元数据服务器,本技术不作具体限定,具体可以参考前述内容的步骤s410、步骤12、步骤22及其可选步骤,这里不再展开赘述。
[0147]
步骤3、元数据服务器y确认所述数据a0是存储数据a的前2k数据,进而确认存储数据a的多个分片数据的位置信息,向每一个分片数据对应的存储服务器发送分片数据的读取请求。其中,存储数据a包括3个分片数据,分片数据1(数据块1)存储于存储服务器1,分片数据2(数据块2)存储于存储服务器4,分片数据3(校验块1)存储于存储服务器5,因此元数据服务器y可以向存储服务器1发送分片数据1的读取请求,该请求包含了分片数据1的位置信息和数据长度、用户需要读取的a0与存储数据a的对应关系(数据a0是数据a的前2k数据)、客户端a的写入地址等信息;向存储服务器2发送分片数据2的读取请求,该请求包含了分片数据2的位置信息和数据长度、用户需要读取的a0与存储数据a的对应关系(数据a0是数据a的前2k数据)、客户端a的写入地址等信息;向存储服务器3发送分片数据3的读取请求,该请求包含了分片数据3的位置信息和数据长度、用户需要读取的a0与存储数据a的对应关系(数据a0是数据a的前2k数据)、客户端a的写入地址等信息。具体可以参考前述内容的步骤s420、步骤s430及其可选步骤,这里不再展开赘述。
[0148]
步骤4、存储服务器的rnic根据接收到的分片数据的读取请求,从本服务器管理下的存储介质中读取分片数据,比如存储服务器1可以根据分片数据1的位置信息进行数据读取,然后对读取得到的与位置信息对应的存储数据进行解压紧和解压缩处理,从而获得分片数据1,同理,存储服务器4的rnic可以获得分片数据2,存储服务器5的rnic可以获得分片数据3。当然,如果存储服务器的盘上之前并没有进行过粒度对齐处理和压缩处理,那么存储服务器可以直接根据位置信息读取得到分片数据,具体可以参考前述内容的步骤s440及其可选步骤,这里不再展开赘述。
[0149]
步骤5、存储服务器的rnic根据接收到的分片数据的读取请求中,客户端内存空间的地址信息,通过rdma单边写操作将分片数据写入该地址信息对应的客户端内存中。存储服务器1的rnic将分片数据1写入客户端内存中,存储服务器2的rnic将分片数据2写入客户端内存中,存储服务器3的rnic将分片数据3写入客户端内存中。具体可以参考前述内容的步骤s450及其可选步骤,这里不再展开赘述。
[0150]
步骤6、客户端通过ec反编码操作将分片数据1、分片数据2和分片数据3组装为存储数据a,根据待读取数据a0和存储数据a之间的对应关系,确定待读取数据a0。具体可以参考前述内容的步骤s450、步骤15、步骤25及其可选步骤,这里不再展开赘述。
[0151]
步骤7、客户端将待读取数据a0返回至用户。
[0152]
综上可知,前述内容中图2实施例描述的数据读取方法需要交互4次,包括3次读取请求的传输和1次数据传输,前述内容中图3实施例描述的数据读取方法需要交互4次,包括2次读取请求的传输和2次数据传输。而本技术提供的数据读取方法的整个流程中,如图4所示,客户端110、元数据服务器120以及存储服务器130之间的数据交互次数只有3次,包括2
次读取请求的传输和1次数据传输,本技术提供的数据读取方法相比图2和图3实施例描述的数据读取方法,传输开销大大减少,数据读取速度大大提升。
[0153]
上述详细阐述了本技术实施例的方法,为了便于更好的实施本技术实施例上述方案,相应地,下面还提供用于配合实施上述方案的相关设备。
[0154]
图6是本技术提供的一种元数据服务器600的结构示意图。该元数据服务器600可以是前述内容中的元数据服务器120,如图6所示,该元数据服务器600包括接收单元610、获取单元620、发送单元630以及位置信息数据库640。
[0155]
接收单元610,用于接收客户端发送的数据读取请求,所述数据读取请求用于读取所述存储服务器中的待读取数据;
[0156]
获取单元620,用于根据所述数据读取请求,获得所述待读取数据的位置信息,具体地,可以从元数据服务器600维护的位置信息数据库640中获取待读取数据的位置信息。
[0157]
发送单元630,用于根据所述位置信息,向所述位置信息对应的存储服务器发送所述数据读取请求和所述位置信息,使得所述存储服务器根据所述数据读取请求和所述位置信息,获取所述待读取数据,并将所述待读取数据写入所述客户端的内存中。
[0158]
在一实施例中,所述位置信息包括所述待读取数据的多个副本数据的位置信息,所述发送单元630,用于确定所述多个副本数据中的一个有效数据;所述发送单元630,用于向所述有效数据的位置信息对应的存储服务器发送所述数据读取请求和所述位置信息。
[0159]
在一实施例中,所述位置信息包括所述待读取数据的多个分片数据的位置信息,所述发送单元630,用于根据所述位置信息,向所述多个分片数据的位置信息对应的多个存储服务器发送所述数据读取请求和所述位置信息,使得所述存储服务器根据所述数据读取请求,获取所述多个分片数据,并将所述分片数据写入所述客户端的内存中,以供客户端根据所述多个分片数据,获得所述待读取数据,其中,一个所述分片数据的位置信息对应一个存储服务器。
[0160]
可以理解的,使用本技术提供的元数据服务600,在存储系统100中进行数据读取时,客户端110、元数据服务器120以及存储服务器130之间的数据交互次数只有3次,包括2次读取请求的传输和1次数据传输,相比于图2和图3实施例,传输开销大大减少,数据读取速度大大提升。并且,由于元数据服务器600只负责根据客户端发送的数据读取请求进行位置信息的查询,以及确认多个副本数据中的有效数据这两个步骤,相比于图3实施例描述的数据读取方法,元数据服务器的处理压力大大减少,元数据服务器出现故障并不会对整个数据读取流程造成过多影响,同时也减少了元数据服务器的业务逻辑的复杂度,提高元数据服务器的处理效率。
[0161]
图7是本技术提供的一种存储服务器700的结构示意图。该存储服务器700可以是前述内容中的存储服务器130,如图7所示,该存储服务器700包括rnic 710和存储介质720,其中,rnic 710包括接收单元711、获取单元712以及写入单元713。
[0162]
接收单元711,用于接收元数据服务器发送的数据读取请求和位置信息,其中,所述数据读取请求是所述元数据服务器接收的客户端发送的数据读取请求,所述位置信息是所述元数据服务器根据所述数据读取请求获得的待读取数据的位置信息;
[0163]
获取单元712,用于根据所述数据读取请求和所述位置信息,从所述存储介质720中获取所述待读取数据;
[0164]
写入单元713,用于将所述待读取数据写入所述客户端的内存中。
[0165]
在一实施例中,所述数据读取请求包括所述客户端内存的地址信息,所述存储服务器包括远程直接数据存取网卡rnic710和存储介质720,所述获取单元712,用于根据所述数据读取请求和所述位置信息,通过所述rnic从所述存储介质720中获取所述待读取数据;所述写入单元,713用于根据所述客户端内存的地址信息,通过所述rnic使用远程直接数据存取rdma单边写入方法,将所述待读取数据写入与所述地址信息对应的客户端内存中。
[0166]
在一实施例中,所述位置信息是所述待读取数据的多个副本数据中的一个有效数据的位置信息。
[0167]
在一实施例中,所述位置信息是所述待读取数据的多个分片数据的位置信息,其中,一个分片数据的位置信息对应一个存储服务器,所述获取单元712,用于根据所述数据读取请求,获取分片数据;所述写入单元713,用于将所述分片数据写入所述客户端的内存中,使得所述客户端根据多个存储服务器写入的多个分片数据,获得所述待读取数据。
[0168]
在一实施例中,所述获取单元712,用于根据所述数据读取请求和所述位置信息,通过所述rnic从所述存储介质中读取所述位置信息对应的存储数据;所述获取单元713,用于通过所述rnic对所述存储数据进行解压缩和解压紧操作,获得所述待读取数据。
[0169]
可以理解的,使用本技术提供的存储服务器700,在存储系统中进行数据读取时,客户端、元数据服务器以及存储服务器之间的数据交互次数只有3次,包括2次读取请求的传输和1次数据传输,相比于图2和图3实施例,传输开销大大减少,数据读取速度大大提升。并且,存储服务器的rnic结合rdma单边写入的技术,使得客户端只需要对分片数据进行ec反编码,而无需再额外分出资源处理收发流程,客户端的资源占用大大减少,降低了客户端实现复杂度,进而使得本技术提供的方法适用场景更加广泛。
[0170]
图8为本技术实施例提供的一种电子设备800的结构示意图。其中,所述电子设备800可以是前述内容中的元数据服务器600或者存储服务器700。如图8所示,电子设备800包括:处理器810、通信接口820以及存储器830。其中,处理器810、通信接口820以及存储器830可以通过内部总线840相互连接,也可通过无线传输等其他手段实现通信。本技术实施例以通过总线840连接为例,总线840可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。所述总线840可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0171]
所述处理器810可以由至少一个通用处理器构成,例如中央处理器(central processing unit,cpu),或者cpu和硬件芯片的组合。上述硬件芯片可以是专用集成电路(application-specific inegrated circuit,asic)、可编程逻辑器件(programmable logic device,pld)或其组合。上述pld可以是复杂可编程逻辑器件(complex programmable logic device,cpld)、现场可编程逻辑门阵列(field-programmable gate array,fpga)、通用阵列逻辑(generic array logic,gal)或其任意组合。处理器810执行各种类型的数字存储指令,例如存储在存储器830中的软件或者固件程序,它能使电子设备800提供较宽的多种服务。
[0172]
在电子设备800是前述内容中的元数据服务器600的情况下,所述存储器830用于存储程序代码,并由处理器810来控制执行,以执行上述图4或图5中任一实施例中元数据服
务器的处理步骤。
[0173]
所述程序代码中可以包括一个或多个软件模块。这一个或多个软件模块可以为图6所示实施例中提供的软件模块(在该实施例中各软件模块,如接收单元,获取单元以及发送单元,为软件模块的情况下)。例如接收单元可以用于接收客户端发送的数据读取请求;获取单元可以用于根据数据读取请求,获得待读取数据的位置信息;发送单元可以用于根据位置信息,向位置信息对应的存储服务器发送数据读取请求和所述位置信息,使得存储服务器根据数据读取请求和位置信息获取待读取数据,并将待读取数据写入客户端的内存中。具体可用于执行前述方法的步骤s410-步骤s440、步骤1-步骤3及其可选步骤,还可以用于执行图4或图5实施例描述的其他步骤,这里不再进行赘述。
[0174]
需要说明的是,本实施例可以是通用的物理服务器实现的,例如,物理服务器,如x86服务器等,也可以是基于通用的物理服务器结合网络功能虚拟化(network functionsvirtualization,nfv)技术实现的虚拟机(virtual machine,vm)实现的,所述虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。本技术不作具体限定。
[0175]
在电子设备800是前述内容中的存储服务器700的情况下,所述存储器830用于存储程序代码,并由处理器810来控制执行,以执行上述图4或图6中任一实施例中存储服务器的处理步骤。
[0176]
所述程序代码中可以包括一个或多个软件模块。这一个或多个软件模块可以为图6所示实施例中提供的软件模块(在该实施例中各软件模块,如接收单元,获取单元以及写入单元,为软件模块的情况下)。例如接收单元可以用于接收元数据服务器发送的数据读取请求和位置信息,获取单元可以用于根据所述数据读取请求和所述位置信息,获取所述待读取数据,写入单元可以用于将所述待读取数据写入所述客户端的内存中。具体可用于执行前述方法的s430-步骤s450、步骤3-步骤6及其可选步骤,还可以用于执行图2-图5实施例描述的其他步骤,这里不再进行赘述。
[0177]
需要说明的是,本实施例可以是通用的物理服务器实现的,例如,物理服务器,如x86服务器等,也可以是基于通用的物理服务器结合网络功能虚拟化(network functions virtualization,nfv)技术实现的虚拟机(virtual machine,vm)实现的,所述虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。本技术不作具体限定。
[0178]
所述存储器830可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,ram);存储器830也可以包括非易失性存储器(non-volatile memory),例如只读存储器(read-only memory,rom)、快闪存储器(flash memory)、硬盘(hard disk drive,hdd)或固态硬盘(solid-state drive,ssd);存储器830还可以包括上述种类的组合。存储器830可以存储有程序代码,具体可以包括用于执行图4或图5实施例描述的其他步骤的程序代码,这里不再进行赘述。
[0179]
通信接口820可以为有线接口(例如以太网接口),可以为内部接口(例如高速串行计算机扩展总线(peripheral component interconnect express,pcie)总线接口)、有线接口(例如以太网接口)或无线接口(例如蜂窝网络接口或使用无线局域网接口),用于与与其他设备或模块进行通信。
[0180]
需要说明的,图8仅仅是本技术实施例的一种可能的实现方式,实际应用中,所述电子设备还可以包括更多或更少的部件,这里不作限制。关于本技术实施例中未示出或未描述的内容,可参见前述图4或图5所述实施例中的相关阐述,这里不再赘述。
[0181]
本技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在处理器上运行时,图4或图5所示的方法流程得以实现。
[0182]
本技术实施例还提供一种计算机程序产品,当所述计算机程序产品在处理器上运行时,图4或图5所示的方法流程得以实现。
[0183]
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括至少一个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含至少一个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,高密度数字视频光盘(digital video disc,dvd)、或者半导体介质。半导体介质可以是ssd。
[0184]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
再多了解一些

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

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

相关文献

  • 日榜
  • 周榜
  • 月榜