CN112559450B - 文件访问方法、装置、电子设备及存储介质 - Google Patents
文件访问方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112559450B CN112559450B CN201910854500.4A CN201910854500A CN112559450B CN 112559450 B CN112559450 B CN 112559450B CN 201910854500 A CN201910854500 A CN 201910854500A CN 112559450 B CN112559450 B CN 112559450B
- Authority
- CN
- China
- Prior art keywords
- target file
- written
- server
- content
- file
- 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
- 238000000034 method Methods 0.000 title claims abstract description 70
- 238000001514 detection method Methods 0.000 claims description 3
- 238000013102 re-test Methods 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 21
- 230000006870 function Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000004590 computer program Methods 0.000 description 6
- 230000000977 initiatory effect Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Classifications
-
- 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/13—File access structures, e.g. distributed indices
-
- 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/17—Details of further file system functions
- G06F16/176—Support for shared access to files; File sharing support
- G06F16/1767—Concurrency control, e.g. optimistic or pessimistic approaches
- G06F16/1774—Locking methods, e.g. locking methods for file systems allowing shared and concurrent access to files
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Retry When Errors Occur (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本公开实施例公开了一种文件访问方法、装置、电子设备及存储介质,所述方法包括:接收对目标文件的重试写请求;其中,所述重试写请求中包括所述目标文件的第一写锁及待写内容;释放所述目标文件的第一写锁,并重新打开所述目标文件;根据重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件。该技术方案能够获得操作该目标文件的相关信息,执行写请求及后续的重试写请求的服务器由于不必使用同一服务器,因此在分布式文件***中的服务器发生故障时,能够通过重试的策略选择无故障的服务器保证业务的连续性和可用性。
Description
技术领域
本公开涉及计算机技术领域,具体涉及一种文件访问方法、装置、电子设备及存储介质。
背景技术
分布式文件***中,客户端通常通过负载均衡方式访问分布式文件***中的后端服务器;在当用户通过客户端发送文件的写请求时,如果由于网络、软件、硬件等原因长时间没有收到回应,则客户端会进行重试写请求;但是这种情况下,后端服务器可能会收到多次相同的重试写请求,由于分布式文件***只支持追加写的方式,因此如何确保只有一次的写入成功,并保障数据的正确性成为了分布式文件***需要解决的一项技术问题。
发明内容
本公开实施例提供一种文件访问方法、装置、电子设备及计算机可读存储介质。
第一方面,本公开实施例中提供了一种文件访问方法。
具体的,所述文件访问方法,包括:
接收对目标文件的重试写请求;其中,所述重试写请求中包括所述目标文件的第一写锁及待写内容;
释放所述目标文件的第一写锁,并重新打开所述目标文件;
根据重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件。
进一步地,所述重试写请求中还包括所述目标文件的第一唯一标识。
进一步地,所述重新打开所述目标文件之后,所述重新打开所述目标文件之后,所述方法还包括以下至少之一:
获得分配给重新打开的所述目标文件的第二唯一标识;
获得分配给重新打开所述目标文件的第二写锁。
进一步地,获得分配给重新打开的所述目标文件的第二唯一标识之后,所述方法还包括:
在所述第一唯一标识和所述第二唯一标识不一致时,向客户端返回重试写请求执行失败的结果。
进一步地,根据重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件,包括:
确定所述目标文件的当前长度;
根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件。
进一步地,所述方法还包括:
在确定所述待写内容未被写入所述目标文件后,根据所述待写内容的起始位置将所述待写内容写入所述目标文件中。
进一步地,根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件,包括:
在所述当前长度等于所述目标文件在所述起始位置处的长度加上所述待写内容的长度时,确定所述待写入内容与已有内容是否一致;其中,所述已有内容为所述目标文件中所述起始位置开始且长度与所述待写内容相等的内容;
在所述待写内容与所述已有内容一致时,确定所述待写内容已被写入所述目标文件。
进一步地,根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件,还包括:
所述当前长度等于所述目标文件在所述起始位置处的长度时,确定所述待写内容未被写入所述目标文件。
进一步地,根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件,还包括:
在所述当前长度不等于所述目标文件在所述起始位置处的长度加上所述待写内容的长度,且所述当前长度不等于所述目标文件在所述起始位置处的长度时,向客户端返回重试写请求执行失败的结果。
进一步地,根据所述待写内容的起始位置将所述待写内容写入所述目标文件中之后,还包括:
确定所述待写内容是否成功写入所述目标文件;
在所述待写内容未成功写入所述目标文件,且重试次数未超过预设阈值时,产生对所述目标文件的重试写请求。
第二方面,本公开实施例中提供了一种文件访问方法。
具体的,所述文件访问方法,包括:
向分布式文件***中的第一服务器发送目标文件的写请求;
在预设时间内未接收到所述第一服务器的反馈结果时,向所述分布式文件***中的第二服务器发送所述目标文件的重试写请求;其中,所述第一服务器与所述第二服务器不同。
进一步地,所述向分布式文件***中的第一服务器发送目标文件的写请求之前,还包括:
获取所述目标文件的第一唯一标识及第一写锁。
进一步地,所述重试写请求中包括所述第一唯一标识及第一写锁。
第三方面,本公开实施例中提供了一种文件访问方法。
具体的,所述文件访问方法,包括:
检测用户对目标文件的写操作;
向分布式文件***中的第一服务器发送所述目标文件的写请求;
在预设时间内未接收到所述第一服务器的反馈结果时,向所述分布式文件***中的第二服务器发送所述目标文件的重试写请求;其中,所述第一服务器与所述第二服务器不同。
第四方面,本公开实施例中提供了一种文件访问装置。
具体的,所述文件访问装置,包括:
接收模块,被配置为接收对目标文件的重试写请求;其中,所述重试写请求中包括所述目标文件的第一写锁及待写内容;
释放模块,被配置为释放所述目标文件的第一写锁,并重新打开所述目标文件;
确定模块,被配置为根据重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件。
进一步地,所述重试写请求中还包括所述目标文件的第一唯一标识。
进一步地,所述释放模块之后,所述装置还包括以下至少之一:
第一获取模块,被配置为获得分配给重新打开的所述目标文件的第二唯一标识;
第二获取模块,被配置为获得分配给重新打开所述目标文件的第二写锁。
进一步地,所述第一获取模块之后,所述装置还包括:
返回模块,被配置为在所述第一唯一标识和所述第二唯一标识不一致时,向客户端返回重试写请求执行失败的结果。
进一步地,所述确定模块,包括:
第一确定子模块,被配置为确定所述目标文件的当前长度;
第二确定子模块,被配置为根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件。
进一步地,所述装置还包括:
写入模块,被配置为在确定所述待写内容未被写入所述目标文件后,根据所述待写内容的起始位置将所述待写内容写入所述目标文件中。
进一步地,所述第二确定子模块,包括:
第三确定子模块,被配置为在所述当前长度等于所述目标文件在所述起始位置处的长度加上所述待写内容的长度时,确定所述待写入内容与已有内容是否一致;其中,所述已有内容为所述目标文件中所述起始位置开始且长度与所述待写内容相等的内容;
第四确定子模块,被配置为在所述待写内容与所述已有内容一致时,确定所述待写内容已被写入所述目标文件。
进一步地,所述第二确定子模块,还包括:
第五确定子模块,被配置为所述当前长度等于所述目标文件在所述起始位置处的长度时,确定所述待写内容未被写入所述目标文件。
进一步地,所述第二确定子模块,还包括:
返回子模块,被配置为在所述当前长度不等于所述目标文件在所述起始位置处的长度加上所述待写内容的长度,且所述当前长度不等于所述目标文件在所述起始位置处的长度时,向客户端返回重试写请求执行失败的结果。
进一步地,所述写入模块之后,所述装置还包括:
第六确定子模块,被配置为确定所述待写内容是否成功写入所述目标文件;
产生子模块,被配置为在所述待写内容未成功写入所述目标文件,且重试次数未超过预设阈值时,产生对所述目标文件的重试写请求。
第五方面,本公开实施例中提供了一种文件访问装置。
具体的,所述文件访问装置,包括:
写请求模块,被配置为向分布式文件***中的第一服务器发送目标文件的写请求;
重试写请求模块,被配置为在预设时间内未接收到所述第一服务器的反馈结果时,向所述分布式文件***中的第二服务器发送所述目标文件的重试写请求;其中,所述第一服务器与所述第二服务器不同。
进一步地,所述写请求模块之前,还包括:
第三获取模块,被配置为获取所述目标文件的第一唯一标识及第一写锁。
进一步地,所述重试写请求中包括所述第一唯一标识及第一写锁。
第六方面,本公开实施例中提供了一种文件访问装置。
具体的,所述文件访问装置,包括:
检测模块,被配置为检测用户对目标文件的写操作;
第一发送模块,被配置为向分布式文件***中的第一服务器发送所述目标文件的写请求;
第二发送模块,被配置为在预设时间内未接收到所述第一服务器的反馈结果时,向所述分布式文件***中的第二服务器发送所述目标文件的重试写请求;其中,所述第一服务器与所述第二服务器不同。
所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
在一个可能的设计中,文件访问装置的结构中包括存储器和处理器,所述存储器用于存储一条或多条支持文件访问装置执行上述第一方面、第二方面或第三方面中文件访问方法的计算机指令,所述处理器被配置为用于执行所述存储器中存储的计算机指令。所述文件访问装置还可以包括通信接口,用于文件访问装置与其他设备或通信网络通信。
第七方面,本公开实施例提供了一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现第一方面、第二方面或第三方面所述的方法。
第八方面,本公开实施例提供了一种计算机可读存储介质,用于存储企业账户的安全认证装置所用的计算机指令,其包含用于执行上述第一方面、第二方面或第三方面中文件访问方法所涉及的计算机指令。
本公开实施例提供的技术方案可以包括以下有益效果:
本公开实施例中,在分布式文件***中的服务器接收到对目标文件的重试写请求后,先释放重试写请求中对该目标文件的写锁,并重新打开该目标文件,之后再根据重试写请求及该重新打开的目标文件判断重试写请求中的待写内容是否已被写入目标文件。本公开实施例中分布式文件***中的服务器在接收到目标文件的重试写请求之后,通过重新打开目标文件的方式,能够获得操作该目标文件的相关信息,执行写请求及后续的重试写请求的服务器由于不必使用同一服务器,因此在分布式文件***中的服务器发生故障时,能够通过重试的策略选择无故障的服务器保证业务的连续性和可用性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
结合附图,通过以下非限制性实施方式的详细描述,本公开的其它特征、目的和优点将变得更加明显。在附图中:
图1示出根据本公开一实施例中分布式文件***的实施场景示意图;
图2示出根据本公开一实施方式的文件访问方法的流程图;
图3示出根据图2所示实施方式的步骤S203的流程图;
图4示出根据图3所示实施方式的步骤S302的流程图;
图5示出根据本公开一实施方式中第二服务器产生重试写请求部分的流程图;
图6示出根据本公开另一实施方式的文件访问方法的流程图;
图7示出根据本公开再一实施方式的文件访问方法的流程图;
图8示出根据本公开一实施方式的文件访问装置的结构框图;
图9示出根据图8所示实施方式的确定模块803的结构框图;
图10示出根据图9所示实施方式的所述第二确定子模块902的结构框图;
图11示出根据本公开一实施方式中第二服务器产生重试写请求部分的结构框图;
图12示出根据本公开另一实施方式的文件访问装置的结构框图;
图13示出根据本公开再一实施方式的文件访问装置的结构框图;
图14是适于用来实现根据本公开一实施方式的文件访问方法的电子设备的结构示意图。
具体实施方式
下文中,将参考附图详细描述本公开的示例性实施方式,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施方式无关的部分。
在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
图1示出根据本公开一实施例中分布式文件***的实施场景示意图。如图1所示,该分布式文件***包括客户端101、第一服务器102、第二服务器103、管理服务器104及磁盘文件105。其中,用户可以通过客户端101对磁盘文件105中的文件进行操作;客户端101基于用户对分布式文件的操作,向服务器集群发送用户的操作请求,例如写请求。
首先用户通过客户端101打开文件,客户端101向服务器集群中的服务器发送文件打开请求,该文件打开请求被服务器集群中的第一服务器102响应,第一服务器102向管理服务器104请求打开文件,管理服务器104返回该文件的文件信息(如文件在磁盘中的地址、文件标识、文件长度等)以及第一写锁;第一服务器102将打开的文件标识、第一写锁以及该文件的内容返回给客户端101;用户在客户端101上对打开的文件进行写操作;客户端101将用户写入的内容发送至第一服务器102,以请求写文件。此时如果由于网络、软件、硬件等原因长时间没有收到回应,则客户端101向服务器集群发送重试写请求,该重试写请求被第二服务器103响应。第二服务器103接收到重试写请求之后,释放第一写锁,并重新请求管理服务器打开该文件,管理服务器104将重新打开的该文件的第二写锁以及文件信息等返回给第二服务器103,第二服务器103可以基于文件信息对磁盘文件中的该文件执行写操作,并向客户端101返回结果,如写成功。
为此,本公开实施例提出了如下实施例所述的文件访问方法。
下面通过具体的实施例详细描述本公开提出的文件访问方法。
图2示出根据本公开一实施方式的文件访问方法的流程图。该文件访问方法运行在图1所示服务器集群中的服务器上。如图2所示,所述文件访问方法包括以下步骤S201-S203:
在步骤S201中,接收对目标文件的重试写请求;其中,所述重试写请求中包括所述目标文件的第一写锁及待写内容;
在步骤S202中,释放所述目标文件的第一写锁,并重新打开所述目标文件;
在步骤S203中,根据重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件。
本实施例中,目标文件可以是分布式文件***中的分布式文件;用户可以通过客户端操作分布式文件***中的分布式文件;客户端根据用户的相应操作生成相应的操作请求,并发送至服务器集群中的服务器,以便对该目标文件进行相应操作,客户端可以通过负载均衡策略或者其他预设的充实策略选择向服务器集群中的其中一个服务器发送操作请求。
用户准备向目标文件执行写操作时,首先可以通过客户端打开目标文件,客户端可以将该打开请求发送给服务器集群中的第一服务器,由该第一服务器执行该打开请求,第一服务器在打开该目标文件后,分布式文件***中的管理服务器会自动为该客户端分配该目标文件的第一写锁,保证该目标文件只被该客户端写入;第一服务器还将该第一写锁返回给客户端,以便客户端在下次对该目标文件进行操作时使用。之后客户端可以向该第一服务器发送写请求,以将待写内容写入该目标文件,在第一服务器完成目标文件的写请求之后,可以将写请求的结果(成功或失败)返回给客户端。而如果此时发生网络、软件、硬件等故障,导致客户端无法知晓写请求是否成功时,客户端可以尝试进行重试,也即向服务器集群中的第二服务器发送重试写请求,以保障数据写入的连续性。
本公开实施例中,导致未成功完成写请求或者客户端未接收到写请求的反馈结果的原因之一,可能是执行原始写请求的第一服务器发生了故障。因此,客户端在发起重试写请求时,可以向服务器集群中的第二服务器发送重试写请求,以提高重试写请求的成功率。第一服务器和第二服务器可以不同。
客户端可以将该目标文件的第一写锁以及待写内容携带在重试写请求中,发送至服务器集群中的第二服务器。该第二服务器在接收到重试写请求后,解析出重试写请求中的第一写锁,并请求分布式文件***中的管理服务器释放该第一写锁,并重新打开该目标文件。由于执行重试写请求的第二服务器与执行原始写请求时打开该目标文件的第一服务器可能不是同一个服务器,而该第二服务器上由于没有目标文件的相关信息,无法直接对目标文件执行写操作,因此可以通过释放原来的第一写锁,并重新打开该目标文件,获取该目标文件的相关信息,进而由第二服务器对目标文件进行写操作。通过这种方式,执行写请求和执行重试写请求的服务器不必是同一个服务器,这样能够在分布式文件***中的服务器发生故障时,通过重试的策略选择无故障的服务器能够保证业务的连续性和可用性。
该第二服务器重新打开该目标文件后,可以获得该重新打开的目标文件的相关信息,例如该目标文件的存储地址、唯一标识、长度、重新分配的第二写锁等。之后第二服务器根据重新打开的目标文件以及重试写请求确定待写内容是否已经被写入了该目标文件,如果待写内容已经被写入该目标文件,则第二服务器可以直接向客户端返回写成功的执行结果。如果待写内容没有被写入该目标文件,则第二服务器可以将该待写内容写入该目标文件,并返回写成功的执行结果。
本公开实施例中,在分布式文件***中的服务器接收到对目标文件的重试写请求时,先释放重试写请求中对该目标文件的写锁,并重新打开该目标文件,之后再根据重试写请求及该重新打开的目标文件判断重试写请求中的待写内容是否已被写入目标文件。本公开实施例中分布式文件***中的服务器在接收到目标文件的重试写请求之后,通过重新打开目标文件的方式,能够获得操作该目标文件的相关信息,执行写请求及后续的重试写请求的服务器由于不必使用同一服务器,因此在分布式文件***中的服务器发生故障时,能够通过重试的策略选择无故障的服务器保证业务的连续性和可用性。
在本实施例的一个可选实现方式中,所述重试写请求中还包括所述目标文件的第一唯一标识。
该可选的实现方式中,用户在准备向目标文件写数据时,客户端向第一服务器发送目标文件的打开请求,第一服务器通过分布式文件***中的管理服务器获取该目标文件的相关,该相关信息包括但不限于目标文件的唯一标识、存储地址、长度、写锁等。目标文件的唯一标识可以通过已有的方式获得,只要保证同样的目标文件只有唯一的一个标识即可。需要说明的是,分布式文件***中即使文件名相同,如果不是同一个文件,其唯一标识也不同,例如在先的文件删除后,重新创建了同名的在后文件,那么在先文件的唯一标识和在后文件的唯一标识不同。
在本实施例的一个可选实现方式中,所述步骤S202中重新打开所述目标文件之后,所述方法还包括以下至少之一:
获得分配给重新打开的所述目标文件的第二唯一标识;
获得分配给重新打开所述目标文件的第二写锁。
该可选的实现方式中,第二服务器重新打开目标文件后,分布式文件***中的管理服务器还会重新为该目标文件分配第二唯一标识和第二写锁。第二写锁用于保证仅该客户端对该目标文件执行写操作。在第一服务器打开的目标文件与第二服务器打开的目标文件是同一个文件的情况下,第一唯一标识和第二唯一标识相同,而一些情况下第一唯一标识和第二唯一标识也可以不同,例如第一服务器打开的目标文件和第二服务器打开的目标文件虽然文件名相同,但不是同一个文件(比如原始目标文件被删除,而重新创建了同名文件)的情况下第一唯一标识和第二唯一标识也可以不同。
在本实施例的一个可选实现方式中,所述获得分配给重新打开的所述目标文件的第二唯一标识的步骤之后,所述方法进一步包括以下步骤:
在所述第一唯一标识和所述第二唯一标识不一致时,向客户端返回重试写请求执行失败的结果。
该可选的实现方式中,第一唯一标识和第二唯一标识不一致时,可以认为第二服务器重新打开的目标文件并非重试写请求中指定的目标文件,可能是文件名相同的另一个文件,这种情况下无法进行重试写请求,因此可以向客户端返回重试写请求失败的结果。通过上述实施方式,可以利用文件的唯一标识保证写入操作的准确性。
在本实施例的一个可选实现方式中,如图3所示,所述步骤S203,即根据重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件的步骤,进一步包括以下步骤S301-S302:
在步骤S301中,确定所述目标文件的当前长度;
在步骤S302中,根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件。
该可选的实现方式中,重试写请求中除了包括待写内容之外,还包括待写内容要写入目标文件的起始位置。由于分布式文件***中对文件的写操作通常是追加写的方式,因此通过该起始位置可以确定原始写请求之前该目标文件的原始长度,例如起始位置为目标文件中第x页第y行,那么客户端通过第一服务器打开该目标文件时,该目标文件的长度为0至第x页第y行。因此,通过第二服务器重新打开目标文件后获得的该目标文件的当前长度与该起始位置可以确定该待写内容是否已经被写入该目标文件中。例如,该目标文件的当前长度等于该起始位置处的长度,那么可以确定该目标文件中并未写入待写内容。
在本实施例的一个可选实现方式中,所述方法还进一步包括以下步骤:
在确定所述待写内容未被写入所述目标文件后,根据所述待写内容的起始位置将所述待写内容写入所述目标文件中。
该可选的实现方式中,在确定了待写内容并未写入该目标文件后,第二服务器可以将该待写内容写入至该目标文件,并且写入至目标文件的该起始位置处,同时还可以将该写入成功的结果反馈给客户端。
在本实施例的一个可选实现方式中,如图4所示,所述步骤S302,即,根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件的步骤,进一步包括以下步骤S401-S402:
在步骤S401中,在所述当前长度等于所述目标文件在所述起始位置处的长度加上所述待写内容的长度时,确定所述待写入内容与已有内容是否一致;其中,所述已有内容为所述目标文件中所述起始位置开始且长度与所述待写内容相等的内容;
在步骤S402中,在所述待写内容与所述已有内容一致时,确定所述待写内容已被写入所述目标文件。
该可选的实现方式中,在目标文件中已被写入了待写内容的情况下,目标文件的当前长度应该等于重试写请求中目标文件在起始位置处的长度加上待写内容的长度,因此这种情况下,再通过判断目标文件从起始位置开始且长度与待写内容相同的已有内容是否与待写内容一致,一致的情况下则可以确定待写内容已被写入目标文件。待写内容与已有内容是否一致可以通过直接匹配内容的方式确定,也可以通过匹配根据内容生成的校验码得方式来确定。
在本实施例的一个可选实现方式中,所述步骤S302,即根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件的步骤,进一步包括以下步骤:
所述当前长度等于所述目标文件在所述起始位置处的长度时,确定所述待写内容未被写入所述目标文件。
该可选的实现方式中,目标文件中如果没有写入待写内容,那么目标文件的当前长度应该与重试写请求中的起始位置处的长度相同,这是因为分布式文件***支持的是追加写的方式,客户端发起写请求时所确定的起始位置就是目标文件的最末尾的位置,因此在目标文件当前长度等于起始位置处的长度时,可以确定发起写请求之后目标文件中不曾写入任何内容,因此待写内容也未写入该目标文件。
在本实施例的一个可选实现方式中,所述步骤S302,即根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件的步骤,进一步包括以下步骤:
在所述当前长度不等于所述目标文件在所述起始位置处的长度加上所述待写内容的长度,且所述当前长度不等于所述目标文件在所述起始位置处的长度时,向客户端返回重试写请求执行失败的结果。
该可选的实现方式中,在目标文件的当前长度不等于目标文件在起始位置处的长度加上待写内容的长度,也不等于起始位置处的长度时,可以认为目标文件与客户端发起写请求时的状态不同,并且不确定目标文件中是否已写入待写内容,可能发生了其他错误,因此第二服务器可以向客户端发送重试写请求执行失败的结果。这种情况下,客户端可以根据实际情况进行后续的操作,例如提示用户当前的状况,并在用户的指示下在客户端重新打开该目标文件等。
在本实施例的一个可选实现方式中,如图5所示,所述根据所述待写内容的起始位置将所述待写内容写入所述目标文件中的步骤之后,所述方法进一步包括以下步骤:
在步骤S501中,确定所述待写内容是否成功写入所述目标文件;
在步骤S502中,在所述待写内容未成功写入所述目标文件,且重试次数未超过预设阈值时,产生对所述目标文件的重试写请求。
该可选的实现方式中,第二服务器在确定了目标文件中未写入待写内容,且未发生其他错误的情况下,可以通过分布式文件***的写操作将待写内容写入目标文件;如果在写入过程中由于其他原因导致未将待写内容成功写入目标文件时,第二服务器自身可以发起重试写请求,以便执行再一次写操作。而在第二服务器发起重试写请求的次数超过预设阈值的情况下,则可以停止发起重试写请求,而直接向客户端返回操作失败的结果。需要说明的是,第二服务器在发起重试写请求的情况下,重试写请求除了包括待写内容等写操作所必须的信息之外,也可以携带第二服务器重新获得的目标文件的第二写锁和/或第二唯一标识。该重试写请求可以由第二服务器来响应,即第二服务器基于该重试写请求重新从图2所示的步骤S201开始响应该重试写请求;当然,在一些特殊情况下,如第二服务器由于自身负荷有限等原因,还可以将该重试写请求发送给服务器集群中的第三服务器,并由第三服务器来响应,具体可以根据实际情况而定,在此不做限制。
图6示出根据本公开另一实施方式的文件访问方法的流程图。该文件访问方法运行在图1所示的客户端上。如图6所示,所述文件访问方法包括以下步骤S601-S602:
在步骤S601中,向分布式文件***中的第一服务器发送目标文件的写请求;
在步骤S602中,在预设时间内未接收到所述第一服务器的反馈结果时,向所述分布式文件***中的第二服务器发送所述目标文件的重试写请求;其中,所述第一服务器与所述第二服务器不同。
本实施例中,用户可以通过客户端对分布式文件***中的目标文件进行操作。用户准备向目标文件写操作时,首先可以通过客户端打开目标文件,客户端可以将该打开请求发送给服务器集群中的第一服务器,由该第一服务器执行该打开请求,第一服务器在打开该目标文件后,分布式文件***中的管理服务器会自动为该客户端分配该目标文件的第一写锁,保证该目标文件只被该客户端写入;第一服务器还将该第一写锁返回给客户端,以便客户端在下次对该目标文件进行操作时使用。之后客户端可以向该第一服务器发送写请求,以将待写内容写入该目标文件,在第一服务器完成目标文件的写请求之后,可以将写请求的结果(成功或失败)返回给客户端。而如果此时发生网络、软件、硬件等故障时,导致客户端无法知晓写请求是否成功,则客户端可以尝试进行重试,也即向服务器集群中的第二服务器发送重试写请求,以保障数据写入的连续性。
在一些实施例中,第一服务器和第二服务器可以不同。在客户端向第一服务器发起写请求后,如果在预设时间内未收到第一服务器的反馈结果,客户端可以发起重试写请求。由于未接收到第一服务器的反馈结果的原因之一可能是第一服务器自身出现了故障,或者发生了网络故障等,因此客户端可以选择分布式文件***的服务器集群中的第二服务器,并向第二服务器发送重试写请求,以便能够提高重试写请求的成功率。通过这种方式,可以在分布式文件***的服务器、网络等发生故障时,通过重试的策略选择无故障的服务器能够保障业务的连续性和可用性。
在本实施例的一个可选实现方式中,步骤S601即所述向分布式文件***中的第一服务器发送目标文件的写请求的步骤之前,所述方法进一步还包括以下步骤:
获取所述目标文件的第一唯一标识及第一写锁。
该可选的实现方式中,客户端可以在向第一服务器发送写请求之前,先获得目标文件的第一写锁以及第一唯一标识。在获取了目标文件的第一写锁之后,客户端可以排他性地向目标文件写数据;而目标文件的唯一标识可以是分布式文件***分配,且用于区分不同的文件的。客户端在获得该第一唯一标识和第一写锁之后,可以在写请求和/或重试写请求中携带该第一唯一标识和第一写锁,以便分布式文件***中的服务器能够准确无误地向目标文件中写入待写内容。
在本实施例的一个可选实现方式中,所述重试写请求中包括所述第一唯一标识及第一写锁。
该可选的实现方式中,由于客户端在进行重试写请求时,如果选择了与第一服务器不同的第二服务器执行重试写请求,那么第二服务器上则不会保存有目标文件的文件信息,因此在重试写请求中携带第一唯一标识和第一写锁,可以使得第二服务器能够释放第一写锁,并重新打开目标文件,以便在重新打开目标文件时第二服务器能够获得该目标文件的相关信息,并在写文件时能够保证数据的唯一性和准确性。
图7示出根据本公开另一实施方式的文件访问方法的流程图。该文件访问方法运行在图1所示的客户端上。如图7所示,所述文件访问方法包括以下步骤:
在步骤S701中,检测用户对目标文件的写操作;
在步骤S702中,向分布式文件***中的第一服务器发送所述目标文件的写请求;
在步骤S703中,在预设时间内未接收到所述第一服务器的反馈结果时,向所述分布式文件***中的第二服务器发送所述目标文件的重试写请求;其中,所述第一服务器与所述第二服务器不同。
本实施例中,用户可以通过客户端对分布式文件***中的目标文件进行操作。用户准备向目标文件写操作时,首先可以通过客户端打开目标文件,客户端检测到用户对目标文件的打开操作后,可以将该打开请求发送给服务器集群中的第一服务器,由该第一服务器执行该打开请求,第一服务器在打开该目标文件后,分布式文件***中的管理服务器会自动为该客户端分配该目标文件的第一写锁,保证该目标文件只被该客户端写入;第一服务器还将该第一写锁返回给客户端,以便客户端在下次对该目标文件进行操作时使用。客户端检测到用户对该打开的目标文件的写操作后,可以向该第一服务器发送写请求,以将待写内容写入该目标文件,在第一服务器完成目标文件的写请求之后,可以将写请求的结果(成功或失败)返回给客户端。而如果此时发生网络、软件、硬件等故障时,导致客户端无法知晓写请求是否成功,则客户端可以尝试进行重试,也即向服务器集群中的第二服务器发送重试写请求,以保障数据写入的连续性。
在一些实施例中,第一服务器和第二服务器可以不同。在客户端向第一服务器发起写请求后,如果在预设时间内未收到第一服务器的反馈结果,客户端可以发起重试写请求。由于未接收到第一服务器的反馈结果的原因之一可能是第一服务器自身出现了故障,或者发生了网络故障等,因此客户端可以选择分布式文件***的服务器集群中的第二服务器,并向第二服务器发送重试写请求,以便能够提高重试写请求的成功率。通过这种方式,可以在分布式文件***的服务器、网络等发生故障时,通过重试的策略选择无故障的服务器能够保障业务的连续性和可用性。
下述为本公开装置实施例,可以用于执行本公开方法实施例。
图8示出根据本公开一实施方式的文件访问装置的结构框图,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。该文件访问装置位于图1所示的服务器集群中的服务器上。如图8所示,所述文件访问装置包括:
接收模块801,被配置为接收对目标文件的重试写请求;其中,所述重试写请求中包括所述目标文件的第一写锁及待写内容;
释放模块802,被配置为释放所述目标文件的第一写锁,并重新打开所述目标文件;
确定模块803,被配置为根据重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件。
本实施例中,目标文件可以是分布式文件***中的分布式文件;用户可以通过客户端操作分布式文件***中的分布式文件;客户端根据用户的相应操作生成相应的操作请求,并发送至服务器集群中的服务器,以便对该目标文件进行相应操作,客户端可以通过负载均衡策略或者其他预设的充实策略选择向服务器集群中的其中一个服务器发送操作请求。
用户准备向目标文件执行写操作时,首先可以通过客户端打开目标文件,客户端可以将该打开请求发送给服务器集群中的第一服务器,由该第一服务器执行该打开请求,第一服务器在打开该目标文件后,分布式文件***中的管理服务器会自动为该客户端分配该目标文件的第一写锁,保证该目标文件只被该客户端写入;第一服务器还将该第一写锁返回给客户端,以便客户端在下次对该目标文件进行操作时使用。之后客户端可以向该第一服务器发送写请求,以将待写内容写入该目标文件,在第一服务器完成目标文件的写请求之后,可以将写请求的结果(成功或失败)返回给客户端。而如果此时发生网络、软件、硬件等故障,导致客户端无法知晓写请求是否成功时,客户端可以尝试进行重试,也即向服务器集群中的第二服务器发送重试写请求,以保障数据写入的连续性。
本公开实施例中,导致未成功完成写请求或者客户端未接收到写请求的反馈结果的原因之一,可能是执行原始写请求的第一服务器发生了故障。因此,客户端在发起重试写请求时,可以向服务器集群中的第二服务器发送重试写请求,以提高重试写请求的成功率。第一服务器和第二服务器可以不同。
客户端可以将该目标文件的第一写锁以及待写内容携带在重试写请求中,发送至服务器集群中的第二服务器。该第二服务器在接收到重试写请求后,解析出重试写请求中的第一写锁,并请求分布式文件***中的管理服务器释放该第一写锁,并重新打开该目标文件。由于执行重试写请求的第二服务器与执行原始写请求时打开该目标文件的第一服务器可能不是同一个服务器,而该第二服务器上由于没有目标文件的相关信息,无法直接对目标文件执行写操作,因此可以通过释放原来的第一写锁,并重新打开该目标文件,获取该目标文件的相关信息,进而由第二服务器对目标文件进行写操作。通过这种方式,执行写请求和执行重试写请求的服务器不必是同一个服务器,这样能够在分布式文件***中的服务器发生故障时,通过重试的策略选择无故障的服务器能够保证业务的连续性和可用性。
该第二服务器重新打开该目标文件后,可以获得该重新打开的目标文件的相关信息,例如该目标文件的存储地址、唯一标识、长度、重新分配的第二写锁等。之后第二服务器根据重新打开的目标文件以及重试写请求确定待写内容是否已经被写入了该目标文件,如果待写内容已经被写入该目标文件,则第二服务器可以直接向客户端返回写成功的执行结果。如果待写内容没有被写入该目标文件,则第二服务器可以将该待写内容写入该目标文件,并返回写成功的执行结果。
本公开实施例中,在分布式文件***中的服务器接收到对目标文件的重试写请求时,先释放重试写请求中对该目标文件的写锁,并重新打开该目标文件,之后再根据重试写请求及该重新打开的目标文件判断重试写请求中的待写内容是否已被写入目标文件。本公开实施例中分布式文件***中的服务器在接收到目标文件的重试写请求之后,通过重新打开目标文件的方式,能够获得操作该目标文件的相关信息,执行写请求及后续的重试写请求的服务器由于不必使用同一服务器,因此在分布式文件***中的服务器发生故障时,能够通过重试的策略选择无故障的服务器保证业务的连续性和可用性。
在本实施例的一个可选实现方式中,所述重试写请求中还包括所述目标文件的第一唯一标识。
该可选的实现方式中,用户在准备向目标文件写数据时,客户端向第一服务器发送目标文件的打开请求,第一服务器通过分布式文件***中的管理服务器获取该目标文件的相关,该相关信息包括但不限于目标文件的唯一标识、存储地址、长度、写锁等。目标文件的唯一标识可以通过已有的方式获得,只要保证同样的目标文件只有唯一的一个标识即可。需要说明的是,分布式文件***中即使文件名相同,如果不是同一个文件,其唯一标识也不同,例如在先的文件删除后,重新创建了同名的在后文件,那么在先文件的唯一标识和在后文件的唯一标识不同。
在本实施例的一个可选实现方式中,所述释放模块802之后,所述装置还包括以下至少之一:
第一获取模块,被配置为获得分配给重新打开的所述目标文件的第二唯一标识;
第二获取模块,被配置为获得分配给重新打开所述目标文件的第二写锁。
该可选的实现方式中,第二服务器重新打开目标文件后,分布式文件***中的管理服务器还会重新为该目标文件分配第二唯一标识和第二写锁。第二写锁用于保证仅该客户端对该目标文件执行写操作。在第一服务器打开的目标文件与第二服务器打开的目标文件是同一个文件的情况下,第一唯一标识和第二唯一标识相同,而一些情况下第一唯一标识和第二唯一标识也可以不同,例如第一服务器打开的目标文件和第二服务器打开的目标文件虽然文件名相同,但不是同一个文件(比如原始目标文件被删除,而重新创建了同名文件)的情况下第一唯一标识和第二唯一标识也可以不同。
在本实施例的一个可选实现方式中,所述第一获取模块之后,所述装置还包括:
返回模块,被配置为在所述第一唯一标识和所述第二唯一标识不一致时,向客户端返回重试写请求执行失败的结果。
该可选的实现方式中,第一唯一标识和第二唯一标识不一致时,可以认为第二服务器重新打开的目标文件并非重试写请求中指定的目标文件,可能是文件名相同的另一个文件,这种情况下无法进行重试写请求,因此可以向客户端返回重试写请求失败的结果。通过上述实施方式,可以利用文件的唯一标识保证写入操作的准确性。
在本实施例的一个可选实现方式中,如图9所示,所述确定模块803,包括:
第一确定子模块901,被配置为确定所述目标文件的当前长度;
第二确定子模块902,被配置为根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件。
该可选的实现方式中,重试写请求中除了包括待写内容之外,还包括待写内容要写入目标文件的起始位置。由于分布式文件***中对文件的写操作通常是追加写的方式,因此通过该起始位置可以确定原始写请求之前该目标文件的原始长度,例如起始位置为目标文件中第x页第y行,那么客户端通过第一服务器打开该目标文件时,该目标文件的长度为0至第x页第y行。因此,通过第二服务器重新打开目标文件后获得的该目标文件的当前长度与该起始位置可以确定该待写内容是否已经被写入该目标文件中。例如,该目标文件的当前长度等于该起始位置处的长度,那么可以确定该目标文件中并未写入待写内容。
在本实施例的一个可选实现方式中,所述装置还包括:
写入模块,被配置为在确定所述待写内容未被写入所述目标文件后,根据所述待写内容的起始位置将所述待写内容写入所述目标文件中。
该可选的实现方式中,在确定了待写内容并未写入该目标文件后,第二服务器可以将该待写内容写入至该目标文件,并且写入至目标文件的该起始位置处,同时还可以将该写入成功的结果反馈给客户端。
在本实施例的一个可选实现方式中,如图10所示,所述第二确定子模块902,包括:
第三确定子模块1001,被配置为在所述当前长度等于所述目标文件在所述起始位置处的长度加上所述待写内容的长度时,确定所述待写入内容与已有内容是否一致;其中,所述已有内容为所述目标文件中所述起始位置开始且长度与所述待写内容相等的内容;
第四确定子模块1002,被配置为在所述待写内容与所述已有内容一致时,确定所述待写内容已被写入所述目标文件。
该可选的实现方式中,在目标文件中已被写入了待写内容的情况下,目标文件的当前长度应该等于重试写请求中目标文件在起始位置处的长度加上待写内容的长度,因此这种情况下,再通过判断目标文件从起始位置开始且长度与待写内容相同的已有内容是否与待写内容一致,一致的情况下则可以确定待写内容已被写入目标文件。待写内容与已有内容是否一致可以通过直接匹配内容的方式确定,也可以通过匹配根据内容生成的校验码得方式来确定。
在本实施例的一个可选实现方式中,所述第二确定子模块902,还包括:
第五确定子模块,被配置为所述当前长度等于所述目标文件在所述起始位置处的长度时,确定所述待写内容未被写入所述目标文件。
该可选的实现方式中,目标文件中如果没有写入待写内容,那么目标文件的当前长度应该与重试写请求中的起始位置处的长度相同,这是因为分布式文件***支持的是追加写的方式,客户端发起写请求时所确定的起始位置就是目标文件的最末尾的位置,因此在目标文件当前长度等于起始位置处的长度时,可以确定发起写请求之后目标文件中不曾写入任何内容,因此待写内容也未写入该目标文件。
在本实施例的一个可选实现方式中,所述第二确定子模块902,还包括:
返回子模块,被配置为在所述当前长度不等于所述目标文件在所述起始位置处的长度加上所述待写内容的长度,且所述当前长度不等于所述目标文件在所述起始位置处的长度时,向客户端返回重试写请求执行失败的结果。
该可选的实现方式中,在目标文件的当前长度不等于目标文件在起始位置处的长度加上待写内容的长度,也不等于起始位置处的长度时,可以认为目标文件与客户端发起写请求时的状态不同,并且不确定目标文件中是否已写入待写内容,可能发生了其他错误,因此第二服务器可以向客户端发送重试写请求执行失败的结果。这种情况下,客户端可以根据实际情况进行后续的操作,例如提示用户当前的状况,并在用户的指示下在客户端重新打开该目标文件等。
在本实施例的一个可选实现方式中,如图11所示,所述写入模块之后,所述装置还包括:
第六确定子模块1101,被配置为确定所述待写内容是否成功写入所述目标文件;
产生子模块1102,被配置为在所述待写内容未成功写入所述目标文件,且重试次数未超过预设阈值时,产生对所述目标文件的重试写请求。
该可选的实现方式中,第二服务器在确定了目标文件中未写入待写内容,且未发生其他错误的情况下,可以通过分布式文件***的写操作将待写内容写入目标文件;如果在写入过程中由于其他原因导致未将待写内容成功写入目标文件时,第二服务器自身可以发起重试写请求,以便执行再一次写操作。而在第二服务器发起重试写请求的次数超过预设阈值的情况下,则可以停止发起重试写请求,而直接向客户端返回操作失败的结果。需要说明的是,第二服务器在发起重试写请求的情况下,重试写请求除了包括待写内容等写操作所必须的信息之外,也可以携带第二服务器重新获得的目标文件的第二写锁和/或第二唯一标识。该重试写请求可以由第二服务器来响应,即第二服务器基于该重试写请求重新从图8所示的接收模块801开始响应该重试写请求;当然,在一些特殊情况下,如第二服务器由于自身负荷有限等原因,还可以将该重试写请求发送给服务器集群中的第三服务器,并由第三服务器来响应,具体可以根据实际情况而定,在此不做限制。
图12示出根据本公开另一实施方式的文件访问装置的结构框图,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。该文件访问装置位于图1所示的客户端。如图12所示,所述文件访问装置包括:
写请求模块1201,被配置为向分布式文件***中的第一服务器发送目标文件的写请求;
重试写请求模块1202,被配置为在预设时间内未接收到所述第一服务器的反馈结果时,向所述分布式文件***中的第二服务器发送所述目标文件的重试写请求;其中,所述第一服务器与所述第二服务器不同。
本实施例中,用户可以通过客户端对分布式文件***中的目标文件进行操作。用户准备向目标文件写操作时,首先可以通过客户端打开目标文件,客户端可以将该打开请求发送给服务器集群中的第一服务器,由该第一服务器执行该打开请求,第一服务器在打开该目标文件后,分布式文件***中的管理服务器会自动为该客户端分配该目标文件的第一写锁,保证该目标文件只被该客户端写入;第一服务器还将该第一写锁返回给客户端,以便客户端在下次对该目标文件进行操作时使用。之后客户端可以向该第一服务器发送写请求,以将待写内容写入该目标文件,在第一服务器完成目标文件的写请求之后,可以将写请求的结果(成功或失败)返回给客户端。而如果此时发生网络、软件、硬件等故障时,导致客户端无法知晓写请求是否成功,则客户端可以尝试进行重试,也即向服务器集群中的第二服务器发送重试写请求,以保障数据写入的连续性。
在一些实施例中,第一服务器和第二服务器可以不同。在客户端向第一服务器发起写请求后,如果在预设时间内未收到第一服务器的反馈结果,客户端可以发起重试写请求。由于未接收到第一服务器的反馈结果的原因之一可能是第一服务器自身出现了故障,或者发生了网络故障等,因此客户端可以选择分布式文件***的服务器集群中的第二服务器,并向第二服务器发送重试写请求,以便能够提高重试写请求的成功率。通过这种方式,可以在分布式文件***的服务器、网络等发生故障时,通过重试的策略选择无故障的服务器能够保障业务的连续性和可用性。
在本实施例的一个可选实现方式中,所述写请求模块1201之前,还包括:
第三获取模块,被配置为获取所述目标文件的第一唯一标识及第一写锁。
该可选的实现方式中,客户端可以在向第一服务器发送写请求之前,先获得目标文件的第一写锁以及第一唯一标识。在获取了目标文件的第一写锁之后,客户端可以排他性地向目标文件写数据;而目标文件的唯一标识可以是分布式文件***分配,且用于区分不同的文件的。客户端在获得该第一唯一标识和第一写锁之后,可以在写请求和/或重试写请求中携带该第一唯一标识和第一写锁,以便分布式文件***中的服务器能够准确无误地向目标文件中写入待写内容。
在本实施例的一个可选实现方式中,所述重试写请求中包括所述第一唯一标识及第一写锁。
该可选的实现方式中,由于客户端在进行重试写请求时,如果选择了与第一服务器不同的第二服务器执行重试写请求,那么第二服务器上则不会保存有目标文件的文件信息,因此在重试写请求中携带第一唯一标识和第一写锁,可以使得第二服务器能够释放第一写锁,并重新打开目标文件,以便在重新打开目标文件时第二服务器能够获得该目标文件的相关信息,并在写文件时能够保证数据的唯一性和准确性。
图13示出根据本公开另一实施方式的文件访问装置的结构框图,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。该文件访问装置位于图1所示的客户端。如图13所示,所述文件访问装置包括:
检测模块1301,被配置为检测用户对目标文件的写操作;
第一发送模块1302,被配置为向分布式文件***中的第一服务器发送所述目标文件的写请求;
第二发送模块1303,被配置为在预设时间内未接收到所述第一服务器的反馈结果时,向所述分布式文件***中的第二服务器发送所述目标文件的重试写请求;其中,所述第一服务器与所述第二服务器不同。
本实施例中,用户可以通过客户端对分布式文件***中的目标文件进行操作。用户准备向目标文件写操作时,首先可以通过客户端打开目标文件,客户端检测到用户对目标文件的打开操作后,可以将该打开请求发送给服务器集群中的第一服务器,由该第一服务器执行该打开请求,第一服务器在打开该目标文件后,分布式文件***中的管理服务器会自动为该客户端分配该目标文件的第一写锁,保证该目标文件只被该客户端写入;第一服务器还将该第一写锁返回给客户端,以便客户端在下次对该目标文件进行操作时使用。客户端检测到用户对该打开的目标文件的写操作后,可以向该第一服务器发送写请求,以将待写内容写入该目标文件,在第一服务器完成目标文件的写请求之后,可以将写请求的结果(成功或失败)返回给客户端。而如果此时发生网络、软件、硬件等故障时,导致客户端无法知晓写请求是否成功,则客户端可以尝试进行重试,也即向服务器集群中的第二服务器发送重试写请求,以保障数据写入的连续性。
在一些实施例中,第一服务器和第二服务器可以不同。在客户端向第一服务器发起写请求后,如果在预设时间内未收到第一服务器的反馈结果,客户端可以发起重试写请求。由于未接收到第一服务器的反馈结果的原因之一可能是第一服务器自身出现了故障,或者发生了网络故障等,因此客户端可以选择分布式文件***的服务器集群中的第二服务器,并向第二服务器发送重试写请求,以便能够提高重试写请求的成功率。通过这种方式,可以在分布式文件***的服务器、网络等发生故障时,通过重试的策略选择无故障的服务器能够保障业务的连续性和可用性。
图14是适于用来实现根据本公开实施方式的文件访问方法的电子设备的结构示意图。
如图14所示,电子设备1400包括中央处理单元(CPU)1401,其可以根据存储在只读存储器(ROM)1402中的程序或者从存储部分1408加载到随机访问存储器(RAM)1403中的程序而执行本公开实施方式中文件访问方法的各种处理。在RAM1403中,还存储有电子设备1400操作所需的各种程序和数据。CPU1401、ROM1402以及RAM1403通过总线1404彼此相连。输入/输出(I/O)接口1405也连接至总线1404。
以下部件连接至I/O接口1405:包括键盘、鼠标等的输入部分1406;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1407;包括硬盘等的存储部分1408;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1409。通信部分1409经由诸如因特网的网络执行通信处理。驱动器1410也根据需要连接至I/O接口1405。可拆卸介质1411,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1410上,以便于从其上读出的计算机程序根据需要被安装入存储部分1408。
特别地,根据本公开的实施方式,上文参考本公开实施方式中的方法可以被实现为计算机软件程序。例如,本公开的实施方式包括一种计算机程序产品,其包括有形地包含在及其可读介质上的计算机程序,所述计算机程序包含用于执行本公开实施方式中方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分1409从网络上被下载和安装,和/或从可拆卸介质1411被安装。
附图中的流程图和框图,图示了按照本公开各种实施方式的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,路程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (30)
1.一种文件访问方法,其特征在于,所述文件访问方法在第二服务器 上运行,包括:
接收客户端对目标文件的重试写请求;其中,所述重试写请求中包括所述目标文件的第一写锁及待写入所述目标文件的待写内容;且所述客户端之前向不同于所述第二服务器的第一服务器发送过所述目标文件的写请求;所述目标文件为分布式文件***中的分布式文件,所述第一服务器和所述第二服务器为所述分布式文件***中服务器集群中的服务器;
释放所述目标文件的第一写锁,并重新打开所述目标文件;
根据重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件。
2.根据权利要求1所述的方法,其特征在于,所述重试写请求中还包括所述目标文件的第一唯一标识。
3.根据权利要求2所述的方法,其特征在于,所述重新打开所述目标文件之后,所述方法还包括以下至少之一:
获得分配给重新打开的所述目标文件的第二唯一标识;
获得分配给重新打开所述目标文件的第二写锁。
4.根据权利要求3所述的方法,其特征在于,获得分配给重新打开的所述目标文件的第二唯一标识之后,所述方法还包括:
在所述第一唯一标识和所述第二唯一标识不一致时,向客户端返回重试写请求执行失败的结果。
5.根据权利要求1-4任一项所述的方法,其特征在于,根据重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件,包括:
确定所述目标文件的当前长度;
根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在确定所述待写内容未被写入所述目标文件后,根据所述待写内容的起始位置将所述待写内容写入所述目标文件中。
7.根据权利要求5所述的方法,其特征在于,根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件,包括:
在所述当前长度等于所述目标文件在所述起始位置处的长度加上所述待写内容的长度时,确定所述待写内容与已有内容是否一致;其中,所述已有内容为所述目标文件中所述起始位置开始且长度与所述待写内容相等的内容;
在所述待写内容与所述已有内容一致时,确定所述待写内容已被写入所述目标文件。
8.根据权利要求5所述的方法,其特征在于,根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件,还包括:
所述当前长度等于所述目标文件在所述起始位置处的长度时,确定所述待写内容未被写入所述目标文件。
9.根据权利要求5所述的方法,其特征在于,根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件,还包括:
在所述当前长度不等于所述目标文件在所述起始位置处的长度加上所述待写内容的长度,且所述当前长度不等于所述目标文件在所述起始位置处的长度时,向客户端返回重试写请求执行失败的结果。
10.根据权利要求6所述的方法,其特征在于,根据所述待写内容的起始位置将所述待写内容写入所述目标文件中之后,还包括:
确定所述待写内容是否成功写入所述目标文件;
在所述待写内容未成功写入所述目标文件,且重试次数未超过预设阈值时,产生对所述目标文件的重试写请求。
11.一种文件访问方法,其特征在于,包括:
向分布式文件***中的第一服务器发送目标文件的写请求;所述目标文件为分布式文件***中的分布式文件;
在预设时间内未接收到所述第一服务器的反馈结果时,向所述分布式文件***中的第二服务器发送所述目标文件的重试写请求;其中,所述第一服务器与所述第二服务器不同;所述第二服务器在接收到所述重试写请求后,释放所述目标文件的第一写锁,并重新打开所述目标文件,以及基于重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件。
12.根据权利要求11所述的方法,其特征在于,所述向分布式文件***中的第一服务器发送目标文件的写请求之前,还包括:
获取所述目标文件的第一唯一标识及第一写锁。
13.根据权利要求12所述的方法,其特征在于,所述重试写请求中包括所述第一唯一标识及第一写锁。
14.一种文件访问方法,其特征在于,包括:
检测用户对目标文件的写操作;所述目标文件为分布式文件***中的分布式文件;
向分布式文件***中的第一服务器发送所述目标文件的写请求;
在预设时间内未接收到所述第一服务器的反馈结果时,向所述分布式文件***中的第二服务器发送所述目标文件的重试写请求;其中,所述第一服务器与所述第二服务器不同;所述第二服务器在接收到所述重试写请求后,释放所述目标文件的第一写锁,并重新打开所述目标文件,以及基于重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件。
15.一种文件访问装置,其特征在于,所述文件访问装置位于第二服务器,包括:
接收模块,被配置为接收客户端对目标文件的重试写请求;其中,所述重试写请求中包括所述目标文件的第一写锁及待写入所述目标文件的待写内容;且所述客户端之前向不同于所述第二服务器的第一服务器发送过所述目标文件的写请求;所述目标文件为分布式文件***中的分布式文件,所述第一服务器和所述第二服务器为所述分布式文件***中服务器集群中的服务器;
释放模块,被配置为释放所述目标文件的第一写锁,并重新打开所述目标文件;
确定模块,被配置为根据重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件。
16.根据权利要求15所述的装置,其特征在于,所述重试写请求中还包括所述目标文件的第一唯一标识。
17.根据权利要求16所述的装置,其特征在于,所述释放模块之后,所述装置还包括以下至少之一:
第一获取模块,被配置为获得分配给重新打开的所述目标文件的第二唯一标识;
第二获取模块,被配置为获得分配给重新打开所述目标文件的第二写锁。
18.根据权利要求17所述的装置,其特征在于,所述第一获取模块之后,所述装置还包括:
返回模块,被配置为在所述第一唯一标识和所述第二唯一标识不一致时,向客户端返回重试写请求执行失败的结果。
19.根据权利要求15-18任一项所述的装置,其特征在于,所述确定模块,包括:
第一确定子模块,被配置为确定所述目标文件的当前长度;
第二确定子模块,被配置为根据所述待写内容待写入至所述目标文件中的起始位置以及所述当前长度确定所述待写内容是否已被写入所述目标文件。
20.根据权利要求19所述的装置,其特征在于,所述装置还包括:
写入模块,被配置为在确定所述待写内容未被写入所述目标文件后,根据所述待写内容的起始位置将所述待写内容写入所述目标文件中。
21.根据权利要求19所述的装置,其特征在于,所述第二确定子模块,包括:
第三确定子模块,被配置为在所述当前长度等于所述目标文件在所述起始位置处的长度加上所述待写内容的长度时,确定所述待写内容与已有内容是否一致;其中,所述已有内容为所述目标文件中所述起始位置开始且长度与所述待写内容相等的内容;
第四确定子模块,被配置为在所述待写内容与所述已有内容一致时,确定所述待写内容已被写入所述目标文件。
22.根据权利要求19所述的装置,其特征在于,所述第二确定子模块,还包括:
第五确定子模块,被配置为所述当前长度等于所述目标文件在所述起始位置处的长度时,确定所述待写内容未被写入所述目标文件。
23.根据权利要求19所述的装置,其特征在于,所述第二确定子模块,还包括:
返回子模块,被配置为在所述当前长度不等于所述目标文件在所述起始位置处的长度加上所述待写内容的长度,且所述当前长度不等于所述目标文件在所述起始位置处的长度时,向客户端返回重试写请求执行失败的结果。
24.根据权利要求20所述的装置,其特征在于,所述写入模块之后,所述装置还包括:
第六确定子模块,被配置为确定所述待写内容是否成功写入所述目标文件;
产生子模块,被配置为在所述待写内容未成功写入所述目标文件,且重试次数未超过预设阈值时,产生对所述目标文件的重试写请求。
25.一种文件访问装置,其特征在于,包括:
写请求模块,被配置为向分布式文件***中的第一服务器发送目标文件的写请求;所述目标文件为分布式文件***中的分布式文件;
重试写请求模块,被配置为在预设时间内未接收到所述第一服务器的反馈结果时,向所述分布式文件***中的第二服务器发送所述目标文件的重试写请求;其中,所述第一服务器与所述第二服务器不同;所述第二服务器在接收到所述重试写请求后,释放所述目标文件的第一写锁,并重新打开所述目标文件,以及基于重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件。
26.根据权利要求25所述的装置,其特征在于,所述写请求模块之前,还包括:
第三获取模块,被配置为获取所述目标文件的第一唯一标识及第一写锁。
27.根据权利要求26所述的装置,其特征在于,所述重试写请求中包括所述第一唯一标识及第一写锁。
28.一种文件访问装置,其特征在于,包括:
检测模块,被配置为检测用户对目标文件的写操作;所述目标文件为分布式文件***中的分布式文件;
第一发送模块,被配置为向分布式文件***中的第一服务器发送所述目标文件的写请求;
第二发送模块,被配置为在预设时间内未接收到所述第一服务器的反馈结果时,向所述分布式文件***中的第二服务器发送所述目标文件的重试写请求;其中,所述第一服务器与所述第二服务器不同;所述第二服务器在接收到所述重试写请求后,释放所述目标文件的第一写锁,并重新打开所述目标文件,以及基于重新打开的所述目标文件以及所述重试写请求确定所述重试写请求中的待写内容是否已经被写入所述目标文件。
29.一种电子设备,其特征在于,包括存储器和处理器;其中,
所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现权利要求1-14任一项所述的方法。
30.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该计算机指令被处理器执行时实现权利要求1-14任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910854500.4A CN112559450B (zh) | 2019-09-10 | 2019-09-10 | 文件访问方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910854500.4A CN112559450B (zh) | 2019-09-10 | 2019-09-10 | 文件访问方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112559450A CN112559450A (zh) | 2021-03-26 |
CN112559450B true CN112559450B (zh) | 2022-04-29 |
Family
ID=75028883
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910854500.4A Active CN112559450B (zh) | 2019-09-10 | 2019-09-10 | 文件访问方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112559450B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106155596A (zh) * | 2016-08-03 | 2016-11-23 | 深圳市文鼎创数据科技有限公司 | 数据写入方法及装置 |
CN109614439A (zh) * | 2018-10-24 | 2019-04-12 | 平安科技(深圳)有限公司 | 数据同步方法、装置、电子设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150378993A1 (en) * | 2014-06-27 | 2015-12-31 | Netapp, Inc. | System and method for implementing a quota system in a distributed file system |
-
2019
- 2019-09-10 CN CN201910854500.4A patent/CN112559450B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106155596A (zh) * | 2016-08-03 | 2016-11-23 | 深圳市文鼎创数据科技有限公司 | 数据写入方法及装置 |
CN109614439A (zh) * | 2018-10-24 | 2019-04-12 | 平安科技(深圳)有限公司 | 数据同步方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112559450A (zh) | 2021-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10108630B2 (en) | Cluster unique identifier | |
JP6921107B2 (ja) | サービス処理方法、デバイス、及びシステム | |
US9189348B2 (en) | High availability database management system and database management method using same | |
US7536603B2 (en) | Maintaining functionality during component failures | |
CN109710695B (zh) | 事务请求有效性识别和发起方法、装置、设备和介质 | |
US10621651B2 (en) | Automatic recharge system and method, and server | |
CN107436799B (zh) | 分布式事务一致性实现方法及装置 | |
US8086900B2 (en) | System, method and computer program product for testing a boot image | |
CN109308239B (zh) | 用于输出信息的方法和装置 | |
EP3163447B1 (en) | Data replication method, device and system | |
CN107645476B (zh) | 请求处理方法和装置 | |
CN111127088B (zh) | 实现最终一致性的方法、装置、计算机设备及存储介质 | |
CN113190177B (zh) | 数据存储方法、终端设备、服务器及*** | |
CN109995775B (zh) | 区块链验证码应用方法、设备和存储介质 | |
CN105550071A (zh) | ***文件升级及检测方法、通信设备 | |
CN110619022A (zh) | 基于区块链网络的节点检测方法、装置、设备及存储介质 | |
CN112751782B (zh) | 基于多活数据中心的流量切换方法、装置、设备及介质 | |
CN107864209B (zh) | 数据写入的方法、装置及服务器 | |
CN112559450B (zh) | 文件访问方法、装置、电子设备及存储介质 | |
KR20200048633A (ko) | 소프트웨어 자동 테스트 시스템 및 방법 | |
US20110320409A1 (en) | Guaranteed in-flight sql insert operation support during an rac database failover | |
CN112968927A (zh) | 日志提取方法、日志提取装置、存储介质及电子设备 | |
CN113468508B (zh) | 信息验证方法、装置、服务器及存储介质 | |
CN115098469A (zh) | 数据库迁移方法及装置、电子设备和可读存储介质 | |
CN112988689A (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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230529 Address after: Room 1-2-A06, Yungu Park, No. 1008 Dengcai Street, Sandun Town, Xihu District, Hangzhou City, Zhejiang Province Patentee after: Aliyun Computing Co.,Ltd. Address before: Box 847, four, Grand Cayman capital, Cayman Islands, UK Patentee before: ALIBABA GROUP HOLDING Ltd. |