CN107493309B - 一种分布式系统中的文件写入方法及装置 - Google Patents
一种分布式系统中的文件写入方法及装置 Download PDFInfo
- Publication number
- CN107493309B CN107493309B CN201610412690.0A CN201610412690A CN107493309B CN 107493309 B CN107493309 B CN 107493309B CN 201610412690 A CN201610412690 A CN 201610412690A CN 107493309 B CN107493309 B CN 107493309B
- Authority
- CN
- China
- Prior art keywords
- storage node
- file
- write request
- data
- writing
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
Abstract
一种分布式系统中的文件写入方法及装置;所述文件写入方法包括:客户端收到对于第一文件的写请求后,将对于所述第一文件的数据写入请求分别发送到所述第一文件所对应的每个存储节点;其中所述数据写入请求中至少包括:与所述第一文件数据写入请求对应的写请求标识、存储节点地址;所述存储节点地址包括所述第一文件所对应的每个存储节点中主存储节点的地址和/或副存储节点的地址;所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用;所述客户端分别从所述第一文件所对应的每个存储节点接收对于所述数据写入请求的执行结果。本申请能够在保证数据的多个副本字节序一致的前提下,减少数据发送跳数从而降低写入延时。
Description
技术领域
本发明涉及分布式存储领域,尤其涉及一种分布式系统中的文件写入方法及装置。
背景技术
底层分布式存储系统是云计算技术的基础,例如谷歌文件系统(Google FileSystem,GFS),Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)等,在这些基础之上建立起了许多提供不同功能的分布存储产品,其中很大一部分产品是通过建立多个分区(Partition)的方式实现了数据的分布存储,每个Partition的数据由一个单独的进程服务,来保证一致性。但这种设计使存储产品需要解决Partition的热点问题,因为单个进程的服务能力总是受限于它所在机器的物理资源,比如中央处理器(CentralProcessing Unit,CPU),网络带宽等。
为了解决这个问题,一些系统提出了元数据流和数据流分离的方法:元数据流还是由每个Partition的服务进程来处理,保证数据的一致性;数据流直接跟底层分布式存储系统的数据管理模块交互。由于元数据流的量很小,Partition变成热点的概率大大降低,同时数据传输过程也减少了Partition服务进程这一跳,减少了网络延时和网络带宽。
为了满足这个方案,底层分布式存储系统需要支持一个文件同时被多个进程读写。读文件不会改变数据,一般都支持多进程并发。写文件则不能通过互斥的方式来保证数据的一致性,而是要提供了一种可以允许多个进程同时向一个文件写入数据的方法,数据的一致性交给其中一个数据管理节点来负责。一种现有的底层分布式存储系统是微软Azure云计算平台中采用的底层分布式存储系统(Stream Layer),结构如图1所示:数据存储节点是扩展节点(Extent Node,EN),存放数据副本的多个EN不是对等的,比如图1所示的3个EN中,有一个被选为主(Primary)EN,所有的客户端(Client)都先将待写入的数据发送到主扩展节点,由主扩展节点确定偏移量(offset)后,再将待写入的数据和偏移量一起依次传递给另外两个Secondary(副)扩展节点(即:先传递给一个副扩展节点,再从该副扩展节点传递给另一个副扩展节点),这样就可以保证数据的多个副本在字节序上是一致的。
StreamLayer的每个文件(Stream)都只有1个块(Chunk)是可以写数据的,当某个客户端进程对某个文件写数据的时候遇到(故障切换failover),这个客户端进程会将当前的块设置为不可写,同时申请1个新的可写块,将数据写到新的块上,其它对该文件写数据的客户端进程也要将数据写到这个新的块上。
现有的方案有如下问题:
数据存储层完成写操作的时候采用链式数据流,待写入的数据要经过多跳才能到达所有的数据节点,比如图1所示的系统,当包含两个副扩展节点时,待写入的数据先从客户端发到主扩展节点(第一跳)、然后从主扩展节点发到第一个副扩展节点(第二跳),最后从第一个副扩展节点发到第二个副扩展节点(第三跳),共经过了3跳;相应地,第二个副扩展节点的执行结果也需要依次历经第一个副扩展节点和主扩展节点返回给客户端;对于客户端而言,总的延时是3跳延时之和;在每次写入的数据量较大的时候,过多的跳数会导致延时很长。
发明内容
本申请提供一种分布式系统中的文件写入方法及装置,能够在保证数据的多个副本字节序一致的前提下,减少数据发送跳数从而降低写入延时。
本申请采用如下技术方案。
一种分布式系统中的文件写入方法,包括:
客户端收到对于第一文件的写请求后,将对于所述第一文件的数据写入请求分别发送到所述第一文件所对应的每个存储节点;
其中所述数据写入请求中至少包括:与所述第一文件数据写入请求对应的写请求标识、存储节点地址;
所述存储节点地址包括所述第一文件所对应的每个存储节点中主存储节点的地址和/或副存储节点的地址;所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用;
所述客户端分别从所述第一文件所对应的每个存储节点接收对于所述数据写入请求的执行结果。
可选地,所述存储节点包括块服务器或扩展节点;
当所述存储节点是块服务器时,所述第一文件所对应的每个存储节点包括:所述第一文件的可写块对应的所有块服务器,所述块服务器包括主块服务器和副块服务器;
当所述存储节点是扩展节点时,所述第一文件所对应的每个存储节点包括:所有存放所述第一文件的副本的扩展节点,所述扩展节点包括主扩展节点和副扩展节点。
可选地,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识。
可选地,所述客户端进程标识是全局唯一的标识,每个客户端进程标识唯一对应一个客户端进程;
所述线程标识是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。
可选地,所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用包括:所述存储节点地址供所述主存储节点和所述副存储节点之间交互写入位置指示信息,以保证多个副本的字节序一致。
一种分布式系统中的文件写入方法,包括:
主存储节点接收到客户端对于第一文件的数据写入请求后,将其中携带的写请求标识与所确定的所述第一文件的写入位置指示信息对应保存;
所述主存储节点根据所述数据写入请求携带的存储节点地址,将所述写请求标识及对应的写入位置指示信息发送给副存储节点,所述存储节点地址包括所述第一文件所对应的副存储节点的地址;或者,当所述副存储节点根据写请求标识进行查询时返回对应于该写请求标识的写入位置指示信息。
可选地,所述当副存储节点根据写请求标识进行查询时返回对应于该写请求标识的写入位置指示信息包括:
所述主存储节点根据副存储节点查询所用的写请求标识,查找与该写请求标识对应保存的写入位置指示信息;将所述写入位置指示信息返回给进行查询的所述副存储节点,或者将所述写入位置信息及查询所用的写请求标识返回给进行查询的所述副存储节点。
可选地,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识;
所述客户端进程标识是全局唯一的标识,每个客户端进程标识唯一对应一个客户端进程;
所述线程标识是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。
可选地,所述将写入位置指示信息与所述数据写入请求中包含的写请求标识对应保存包括:
将所述数据写入请求中包含的写请求标识和所述写入位置指示信息保存为第一键值对,所述写请求标识作为键名,所述写入位置指示信息作为键值。
一种分布式系统中的文件写入方法,包括:
副存储节点接收到客户端对于第一文件的数据写入请求后,根据所述数据写入请求中携带的存储节点地址和写请求标识向主存储节点进行查询得到写入位置指示信息,所述存储节点地址包括所述第一文件所对应的主存储节点的地址;或者根据所述数据写入请求中携带的写请求标识从主存储节点接收写入位置指示信息;
所述副存储节点根据所述写入位置指示信息对所述第一文件进行写入,将执行结果返回给所述客户端。
可选地,所述副存储节点接收到客户端对于第一文件的数据写入请求后还包括:
所述副存储节点将所述数据写入请求中携带的写请求标识和待写入的数据对应保存。
可选地,所述副存储节点将所述数据写入请求中携带的写请求标识和待写入的数据对应保存包括:
所述副存储节点将所述数据写入请求中携带的写请求标识和所述待写入的数据保存为第二键值对,所述写请求标识作为键名,所述待写入的数据作为键值。
可选地,所述根据数据写入请求中携带的存储节点地址和写请求标识向主存储节点进行查询得到写入位置指示信息包括:根据所述数据写入请求中的存储节点地址确定主存储节点的地址,向所确定的地址发送携带所述写请求标识的查询请求,将所述主存储节点返回的写入位置指示信息,和与所述写请求标识对应保存的待写入的数据进行对应;
所述根据数据写入请求中携带的写请求标识从主存储节点接收写入位置指示信息包括:当收到所述主存储节点发送的包含写请求标识和写入位置指示信息的第一消息时,根据所述第一消息中的写请求标识,查找对应保存的待写入的数据,将查找到的待写入的数据和所述第一消息中的写入位置指示信息进行对应;
所述副存储节点根据所述写入位置指示信息对所述第一文件进行写入包括:根据待写入的数据对应的写入位置指示信息,在所述第一文件的相应位置写入所述待写入的数据。
可选地,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识;
所述客户端进程标识是全局唯一的标识,每个客户端进程标识唯一对应一个客户端进程;
所述线程标识是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。
一种分布式系统中的文件写入装置,设置于客户端,包括:
请求模块,用于收到对于第一文件的写请求后,分别发送对于所述第一文件的数据写入请求到所述第一文件所对应的每个存储节点;所述数据写入请求中携带:与所述第一文件数据写入请求对应的写请求标识、存储节点地址;所述存储节点地址包括所述第一文件所对应的每个存储节点中主存储节点和/或副存储节点的地址;所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用;
接收模块,用于分别从所述第一文件所对应的每个存储节点接收对于所述数据写入请求的执行结果。
可选地,所述存储节点包括块服务器或扩展节点;
当所述存储节点是块服务器时,所述第一文件所对应的每个存储节点包括:所述第一文件的可写块对应的所有块服务器,所述块服务器包括主块服务器和副块服务器;
当所述存储节点是扩展节点时,所述第一文件所对应的每个存储节点包括:所有存放所述第一文件的副本的扩展节点,所述扩展节点包括主扩展节点和副扩展节点。
可选地,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识。
可选地,所述客户端进程标识是全局唯一的标识,每个客户端进程标识唯一对应一个客户端进程;
所述线程标识是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。
可选地,所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用包括:所述存储节点地址供所述主存储节点和所述副存储节点之间交互写入位置指示信息,以保证多个副本的字节序一致。
一种分布式系统中的文件写入装置,设置于主存储节点,包括:
存储模块,用于接收到客户端对于第一文件的数据写入请求后,将其中携带的写请求标识与所确定的所述第一文件的写入位置指示信息对应保存;
位置配置模块,用于根据所述数据写入请求携带的存储节点地址,将所述写请求标识及对应的写入位置指示信息发送给副存储节点,所述存储节点地址包括所述第一文件所对应的副存储节点的地址;或者,当所述副存储节点根据写请求标识进行查询时返回对应于该写请求标识的写入位置指示信息。
可选地,所述当副存储节点根据写请求标识进行查询时返回对应于该写请求标识的写入位置指示信息包括:
所述位置配置模块根据副存储节点查询所用的写请求标识,查找与该写请求标识对应保存的写入位置指示信息;将所述写入位置指示信息返回给进行查询的所述副存储节点,或者将所述写入位置信息及查询所用的写请求标识返回给进行查询的所述副存储节点。
可选地,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识;
所述客户端进程标识是全局唯一的标识,每个客户端进程标识唯一对应一个客户端进程;
所述线程标识是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。
可选地,所述存储模块将写入位置指示信息与所述数据写入请求中包含的写请求标识对应保存包括:
所述存储模块将所述数据写入请求中包含的写请求标识和所述写入位置指示信息保存为第一键值对,所述写请求标识作为键名,所述写入位置指示信息作为键值。
一种分布式系统中的文件写入装置,设置于副存储节点,包括:
位置确认模块,用于接收到客户端对于第一文件的数据写入请求后,根据所述数据写入请求中携带的存储节点地址和写请求标识向主存储节点进行查询得到写入位置指示信息,所述存储节点地址包括所述第一文件所对应的主存储节点的地址;或者根据所述数据写入请求中携带的写请求标识从主存储节点接收写入位置指示信息;
执行模块,用于根据所述写入位置指示信息对所述第一文件进行写入,将执行结果返回给所述客户端。
可选地,所述位置确认模块还用于在接收到客户端对于第一文件的数据写入请求后,将所述数据写入请求中携带的写请求标识和待写入的数据对应保存。
可选地,所述位置确认模块将所述数据写入请求中携带的写请求标识和待写入的数据对应保存包括:
所述位置确认模块将所述数据写入请求中携带的写请求标识和所述待写入的数据保存为第二键值对,所述写请求标识作为键名,所述待写入的数据作为键值。
可选地,所述位置确认模块根据数据写入请求中携带的存储节点地址和写请求标识向主存储节点进行查询得到写入位置指示信息包括:根据所述数据写入请求中的存储节点地址确定主存储节点的地址,向所确定的地址发送携带所述写请求标识的查询请求,将所述主存储节点返回的写入位置指示信息,和与所述写请求标识对应保存的待写入的数据进行对应;
所述位置确认模块根据数据写入请求中携带的写请求标识从主存储节点接收写入位置指示信息包括:当收到所述主存储节点发送的包含写请求标识和写入位置指示信息的第一消息时,根据所述第一消息中的写请求标识,查找对应保存的待写入的数据,将查找到的待写入的数据和所述第一消息中的写入位置指示信息进行对应;
所述执行模块根据所述写入位置指示信息对所述第一文件进行写入包括:根据待写入的数据对应的写入位置指示信息,在所述第一文件的相应位置写入所述待写入的数据。
可选地,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识;
所述客户端进程标识线程标识是全局唯一的标识,每个客户端进程标识唯一对应一个客户端进程;
所述线程标识是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。
本申请包括以下优点:
本申请至少一个实施例为分布式文件系统添加了一种新的客户端侧的数据写入方式,客户端待写入的数据直接发送到主、副存储节点,并直接从每个存储节点接收执行结果,因此待写入的数据只经过1跳就到达每个存储节点;客户端在发送时还携带唯一标识一次数据写入请求的写请求标识和存储节点地址,以方便主、副存储节点之间交互写入位置指示信息,以保证多个副本字节序一致;本备选方案可以在保证每个副本字节序的一致性的前提下,将数据发送的跳数降低为1次,有效降低了数据转发带来的延时开销。本实施例的可选实施方式还可以根据不同情况选择写请求标识的不同内容,增加灵活性。
本申请至少一个实施例为分布式文件系统添加了一种新的主存储节点侧的数据写入方式,写入位置指示信息由主存储节点确定后,发送给副存储节点或提供给副存储节点查询,写入位置指示信息与唯一标识一次数据写入请求的写请求标识一一对应,以区分不同数据写入请求的写入位置指示信息;本备选方案可以在保证每个副本字节序的一致性的前提下,将数据发送的跳数降低为1次,有效降低了数据转发带来的延时开销。本实施例的可选实施方式还可以根据不同情况选择写请求标识的不同内容,增加灵活性;将写请求标识和写入位置指示信息保存为键值对,可以提高处理速度。
本申请至少一个实施例为分布式文件系统添加了一种新的副存储节点侧的数据写入方式,副存储节点从客户端直接接收数据写入请求,直接返回执行结果给客户端;通过写请求标识向主存储节点查询写入位置指示信息,或从主存储节点接收相应的写入位置指示信息;本备选方案可以在保证每个副本字节序的一致性的前提下,将数据发送的跳数降低为1次,有效降低了数据转发带来的延时开销。本实施例的可选实施方式副存储节点还可以对应保存写入请求标识和待写入的数据,这样可以在收到数据写入请求后再接收或查询写入位置指示信息,而且可以实现对多个数据写入请求的并行处理。本实施例的又一个可选实施方式还可以根据不同情况选择写请求标识的不同内容,增加灵活性;将写请求标识和写入位置指示信息保存为键值对,可以提高处理速度。
当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有优点。
附图说明
图1是StreamLayer的示意图;
图2是实施例一的分布式系统中的文件写入方法的流程示意图;
图3是实施例二的分布式系统中的文件写入方法的流程示意图;
图4是实施例三的分布式系统中的文件写入方法的流程示意图;
图5是实施例五的分布式系统中的文件写入装置的示意图;
图6是实施例六的分布式系统中的文件写入装置的示意图;
图7是实施例七的分布式系统中的文件写入装置的示意图。
具体实施方式
下面将结合附图及实施例对本申请的技术方案进行更详细的说明。
需要说明的是,如果不冲突,本申请实施例以及实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在一个典型的配置中,客户端或服务器的计算设备可包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存(memory)。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。内存可能包括模块1,模块2,……,模块N(N为大于2的整数)。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM),快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
实施例一、一种分布式系统中的文件写入方法,如图2所示,包括步骤S110~S120:
S110、客户端收到对于第一文件的写请求后,分别发送对于所述第一文件的数据写入请求到所述第一文件所对应的每个存储节点;所述数据写入请求中携带:与所述第一文件数据写入请求对应的写请求标识、存储节点地址;所述存储节点地址包括所述第一文件所对应的每个存储节点中主存储节点和/或副存储节点的地址;所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用;
S120、所述客户端分别从所述第一文件所对应的每个存储节点接收对于所述数据写入请求的执行结果。
本实施例中,所述客户端是直接发送数据写入请求给包括主存储节点和副存储节点在内的每个存储节点,并且直接从每个存储节点接收执行结果,因此只需要一跳就可以完成数据的传输,减少了延时。其中,客户端需要收到所述第一文件对应的所有存储节点回复的表示写成功的执行结果后,该次数据写入请求才算成功。
本实施例中,所述存储节点包括但不限于块服务器(Chunkserver)、扩展节点等。当存储节点是块服务器时,所述第一文件所对应的每个存储节点可以包括:所述第一文件的可写块(可以写数据的块)对应的所有块服务器,所述块服务器包括主块服务器和副块服务器;当所述存储节点是扩展节点时,所述第一文件对应的每个存储节点可以包括:所有存放所述第一文件的副本的扩展节点,所述扩展节点包括主扩展节点和副扩展节点。
本实施例中,所述客户端发往存储节点的数据写入请求中除了待写入的数据外,还添加了:写请求标识和存储节点地址。
其中,所述写请求标识可以唯一标识一个文件的一次数据写入请求,因此与该文件该次数据写入请求所使用的写入位置指示信息也是一一对应的关系。由于写入位置指示信息是由主存储节点确定的,因此副存储节点在执行写入时,除了收到所述数据写入请求以外,还需要获得该数据写入请求对应的写入位置指示信息;而所述主、副存储节点可能会在一段时间内收到多个数据写入请求(针对多个不同文件的数据写入请求、和/或针对同一文件的多个数据写入请求),因此它们需要通过所述写请求标识来区分和辨识不同数据写入请求中的写入位置指示信息。
其中,所述存储节点地址可以使所述第一文件所对应的主、副存储节点之间通过该存储节点地址进行交互;当设置为固定由主存储节点主动将确定的写入位置指示信息发送给副存储节点时,所述存储节点地址可以只包括副存储节点的地址;当设置为固定由副存储节点主动向主存储节点查询写入位置指示信息时,所述数据写入请求中的存储节点地址可以只包括主存储节点的地址。当然,所述存储节点地址也可以既包括主存储节点的地址,也包括副存储节点的地址,并注明每个地址是主存储节点还是副存储节点,供主、副存储节点交互时选用。
其中,所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用可以包括:所述存储节点地址供所述主存储节点和所述副存储节点之间交互写入位置指示信息,以保证多个副本的字节序一致。
本实施例的一种备选方案中,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识。
本备选方案中,所述第一文件的标识在所述客户端一次性发送多个数据写入请求的场景中(客户端进程标识和线程标识都相同),可以用来区分不同的写入对象。假如客户端和存储节点都设置为固定针对一个文件(或一个块)提供服务,则可以省略所述第一文件的标识。在一个文件中只有一个块可以写数据的场景中,所述第一文件的标识可以但不限于为块标识(ChunkID)。所述客户端可以通过向主控端(Master)发送请求来获知所述第一文件的标识或所述第一文件中用于数据写入的块的块标识。
本备选方案中,所述客户端进程标识可以是全局唯一的标识(ID),每个客户端进程标识可以唯一对应一个客户端进程;所述客户端进程标识在多个客户端同时写一个文件的场景中,可以用来区分不同的客户端。
本备选方案中,所述线程标识也可以是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。所述线程标识在同一个进程内多个线程同时写一个文件的场景下,可以用来区分不同的线程。
本备选方案中,客户端进程标识和线程标识可以组成全局唯一的标识对,在多进程针对一个文件写入的场景下,可以用来区分不同的数据写入请求。该标识对也可以用一个标识来代替。
实施例二、一种分布式系统中的文件写入方法,如图3所示,包括步骤S210~S220:
S210、主存储节点接收到客户端对于第一文件的数据写入请求后,将其中携带的写请求标识与所确定的所述第一文件的写入位置指示信息对应保存;
S220、所述主存储节点根据所述数据写入请求携带的存储节点地址,将所述写请求标识及对应的写入位置指示信息发送给副存储节点,所述存储节点地址包括所述第一文件所对应的副存储节点的地址;或者,当所述副存储节点根据写请求标识进行查询时返回对应于该写请求标识的写入位置指示信息。
本实施例中,所述写入位置指示信息是另外发送(而不再是和待写入的数据一起发送)给副存储节点,或提供给副存储节点查询的;如果有多个副存储节点,可以主存储节点主动发送给全部副存储节点,或者等待每个副存储节点查询;也可以由主存储节点主动发送给一部分副存储节点,等待另一部分副存储节点查询。
本实施例中,所述写入位置指示信息可以但不限于包括:本次写入数据时在第一文件中的起始写入位置,该起始写入位置可以表示为偏移量的形式。
本实施例中,所述主存储节点可以同现有技术一样,根据数据写入请求及确定的写入位置指示信息将待写入的数据写入相应文件(或块)中,将执行结果返回给客户端。
本实施例中,所述主存储节点将所述写请求标识及对应的写入位置指示信息一起发送给副存储节点,是为了让副存储节点通过所述写请求标识确定该写入位置指示信息是对应于哪一个数据写入请求的。
本实施例的一种备选方案中,所述当副存储节点根据写请求标识进行查询时返回对应于该写请求标识的写入位置指示信息可以包括:
所述主存储节点根据副存储节点查询所用的写请求标识,查找与该写请求标识对应保存的写入位置指示信息,将所找到的写入位置指示信息单独返回给进行查询的所述副存储节点,或者和查询所用的写请求标识一起返回给进行查询的所述副存储节点。
本实施例中,所述主存储节点对应保存写请求标识与写入位置指示信息可以但不限于是将两者相对应后进行缓存;在发送或副存储节点查询完毕后,主存储节点还可以删除相应的写请求标识及其对应的写入位置指示信息。
本实施例的一种备选方案中,所述写请求标识可以包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识;
所述客户端进程标识可以是全局唯一的标识,每个客户端进程标识可以唯一对应一个客户端进程;
所述线程标识可以是全局唯一的标识,或者可以是由每个客户端分别维护的递增的标识;所述线程标识在同一个进程内多个线程同时写一个文件时可以用来区分不同的线程。
本实施例的一种备选方案中,所述将写入位置指示信息与所述数据写入请求中包含的写请求标识对应保存可以包括:
将所述数据写入请求中包含的写请求标识和所述写入位置指示信息保存为第一键值对,所述写请求标识作为键名,所述写入位置指示信息作为键值。
在其它备选方案中,也可以采用其它形式来对应保存所述写入位置指示信息和写请求标识。
实施例三、一种分布式系统中的文件写入方法,如图4所示,包括步骤S310~S320:
S310、副存储节点接收到客户端对于第一文件的数据写入请求后,根据所述数据写入请求中携带的存储节点地址和写请求标识向主存储节点进行查询得到写入位置指示信息,所述存储节点地址包括所述第一文件所对应的主存储节点的地址;或者根据所述数据写入请求中携带的写请求标识从主存储节点接收写入位置指示信息;
S320、所述副存储节点根据所述写入位置指示信息对所述第一文件进行写入,将执行结果返回给所述客户端。
本实施例中,副存储节点直接从客户端接收数据写入请求,直接返回执行结果给客户端,因此只需要一跳就可以完成数据的传输,减少了延时。副存储节点从数据写入请求获得待写入的数据,从主存储节点另行获得写入位置指示信息。获得写入位置指示信息的方式有两种,一种是发送数据写入请求中携带的写请求标识到主存储节点进行查询,根据查询到的写入位置指示信息,在相应文件(或块)中写入所述数据写入请求中携带的待写入的数据;另一种是从主存储节点接收写请求标识及其对应的写入位置指示信息,将所携带的写请求标识与所接收的写请求标识相同的数据写入请求中的待写入的数据,根据所接收的写入位置指示信息写入相应文件(或块)中。
本实施例的一种备选方案中,所述副存储节点接收到客户端对于第一文件的数据写入请求后还可以包括:
所述副存储节点将所述数据写入请求中携带的写请求标识和待写入的数据对应保存。
本备选方案中,当副存储节点收到主存储节点发送的写请求标识及其对应的写入位置指示信息后,副存储节点在对应保存的写请求标识和待写入的数据中,查找匹配的写请求标识,找到后将对应的待写入的数据按照接收到写入位置指示信息,写入相应文件(或块)中。或者,副存储节点根据保存的写请求标识向主存储节点进行查询。
本备选方案中,副存储节点可以在收到数据写入请求后再去接收或查询写入位置指示信息。而且副存储节点可以并行处理多个数据写入请求;当收到一个数据写入请求后,先对应保存其中的写请求标识和待写入的数据;待确定相应的写入位置指示信息后,再执行写入操作。
其它备选方案中,副存储节点也可以直接保存数据写入请求;还可以在收到写入位置指示信息之前先阻塞数据写入请求。
本备选方案中,所述副存储节点对应保存写请求标识与待写入的数据可以但不限于是将两者相对应后进行缓存;在完成写入后,副存储节点还可以删除相应的写请求标识及其对应的写入位置指示信息。
本备选方案中,所述副存储节点将所述数据写入请求中携带的写请求标识和待写入的数据对应保存可以包括:
所述副存储节点将所述数据写入请求中携带的写请求标识和所述待写入的数据保存为第二键值对,所述写请求标识作为键名,所述待写入的数据作为键值。
在其它备选方案中,也可以采用其它形式来对应保存所述待写入的数据和写请求标识。
本备选方案中,所述位置确认模块根据数据写入请求中携带的存储节点地址和写请求标识向主存储节点进行查询得到写入位置指示信息可以包括:
根据所述数据写入请求中的存储节点地址确定主存储节点的地址,向所确定的地址发送携带所述写请求标识的查询请求,将所述主存储节点返回的写入位置指示信息,和与所述写请求标识对应保存的待写入的数据进行对应;
所述位置确认模块根据数据写入请求中携带的写请求标识从主存储节点接收写入位置指示信息可以包括:
当收到所述主存储节点发送的包含写请求标识和写入位置指示信息的第一消息时,根据所述第一消息中的写请求标识,查找对应保存的待写入的数据,将查找到的待写入的数据和所述第一消息中的写入位置指示信息进行对应;
所述执行模块根据所述写入位置指示信息对所述第一文件进行写入可以包括:
根据待写入的数据对应的写入位置指示信息,在所述第一文件的相应位置写入所述待写入的数据。
本实施例的一种备选方案中,所述写请求标识可以包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识;
所述客户端进程标识可以是全局唯一的标识,每个客户端进程标识可以唯一对应一个客户端进程;
所述线程标识可以是全局唯一的标识,或者是由每个客户端分别维护的递增的标识;所述线程标识在同一个进程内多个线程同时写一个文件时可以用来区分不同的线程。
实施例四、一种分布式系统中的文件写入方法,其中客户端、主存储节点、副存储节点分别按照实施例一~三的方法进行操作。
下面用两个例子说明上述实施例。以下的两个例子里,所述主存储节点为主块服务器(PrimaryChunkserver),副存储节点为副块服务器(SecondaryChunkserver);所述写请求标识包括进程标识(ClientID)、线程标识(Request ID)、块标识(ChunkID);所述写入位置指示信息采用在Chunk中的偏移量(offset)表示。主、副存储节点之间交互offset的规则可以称为Offset扩散协议。
两个例子中,主、副存储节点以键值对(key-value)的形式保存为每次写请求分配的offset。主存储节点缓存的元(Meta)数据中所保存的键值对为所述第一键值对,键名(key)是由三个标识组成的写请求标识:<ChunkID,ClientID,RequestID>,键值(value)是offset;所述第一键值对为{<ChunkID,ClientID,RequestID>,offset}。副存储节点缓存的Meta数据中所保存的键值对为所述第二键值对,key同样是由三个标识组成的写请求标识:<ChunkID,ClientID,RequestID>,value是data(即所述待写入的数据);所述第二键值对为{<ChunkID,ClientID,RequestID>,data}。
两个例子中,主块服务器采用Offset扩散协议,用来将确定的offset扩散到副块服务器。扩散的内容是缓存的第一键值对,扩散的方法有两种,两个例子中各自描述其中一种:
(1)主块服务器主动推送到副块服务器;
(2)主块服务器等待副块服务器查询;
副块服务器所采用的Offset扩散协议与主块服务器的相同,相应承担副块服务器侧的内容。
第一个例子中,由主块服务器主动推送offset,数据写入流程包括步骤501~509:
501、客户端启动,向主控端发送获取文件F所有可以写的块的信息的请求;本例中客户端专门用于文件F的写入,在其它例子中,客户端也可以等收到用户对于某个文件的写请求后,再向主控端获取相应文件中可以写的块的信息;
502、所述主控端收到请求后在内存中找到文件F可以写的块的信息(比如但不限于ChunkID)并返回给所述客户端;
503、所述客户端收到用户的写请求后,将数据写入请求发往相应块的所有块服务器,请求中除了待写入的数据和ChunkID外,还包含主块服务器的地址,副块服务器的地址,ClientID,RequestID;
504、当所述主块服务器收到所述数据写入请求后,确定所述待写入的数据在块内的offset,生成并缓存第一键值对(可以看成是元数据):{<ChunkID,ClientID,RequestID>,offset};
505、所述主块服务器根据写请求中的副块服务器的地址,将所述第一键值对扩散到相应的副块服务器;扩散成功后可以将缓存的所述第一键值对删除;
506、当所述副块服务器收到数据写入请求后,生成并缓存第二键值对:{<ChunkID,ClientID,RequestID>,data},其中data为所述待写入的数据;
507、所述副块服务器收到所述主块服务器的扩散内容后,根据扩散内容中第一键值对中的key,在缓存中查找具有相同key的第二键值对,将所找到的第二键值对中的data,根据第一键值对中的offset写到块中;写成功后可以删掉缓存的所述第二键值对:{<ChunkID,ClientID,RequestID>,data};
508、每个块服务器写完成后,各自返回写成功的执行结果给客户端;
509、所述客户端收到所有块服务器写成功的执行结果后返回给用户表示写成功的消息。返回到步骤503,准备处理新的写请求。
第二个例子中,主块服务器等待副块服务器查询offset,数据写入流程包括步骤601~609:
601、客户端启动,向主控端发送获取文件F所有可以写的块的信息的请求;本例中客户端专门用于文件F的写入,在其它例子中,客户端也可以等收到用户对于某个文件的写请求后,再向主控端获取相应文件中可以写的块的信息;
602、所述主控端收到请求后在内存中找到文件F可以写的块的信息(比如但不限于ChunkID)并返回给所述客户端;
603、所述客户端收到用户的写请求后,将数据写入请求发往这个块的所有块服务器,请求中除了待写入的数据和ChunkID外,还包含主块服务器的地址,副块服务器地址,ClientID,RequestID。
604、当所述主块服务器收到所述数据写入请求后,确定所述待写入的数据在块内的offset,生成并缓存第一键值对(可以看成是元数据):{<ChunkID,ClientID,RequestID>,offset}
605、当所述副块服务器收到数据写入请求后,生成并缓存第二键值对:{<ChunkID,ClientID,RequestID>,data},其中data为所述待写入的数据;
606、副块服务器根据写请求中主块服务器的地址,主动向主块服务器查询数据的offset,副块服务器根据查询到的offset将data写到块中,写成功后可以删掉缓存的所述第二键值对:{<ChunkID,ClientID,RequestID>,data};
607、主块服务器在副块服务器查询成功后,可以将缓存的、已被查询过的所述第一键值对删除。
608、每个块服务器写完成后,各自返回写成功的执行结果给客户端。
609、所述客户端收到所有块服务器写成功的执行结果后返回给用户表示写成功的消息。返回到步骤603,准备处理新的写请求。
实施例五、一种分布式系统中的文件写入装置,设置于客户端,如图5所示,包括:
请求模块51,用于收到对于第一文件的写请求后,分别发送对于所述第一文件的数据写入请求到所述第一文件所对应的每个存储节点;所述数据写入请求中携带:与所述第一文件数据写入请求对应的写请求标识、存储节点地址;所述存储节点地址包括所述第一文件所对应的每个存储节点中主存储节点和/或副存储节点的地址;所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用;
接收模块52,用于分别从所述第一文件所对应的每个存储节点接收对于所述数据写入请求的执行结果。
本实施例中,所述请求模块51是上述装置中负责发送数据写入请求的部分,可以是软件、硬件或两者的结合。
本实施例中,所述接收模块52是上述装置中负责接收执行结果的部分,可以是软件、硬件或两者的结合。
本实施例的一种备选方案中,所述存储节点包括块服务器或扩展节点;
当所述存储节点是块服务器时,所述第一文件所对应的每个存储节点包括:所述第一文件的可写块对应的所有块服务器,所述块服务器包括主块服务器和副块服务器;
当所述存储节点是扩展节点时,所述第一文件所对应的每个存储节点包括:所有存放所述第一文件的副本的扩展节点,所述扩展节点包括主扩展节点和副扩展节点。
本实施例的一种备选方案中,所述写请求标识可以包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识。
本备选方案中,所述客户端进程标识可以是全局唯一的标识,每个客户端进程标识可以唯一对应一个客户端进程;
所述线程标识可以是全局唯一的标识,或者可以是由每个客户端分别维护的递增的标识;所述线程标识在同一个进程内多个线程同时写一个文件时可以用来区分不同的线程。
本实施例的一种备选方案中,所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用可以包括:所述存储节点地址供所述主存储节点和所述副存储节点之间交互写入位置指示信息,以保证多个副本的字节序一致。
本实施例的其它实现细节可参考实施例一。
实施例六、一种分布式系统中的文件写入装置,设置于主存储节点,如图6所示,包括:
存储模块61,用于接收到客户端对于第一文件的数据写入请求后,将其中携带的写请求标识与所确定的所述第一文件的写入位置指示信息对应保存;
位置配置模块62,用于根据所述数据写入请求携带的存储节点地址,将所述写请求标识及对应的写入位置指示信息发送给副存储节点,所述存储节点地址包括所述第一文件所对应的副存储节点的地址;或者,当所述副存储节点根据写请求标识进行查询时返回对应于该写请求标识的写入位置指示信息。
本实施例中,所述存储模块61是上述装置中负责对应保存写请求标识和写入位置指示信息的部分,可以是软件、硬件或两者的结合。
本实施例中,所述位置配置模块62是上述装置中负责向副存储节点提供写入位置指示信息的部分,可以是软件、硬件或两者的结合。
本实施例的一种备选方案中,所述当所述副存储节点根据写请求标识进行查询时返回对应于该写请求标识的写入位置指示信息可以包括:
所述位置配置模块根据副存储节点查询所用的写请求标识,查找与该写请求标识对应保存的写入位置指示信息;将所述写入位置指示信息返回给进行查询的所述副存储节点,或者将所述写入位置信息及查询所用的写请求标识返回给进行查询的所述副存储节点。
本实施例的一种备选方案中,所述写请求标识可以包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识;
所述客户端进程标识可以是全局唯一的标识,每个客户端进程标识可以唯一对应一个客户端进程;
所述线程标识可以是全局唯一的标识,或者可以是由每个客户端分别维护的递增的标识;所述线程标识在同一个进程内多个线程同时写一个文件时可以用来区分不同的线程。
本实施例的一种备选方案中,所述存储模块将写入位置指示信息与所述数据写入请求中包含的写请求标识对应保存可以包括:
所述存储模块将所述数据写入请求中包含的写请求标识和所述写入位置指示信息保存为第一键值对,所述写请求标识作为键名,所述写入位置指示信息作为键值。
本实施例的其它实现细节可参考实施例二。
实施例七、一种分布式系统中的文件写入装置,设置于副存储节点,如图7所示,包括:
位置确认模块71,用于接收到客户端对于第一文件的数据写入请求后,根据所述数据写入请求中携带的存储节点地址和写请求标识向主存储节点进行查询得到写入位置指示信息,所述存储节点地址包括所述第一文件所对应的主存储节点的地址;或者根据所述数据写入请求中携带的写请求标识从主存储节点接收写入位置指示信息;
执行模块72,用于根据所述写入位置指示信息对所述第一文件进行写入,将执行结果返回给所述客户端。
本实施例中,所述位置确认模块71是上述装置中负责根据写请求标识确定写入位置指示信息的部分,可以是软件、硬件或两者的结合。
本实施例中,所述执行模块72是上述装置中负责写入数据并返回执行结果给客户端的部分,可以是软件、硬件或两者的结合。
本实施例的一种备选方案中,所述位置确认模块还可以用于在接收到客户端对于第一文件的数据写入请求后,将所述数据写入请求中携带的写请求标识和待写入的数据对应保存。
本备选方案中,所述位置确认模块将所述数据写入请求中携带的写请求标识和待写入的数据对应保存可以包括:
所述位置确认模块将所述数据写入请求中携带的写请求标识和所述待写入的数据保存为第二键值对,所述写请求标识作为键名,所述待写入的数据作为键值。
本备选方案中,所述位置确认模块根据数据写入请求中携带的存储节点地址和写请求标识向主存储节点进行查询得到写入位置指示信息可以包括:
根据所述数据写入请求中的存储节点地址确定主存储节点的地址,向所确定的地址发送携带所述写请求标识的查询请求,将所述主存储节点返回的写入位置指示信息,和与所述写请求标识对应保存的待写入的数据进行对应;
所述位置确认模块根据数据写入请求中携带的写请求标识从主存储节点接收写入位置指示信息可以包括:
当收到所述主存储节点发送的包含写请求标识和写入位置指示信息的第一消息时,根据所述第一消息中的写请求标识,查找对应保存的待写入的数据,将查找到的待写入的数据和所述第一消息中的写入位置指示信息进行对应;
所述执行模块根据所述写入位置指示信息对所述第一文件进行写入可以包括:
根据待写入的数据对应的写入位置指示信息,在所述第一文件的相应位置写入所述待写入的数据。
本实施例的一种备选方案中,所述写请求标识可以包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识;
所述客户端进程标识可以是全局唯一的标识,每个客户端进程标识可以唯一对应一个客户端进程;
所述线程标识可以是全局唯一的标识,或者是由每个客户端分别维护的递增的标识;所述线程标识在同一个进程内多个线程同时写一个文件时可以用来区分不同的线程。
本实施例的其它实现细节可参考实施例三。
实施例八、一种分布式系统,包括客户端、主存储节点和副存储节点;其中,所述客户端包括实施例五所述的装置;主存储节点包括实施例六所述的装置;副存储节点包括实施例七所述的装置。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。
当然,本申请还可有其他多种实施例,在不背离本申请精神及其实质的情况下,熟悉本领域的技术人员当可根据本申请作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请的权利要求的保护范围。
Claims (28)
1.一种分布式系统中的文件写入方法,包括:
客户端收到对于第一文件的写请求后,将对于所述第一文件的数据写入请求分别发送到所述第一文件所对应的每个存储节点;
其中所述数据写入请求中至少包括:与所述第一文件数据写入请求对应的写请求标识、存储节点地址和待写入数据;
所述存储节点地址包括所述第一文件所对应的每个存储节点中主存储节点的地址和/或副存储节点的地址;所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用;
所述客户端分别从所述第一文件所对应的每个存储节点接收对于所述数据写入请求的执行结果。
2.如权利要求1所述的方法,其特征在于,
所述存储节点包括块服务器或扩展节点;
当所述存储节点是块服务器时,所述第一文件所对应的每个存储节点包括:所述第一文件的可写块对应的所有块服务器,所述块服务器包括主块服务器和副块服务器;
当所述存储节点是扩展节点时,所述第一文件所对应的每个存储节点包括:所有存放所述第一文件的副本的扩展节点,所述扩展节点包括主扩展节点和副扩展节点。
3.如权利要求1所述的方法,其特征在于,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识。
4.如权利要求3所述的方法,其特征在于:
所述客户端进程标识是全局唯一的标识,每个客户端进程标识唯一对应一个客户端进程;
所述线程标识是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。
5.如权利要求1所述的方法,其特征在于,所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用包括:
所述存储节点地址供所述主存储节点和所述副存储节点之间交互写入位置指示信息,以保证多个副本的字节序一致。
6.一种分布式系统中的文件写入方法,包括:
主存储节点接收到客户端对于第一文件的数据写入请求后,将其中携带的写请求标识与所确定的所述第一文件的写入位置指示信息对应保存;其中,所述第一文件的数据写入请求由所述客户端在收到对于第一文件的写请求后,发送给第一文件对应的每个存储节点,其中携带与所述第一文件的数据写入请求对应的写请求标识、存储节点地址和待写入数据;
所述主存储节点根据所述数据写入请求携带的存储节点地址,将所述写请求标识及对应的写入位置指示信息发送给副存储节点,所述存储节点地址包括所述第一文件所对应的副存储节点的地址;或者,当所述第一文件对应的副存储节点根据写请求标识和所述存储节点地址中所述第一文件对应的主存储节点的地址,向本主存储节点进行查询时,返回对应于该写请求标识的写入位置指示信息。
7.如权利要求6所述的方法,其特征在于,所述当副存储节点根据写请求标识进行查询时返回对应于该写请求标识的写入位置指示信息包括:
所述主存储节点根据副存储节点查询所用的写请求标识,查找与该写请求标识对应保存的写入位置指示信息;将所述写入位置指示信息返回给进行查询的所述副存储节点,或者将所述写入位置信息及查询所用的写请求标识返回给进行查询的所述副存储节点。
8.如权利要求6所述的方法,其特征在于,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识;
所述客户端进程标识是全局唯一的标识,每个客户端进程标识唯一对应一个客户端进程;
所述线程标识是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。
9.如权利要求6所述的方法,其特征在于,所述将写请求标识与所确定的所述第一文件的写入位置指示信息对应保存包括:
将所述数据写入请求中包含的写请求标识和所述写入位置指示信息保存为第一键值对,所述写请求标识作为键名,所述写入位置指示信息作为键值。
10.一种分布式系统中的文件写入方法,包括:
副存储节点接收到客户端对于第一文件的数据写入请求后,根据所述数据写入请求中携带的存储节点地址和写请求标识向所述第一文件对应的主存储节点进行查询得到写入位置指示信息,所述存储节点地址包括所述第一文件所对应的主存储节点的地址;或者根据所述数据写入请求中携带的写请求标识从所述第一文件对应的主存储节点接收写入位置指示信息;其中,所述第一文件的数据写入请求由所述客户端在收到对于第一文件的写请求后,发送给第一文件对应的每个存储节点,其中携带与所述第一文件的数据写入请求对应的写请求标识、存储节点地址和待写入数据;
所述副存储节点根据所述写入位置指示信息对所述第一文件进行写入,将执行结果返回给所述客户端。
11.如权利要求10所述的方法,其特征在于,所述副存储节点接收到客户端对于第一文件的数据写入请求后还包括:
所述副存储节点将所述数据写入请求中携带的写请求标识和待写入的数据对应保存。
12.如权利要求11所述的方法,其特征在于,所述副存储节点将所述数据写入请求中携带的写请求标识和待写入的数据对应保存包括:
所述副存储节点将所述数据写入请求中携带的写请求标识和所述待写入的数据保存为第二键值对,所述写请求标识作为键名,所述待写入的数据作为键值。
13.如权利要求11所述的方法,其特征在于,所述根据数据写入请求中携带的存储节点地址和写请求标识向主存储节点进行查询得到写入位置指示信息包括:根据所述数据写入请求中的存储节点地址确定主存储节点的地址,向所确定的地址发送携带所述写请求标识的查询请求,将所述主存储节点返回的写入位置指示信息,和与所述写请求标识对应保存的待写入的数据进行对应;
所述根据数据写入请求中携带的写请求标识从主存储节点接收写入位置指示信息包括:当收到所述主存储节点发送的包含写请求标识和写入位置指示信息的第一消息时,根据所述第一消息中的写请求标识,查找对应保存的待写入的数据,将查找到的待写入的数据和所述第一消息中的写入位置指示信息进行对应;
所述副存储节点根据所述写入位置指示信息对所述第一文件进行写入包括:根据待写入的数据对应的写入位置指示信息,在所述第一文件的相应位置写入所述待写入的数据。
14.如权利要求10所述的方法,其特征在于,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识;
所述客户端进程标识是全局唯一的标识,每个客户端进程标识唯一对应一个客户端进程;
所述线程标识是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。
15.一种分布式系统中的文件写入装置,设置于客户端,其特征在于,包括:
请求模块,用于收到对于第一文件的写请求后,分别发送对于所述第一文件的数据写入请求到所述第一文件所对应的每个存储节点;所述数据写入请求中携带:与所述第一文件数据写入请求对应的写请求标识、存储节点地址和待写入数据;所述存储节点地址包括所述第一文件所对应的每个存储节点中主存储节点和/或副存储节点的地址;所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用;
接收模块,用于分别从所述第一文件所对应的每个存储节点接收对于所述数据写入请求的执行结果。
16.如权利要求15所述的装置,其特征在于:
所述存储节点包括块服务器或扩展节点;
当所述存储节点是块服务器时,所述第一文件所对应的每个存储节点包括:所述第一文件的可写块对应的所有块服务器,所述块服务器包括主块服务器和副块服务器;
当所述存储节点是扩展节点时,所述第一文件所对应的每个存储节点包括:所有存放所述第一文件的副本的扩展节点,所述扩展节点包括主扩展节点和副扩展节点。
17.如权利要求15所述的装置,其特征在于,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识。
18.如权利要求17所述的装置,其特征在于:
所述客户端进程标识是全局唯一的标识,每个客户端进程标识唯一对应一个客户端进程;
所述线程标识是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。
19.如权利要求15所述的装置,其特征在于,所述存储节点地址供所述主存储节点和所述副存储节点之间交互时使用包括:
所述存储节点地址供所述主存储节点和所述副存储节点之间交互写入位置指示信息,以保证多个副本的字节序一致。
20.一种分布式系统中的文件写入装置,设置于主存储节点,其特征在于,包括:
存储模块,用于接收到客户端对于第一文件的数据写入请求后,将其中携带的写请求标识与所确定的所述第一文件的写入位置指示信息对应保存;其中,所述第一文件的数据写入请求由所述客户端在收到对于第一文件的写请求后,发送给第一文件对应的每个存储节点,其中携带与所述第一文件的数据写入请求对应的写请求标识、存储节点地址和待写入数据;
位置配置模块,用于根据所述数据写入请求携带的存储节点地址,将所述写请求标识及对应的写入位置指示信息发送给副存储节点,所述存储节点地址包括所述第一文件所对应的副存储节点的地址;或者,当所述第一文件对应的副存储节点根据写请求标识和所述存储节点地址中所述第一文件对应的主存储节点的地址,向本主存储节点进行查询时,返回对应于该写请求标识的写入位置指示信息。
21.如权利要求20所述的装置,其特征在于,所述当副存储节点根据写请求标识进行查询时返回对应于该写请求标识的写入位置指示信息包括:
所述位置配置模块根据副存储节点查询所用的写请求标识,查找与该写请求标识对应保存的写入位置指示信息;将所述写入位置指示信息返回给进行查询的所述副存储节点,或者将所述写入位置信息及查询所用的写请求标识返回给进行查询的所述副存储节点。
22.如权利要求20所述的装置,其特征在于,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识;
所述客户端进程标识是全局唯一的标识,每个客户端进程标识唯一对应一个客户端进程;
所述线程标识是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。
23.如权利要求20所述的装置,其特征在于,所述存储模块将写入位置指示信息与所述数据写入请求中包含的写请求标识对应保存包括:
所述存储模块将所述数据写入请求中包含的写请求标识和所述写入位置指示信息保存为第一键值对,所述写请求标识作为键名,所述写入位置指示信息作为键值。
24.一种分布式系统中的文件写入装置,设置于副存储节点,其特征在于,包括:
位置确认模块,用于接收到客户端对于第一文件的数据写入请求后,根据所述数据写入请求中携带的存储节点地址和写请求标识向所述第一文件对应的主存储节点进行查询得到写入位置指示信息,所述存储节点地址包括所述第一文件所对应的主存储节点的地址;或者根据所述数据写入请求中携带的写请求标识从所述第一文件对应的主存储节点接收写入位置指示信息;其中,所述第一文件的数据写入请求由所述客户端在收到对于第一文件的写请求后,发送给第一文件对应的每个存储节点,其中携带与所述第一文件的数据写入请求对应的写请求标识、存储节点地址和待写入数据;
执行模块,用于根据所述写入位置指示信息对所述第一文件进行写入,将执行结果返回给所述客户端。
25.如权利要求24所述的装置,其特征在于:
所述位置确认模块还用于在接收到客户端对于第一文件的数据写入请求后,将所述数据写入请求中携带的写请求标识和待写入的数据对应保存。
26.如权利要求25所述的装置,其特征在于,所述位置确认模块将所述数据写入请求中携带的写请求标识和待写入的数据对应保存包括:
所述位置确认模块将所述数据写入请求中携带的写请求标识和所述待写入的数据保存为第二键值对,所述写请求标识作为键名,所述待写入的数据作为键值。
27.如权利要求25所述的装置,其特征在于,所述位置确认模块根据数据写入请求中携带的存储节点地址和写请求标识向主存储节点进行查询得到写入位置指示信息包括:根据所述数据写入请求中的存储节点地址确定主存储节点的地址,向所确定的地址发送携带所述写请求标识的查询请求,将所述主存储节点返回的写入位置指示信息,和与所述写请求标识对应保存的待写入的数据进行对应;
所述位置确认模块根据数据写入请求中携带的写请求标识从主存储节点接收写入位置指示信息包括:当收到所述主存储节点发送的包含写请求标识和写入位置指示信息的第一消息时,根据所述第一消息中的写请求标识,查找对应保存的待写入的数据,将查找到的待写入的数据和所述第一消息中的写入位置指示信息进行对应;
所述执行模块根据所述写入位置指示信息对所述第一文件进行写入包括:根据待写入的数据对应的写入位置指示信息,在所述第一文件的相应位置写入所述待写入的数据。
28.如权利要求24所述的装置,其特征在于,所述写请求标识包括以下一个或多个:客户端进程标识、线程标识、第一文件的标识;
所述客户端进程标识线程标识是全局唯一的标识,每个客户端进程标识唯一对应一个客户端进程;
所述线程标识是全局唯一的标识,或者是由每个客户端分别维护的递增的标识。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610412690.0A CN107493309B (zh) | 2016-06-13 | 2016-06-13 | 一种分布式系统中的文件写入方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610412690.0A CN107493309B (zh) | 2016-06-13 | 2016-06-13 | 一种分布式系统中的文件写入方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107493309A CN107493309A (zh) | 2017-12-19 |
CN107493309B true CN107493309B (zh) | 2020-07-31 |
Family
ID=60643011
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610412690.0A Active CN107493309B (zh) | 2016-06-13 | 2016-06-13 | 一种分布式系统中的文件写入方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107493309B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108600308B (zh) * | 2018-03-20 | 2021-08-06 | 新华三技术有限公司 | 数据上传方法、装置、存储介质和服务器 |
CN110881277A (zh) * | 2018-07-04 | 2020-03-13 | 华为技术有限公司 | 一种数据存储方法、装置及相关设备 |
CN111209263A (zh) * | 2020-01-14 | 2020-05-29 | 中国建设银行股份有限公司 | 数据存储方法、装置、设备及存储介质 |
CN113268483A (zh) * | 2021-05-24 | 2021-08-17 | 北京金山云网络技术有限公司 | 请求处理方法和装置、电子设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07319744A (ja) * | 1994-05-24 | 1995-12-08 | Nec Corp | フラッシュメモリを用いたファイルシステム |
CN101741911A (zh) * | 2009-12-18 | 2010-06-16 | 中兴通讯股份有限公司 | 基于多副本协同的写操作方法、系统及节点 |
CN102508890A (zh) * | 2011-10-25 | 2012-06-20 | 无锡城市云计算中心有限公司 | 一种对象存储系统中对象一致性操作的方法 |
CN103856569A (zh) * | 2012-11-28 | 2014-06-11 | 方正宽带网络服务股份有限公司 | 一种同步域名系统资源信息的方法及设备 |
CN105426439A (zh) * | 2015-11-05 | 2016-03-23 | 腾讯科技(深圳)有限公司 | 一种元数据的处理方法和装置 |
-
2016
- 2016-06-13 CN CN201610412690.0A patent/CN107493309B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07319744A (ja) * | 1994-05-24 | 1995-12-08 | Nec Corp | フラッシュメモリを用いたファイルシステム |
CN101741911A (zh) * | 2009-12-18 | 2010-06-16 | 中兴通讯股份有限公司 | 基于多副本协同的写操作方法、系统及节点 |
CN102508890A (zh) * | 2011-10-25 | 2012-06-20 | 无锡城市云计算中心有限公司 | 一种对象存储系统中对象一致性操作的方法 |
CN103856569A (zh) * | 2012-11-28 | 2014-06-11 | 方正宽带网络服务股份有限公司 | 一种同步域名系统资源信息的方法及设备 |
CN105426439A (zh) * | 2015-11-05 | 2016-03-23 | 腾讯科技(深圳)有限公司 | 一种元数据的处理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107493309A (zh) | 2017-12-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107562757B (zh) | 基于分布式文件系统的查询、访问方法、装置及系统 | |
US10545914B2 (en) | Distributed object storage | |
CN102708165B (zh) | 分布式文件系统中的文件处理方法及装置 | |
US20150215405A1 (en) | Methods of managing and storing distributed files based on information-centric network | |
US8990243B2 (en) | Determining data location in a distributed data store | |
CN105138571B (zh) | 分布式文件系统及其存储海量小文件的方法 | |
US10831612B2 (en) | Primary node-standby node data transmission method, control node, and database system | |
US20130073691A1 (en) | File Processing Method, System and Server-clustered System for Cloud Storage | |
JP6388339B2 (ja) | 分散キャッシングおよびキャッシュ分析 | |
EP3811229B1 (en) | Hierarchical namespace service with distributed name resolution caching and synchronization | |
CN107493309B (zh) | 一种分布式系统中的文件写入方法及装置 | |
CN107153644B (zh) | 一种数据同步方法及装置 | |
WO2016202199A1 (zh) | 分布式文件系统及其文件元信息管理方法 | |
JP2005050165A (ja) | 分散ストレージ装置のファイル管理方法及び分散ストレージシステム | |
CN108540510B (zh) | 一种云主机创建方法、装置及云服务系统 | |
US9380127B2 (en) | Distributed caching and cache analysis | |
US11775480B2 (en) | Method and system for deleting obsolete files from a file system | |
CN107920101B (zh) | 一种文件访问方法、装置、系统及电子设备 | |
CN104750757A (zh) | 一种基于HBase的数据存储方法和设备 | |
CN111225003B (zh) | 一种nfs节点配置方法和装置 | |
US10545667B1 (en) | Dynamic data partitioning for stateless request routing | |
KR20130038517A (ko) | 분산된 컨테이너들을 사용하여 데이터를 관리하는 시스템 및 방법 | |
CN113301173A (zh) | 域名更新系统及方法、消息转发方法、服务器 | |
CN109992447B (zh) | 数据复制方法、装置及存储介质 | |
CN115129779A (zh) | 数据库的同步方法、装置及可读介质 |
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 |