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

用于迁移活动文件系统的方法、设备和系统与流程

2023-02-04 13:25:16 来源:中国专利 TAG:

用于迁移活动文件系统的方法、设备和系统


背景技术:

1.如今,所谓的大数据在云中找到了天然的归宿。在云中,领先的公司正在充分利用廉价、可扩展的存储以及强大的云分析平台带来的灵活性。然而,尽管将大数据迁移到云有令人信服的优势,但也存在潜在的业务风险。
2.将大数据迁移至云的一种方法是手动完成。手动迁移是拷贝大数据的一种定制的战术方法。当管理员手动迁移数据时,他们会创建、管理、安排和维护自定义或开源脚本来迁移大型数据集。当数据传输设备添加到大数据到云的迁移计划中时,需要额外的自定义脚本来上传数据。这种手动大数据云迁移方法的业务风险包括数据不一致、业务中断和高it资源要求。数据不一致的风险
3.大型数据集迁移至云需要时间。以每秒1千兆位(gbps)的速度迁移1拍字节(pb)的数据大约需要100天。即使有数据传输设备,供应商的加载时间也需要数周。虽然使数据在云中可用,但仍然需要更改和接收。在漫长的迁移时间内更改数据会增加将大规模数据集准确引入云的风险。然而,由于手动迁移依赖于侧重于复制数据的自定义或开源脚本,迁移团队可能无法验证迁移的准确性。事实上,大规模手动对账并不能保证数据结果完全一致。此外,这种方法不支持迁移过程中可能发生的新更新。通常,大规模数据迁移的手动方法不支持迁移期间修改或创建的数据更改。业务中断的风险
4.由于规模和适用性优势,组织已将越来越多的任务关键型工作负载部署到hadoop。企业关键型工作负载带来了对可用性、一致性、安全性和可审核性的期望。就复杂性而言,移动不变的数据集很简单,而移动具有这些预期的动态变化的数据集则非常具有挑战性。在大数据迁移期间,手动迁移通常需要对本地应用程序操作进行有意义的中断。选择在数月内将数据集引入云的增量迁移策略的管理员面临着处理破坏性更新的问题,并面临无法满足其企业服务级别协议(sla)的风险。高it资源需求和成本增加的风险
5.公司为构建数据中心以托管其hadoop数据和工作负载而进行的重大资本投资刚刚超过了通常的两到四年折旧期,因此这些成本可以注销。从资本硬件折旧转移到云运营支出变得非常简单。公司还在支持内部数据基础架构的人员、流程和应用程序方面进行了大量投资。将手动迁移添加到这些沉没成本中会给it预算带来风险。尝试无中断、无停机大数据迁移的活动开销非常大。在数据迁移项目开始时,创建、测试、管理、安排和维护自定义迁移脚本所需的资源范围可能没有被完全理解,甚至无法量化。由于手动迁移的自定义性质,此类迁移计划容易出现代价高昂的延迟。
附图说明
6.图1a是提供者(donor)d和受让者(beneficiary)b的有根树结构的图示。
7.图1b是根据一个实施例,显示从由前缘和后缘界定的一组节点中拉出的内容的滑
动窗口的图示。
8.图1c是根据一个实施方案,说明内容从提供者文件系统d迁移到受让者文件系统b时,栅栏柱(fencepost)f的示意图。
9.图2所示为本计算机实施的方法和系统的一个实施例的各方面。
10.图3为说明本计算机实施的方法和系统的其他方面的框图。
11.图4为显示未迁移区域和迁移区域之间的重复重命名会阻碍迁移的方式的示意图。
12.图5显示了将受让者文件系统b的未迁移部分重命名为其已迁移部分的命令的各个方面。
13.图6是根据一个实施例,在处理对元数据进行操作的命令时,将元数据从具有有根树结构的提供者文件系统d迁移到受让者文件系统b的计算机实施方法的流程图。
14.图7显示了根据一个实施例,可用于将元数据从具有有根树结构的提供者文件系统d迁移至受让者文件系统b,同时处理对元数据进行操作的命令的本方法的实施方面的物理硬件。
具体实施方式
15.考虑将大量数据从文件系统(称为提供者),例如hadoop文件系统(hdfs),复制到目的地,例如云存储(受让者)。一旦迁移了数据,只需放弃原存储即可“切换”到目标,或者使用主动-主动复制解决方案使两个副本保持同步,从而维护这两个副本。用于这种主动-主动复制的工具可以使用分布式一致协议来构建,例如来自本受让者wandisco公司的paxos fusion。
16.如前所述,即使通过快速通信通道传输大型数据集(例如,1pb或更多),也需要很长时间。因此,完全可以想象,迁移大量数据的行为可能会花费令人望而却步的时间,超过数据所有者可以避免修改数据的时间。例如,这种迁移可能需要几天或几个月的时间,具体取决于数据量和可用带宽,并且该数据的所有者可能无法选择在此期间不修改数据。因此,关键的业务需求是在迁移过程中允许客户端操作在提供者文件系统上执行的能力。这里,在迁移过程中允许客户端操作的迁移被称为无中断迁移。这种无中断迁移本质上是长期运行的,这意味着迁移可能需要几天、几周或几个月才能完成。考虑到这种无中断迁移的长期运行特性,另一个业务需求是,任何这种长期运行的操作都必须足够健壮,以承受诸如节点和链路故障之类的故障。
17.目前,执行拍字节级迁移的方法是首先将数据传输到存储传输设备,例如亚马逊web服务导入/导出雪球(aws import/export snowball),将其物理运送到云供应商,然后等待数据上传到云存储,这一过程可能需要一周以上的时间。值得注意的是,数据在上传之前是不可访问的。但是,如果不是迁移到云存储,加载到存储设备中的数据在此期间肯定会发生变化。这些变化(增量)可以通过拍摄快照并通过网络发送来捕获。重复这个过程,直到两个站点有相同的内容。当校正内容所需的最后增量足够小时,可能有必要锁定文件系统并阻止客户端,并且认为这种阻止对客户的中断不显著。请注意,根据供应商的不同,存储设备的数据传输速率有上限。如果传输速率成为限制因素,预计系统管理员将对文件系统进行分区,并并行使用多个设备。也不能保证这种方法需要多长时间才能使两边的数据完
全相同。这种类型的迁移必然会有一些手动步骤。除非有严格的一致性检查,否则这种方法容易导致数据丢失/损坏。
18.因此,我们需要强大的方法和系统来消除手动大数据迁移的风险或高成本。还需要用于跨所有主要商业hadoop发行版向云进行大规模自动数据迁移的方法和系统,只需对源存储进行一次扫描,即使数据在不断变化。这样的解决方案应该不需要脚本、不需要代码维护、不需要传输设备、不需要调度、不需要审查。
19.因此,一个实施例实现了从持续运行的内部系统到云的大规模数据迁移的自动化。当提供者系统(数据从其迁移)中的任何地方发生变化时,用于实时迁移的本方法和系统确保受让者系统(数据被迁移到的地方)在完成时具有一致的数据。此外,本发明的计算机实现的方法和系统操作来通过跨所有主要商业(例如,hadoop)发行版和云存储和分析服务的对源存储的单次扫描的一次点击复制来最小化it资源。所描述的实时迁移计算机实现的方法和系统包括大数据迁移的自动化方法,其提供共享系统之间的数据一致性的验证。由于更改可能发生在提供者系统的任何地方,受让者在完成时拥有一致的数据,没有数据丢失,也没有迁移准确性的不确定性。这样,所描述的实时迁移方法和系统为混合、多区域和云环境提供了100%的业务连续性,同时本地集群持续运行。在迁移期间对提供者群集和操作没有影响的情况下,所描述的实时迁移方法和系统使得公司能够以及时且经济的方式满足其关键的sla。
20.这里,假设要迁移的数据以有根树的形式构造,其中树的内部节点是目录,叶子表示文件或空目录。本领域技术人员可以认识到,这是真实文件系统的抽象,忽略了符号链接、目录和文件大小的限制、所有权许可等。并且不同的实施细节将解决这些问题。然而,这样的抽象在这里是有用的。在迁移过程中,假设要迁移的数据会发生变化。也就是说,在本公开中,假设文件系统的客户端继续向提供者方d发出命令c,以修改要迁移、正在迁移或已经迁移的数据。尽管根据实施例的迁移器进程m配置为具有阻止应用于提供者d的命令c的能力,但是这种阻止应该仅在不可避免时执行,并且以最小化中断的方式执行。本迁移器进程m可以有选择地将命令c所请求的改变应用于受让者b,目的是在来自c的所有改变已经应用于提供者d并且提供者d停止之后,使受让者b与提供者d相同。一旦元数据(包括但不限于被迁移的节点与其父节点之间的双向链接、许可、最后访问时间以及文件或文件夹的其他属性)被迁移,复制相应的实际数据块的任务就被移交给另一个工具,例如融合(fusion)。假设受让者b最初为空。如果不是,则受让者b可以在查阅从提供者d接收的元数据之后决定是否有必要拉取内容。
21.因此,一个实施例为异步迁移计算机实施的方法m,其经配置以使得在已将最后操作或命令c应用于提供者d且d静止后,受让者b接收所有变更,并变得与d相同。因此,单纯的实施可包括:1.阻止所有命令c;2.将提供者d的所有数据复制到受让者b;和3.解除阻止被阻止的命令队列。
22.虽然这种实现是正确的,但它并不是最佳的,因为它不能在迁移文件系统时最大限度地减少中断。考虑对有根树1002的深度优先扫描(dfs)遍历,如图1a所示。dfs从根开始,在图1a中表示为节点1。在访问一个节点后,dfs递归地扫描它的所有子节点,从按字典
顺序排列的第一子节点(child)开始。在扫描完以第一子节点为根的子树后,dfs继续扫描第二子节点,依此类推,直到访问完所有节点。在图1a中,dfs从左到右扫描,从字典上的第一子节点开始;在这种情况下,节点1。在节点1之后,扫描节点2,然后是节点3。由于节点3有两个子节点(节点4和5),它们在节点2的另一个子节点之前被扫描;即节点6。扫描完节点3及其子节点4和5后,将扫描节点2的下一个子节点,即节点6。在这个阶段,已经扫描了节点2及其所有子节点。再次从左到右,然后扫描节点7,该节点没有子节点。然后扫描节点8及其子节点。所以节点9在节点8之后被扫描。由于节点9有两个子节点(节点10和11),它们将在节点8的另一个子节点(节点12)被扫描之前被扫描。由于节点10和11还没有被扫描,节点9是前缘,也是最后被扫描的节点。由于已经扫描了提供者d侧的节点2和7及其所有子节点,所以已经复制了这些节点及其所有各自的子节点(至少是其元数据),如受让者b侧的垂直散列所示。由于节点8的子节点尚未全部被遍历,并且由于节点9是dfs遍历的当前前缘,节点8及其分支和子节点未被指示为已经在受让者b侧被复制(至少其元数据)。因此,这个dfs遍历中的节点编号方案指示了行进的方向和顺序。当节点被认为在受让者b处可用或存在时,对应于该节点及其所有子节点的元数据已经成功写入b处的文件系统。在图1a中,在b处只有具有垂直散列的节点可用;编号为1和8-12的节点不是。注意,按照字母顺序递归地浏览子文件的dfs会导致按照字典顺序访问文件系统的每个路径。因此,可以使用“《”(小于)运算对节点进行排序。这样,相对于被扫描的节点,更小和更大的概念可以被使用而没有任何混淆。同样,也可以使用与被扫描节点相关的“向左”和“向右”的概念,而没有任何混淆。
23.此外,尽管这里示出了dfs,但是实施例不限于此。实际上,可以使用访问每个节点至少一次(优选地,正好一次)的任何扫描,例如广度优先。无论提供者处的扫描器选择的顺序是什么,受让者必须知道该顺序,以便它能够正确地处理客户操作。根据一个实施例,在接收到拉取节点内容的请求时,受让者在成功地将元数据写入目标文件系统之后确认该请求。以这种方式,提供者和受让者在迁移元数据时相互协作。在一个实施例中,传送内容的实际任务被委托给单独的模块,该模块可以在迁移元数据之后执行。让前缘引用迭代器2012(图3)从提供者文件系统获取的最后一个节点。类似地,让后缘指扫描器发出请求的最小(或最左边)节点,但是受让者没有确认对应于该节点的元数据的成功写入。因此,从提供者的角度来看,所有小于后缘的节点都在迁移的部分中。前缘和后缘之间的节点构成了文件系统的迁移部分。根据一个实施例,这组节点可以被想象为滑动窗口,该滑动窗口随着提供者发出请求和从受让者接收确认而增长和收缩。在迭代器使用获取下一个(getnext)()2016从提供者文件系统获取单个对象、向远程代理发出请求、在发出下一个请求之前等待确认的情况下,滑动窗口的大小永远不会大于1。这种方法在许多情况下可能限制过多。一种实现设想迭代器一次获取几个对象,并在滑动窗口为空时将它们保存在主存储器中,而不是将每个对象都访问在磁盘中。然而,滑动窗口最好永远不要变得太大。否则,提供者或受让者的有限资源可能会不堪重负,从而导致潜在的崩溃。因此,在大多数实际实现中,根据可用于迁移的资源,具有大的有界窗口将是谨慎的。在这种理解下,可以假设获取下一个()2016表示获取要迁移的对象的集合,尽管为了清楚起见,描述是按照一次从磁盘获取一个对象来进行的。
24.图1b是示出根据一个实施例的从节点拉出的内容的滑动窗口的图示,该滑动窗口由前缘和后缘界定。如图所示,滑动窗口102被示为由前缘104界定,前缘104是迭代器2012
从提供者文件系统d获取的最后一个节点。类似地,附图标记106表示后缘,即扫描器发出请求的最小(或最左边)节点,但是受让者文件系统b还没有确认对应于该节点的元数据的成功写入。因此,从提供者d的角度来看,小于后缘的所有节点(复选标记节点)都在迁移部分108中。如图1b所示,前缘104和后缘106之间的节点构成了文件系统的迁移部分110。在图1b的例子中,前缘与后缘不同,因为迭代器2012一次获取多于一个节点。迭代器202尚未从提供者文件系统d中取出的节点在112处示出,作为要迁移的和当前未迁移的节点112。如图1b所示,所示的迁移节点110被滑动窗口102捕获,当提供者文件系统d发出请求并从受让者文件系统b接收确认时,该滑动窗口102增长(包含更多数量的节点)和收缩(包含更少数量的节点)。
25.图2显示了根据一个实施例的迁移活动文件系统的计算机实施方法的各方面。如图所示,计算机实现的过程将提供者文件系统d和空的受让者文件系统b作为输入,并返回受让者文件系统b,该受让者文件系统b至少在提供者文件系统d中存储的数据的元数据方面与提供者文件系统d相同。如图2所示,提供者文件系统d的根表示为节点“n”。还如图所示,由客户端发出的对提供者文件系统d中的数据进行操作的命令被表示为“c”,而args[]是这种命令c的参数数组。在图2中,q是配置成保存被阻止的命令c的最小堆,每个命令c的最右边的参数作为最小堆的关键字。
[0026]
如图2所示,一个实施例包括扫描器2002和客户端代理或迁移器2004,它们介于发出命令c的客户端和提供者文件系统d之间。以这种方式,客户端发出的所有命令c都被客户端代理或迁移器2004截取,客户端代理或迁移器2004决定如何以及何时实现所请求的改变(例如,写入、附加、截断、移动、删除、重命名等)编码在从客户端接收的命令c中。在受让者文件系统b侧,迁移器远程代理从扫描器2002接收要复制的数据对象o,将这种数据对象o的元数据写入受让者文件系统b,并向扫描器2002报告数据对象o的元数据成功或不成功写入受让者文件系统b。
[0027]
根据一个实施例,扫描器2002可以配置为扫描提供者文件系统d的每个节点,将该节点的元数据复制到受让者文件系统b,通知最小堆(min heap)q当前节点的元数据已经被复制到受让者文件系统b,并且对下一个节点重复该过程,直到提供者文件系统d的整个文件系统树已经被遍历(在一个实施例中,在单次遍历中),于是扫描器2002可以向客户端代理或迁移器2004发信号通知迁移完成。
[0028]
迁移器2004,结合扫描器2002,可配置为当提供者文件系统d处的文件系统发生变化时,将元数据从提供者文件系统d迁移到受让者文件系统b;也就是说,当命令在提供者文件系统d上操作并改变数据(以及因此改参数数据)时。提供者文件系统d即使在被迁移到受让者文件系统b时,也是活动文件系统。目标是达到受让者文件系统b与提供者方文件系统d相同的点。再次注意,本公开涉及移动对应于由提供者方文件系统d存储的数据块的元数据,而不是数据块本身。在2017年3月13日提交的共同转让的申请号为15/457,837的美国专利申请中描述并示出了一种移动实际数据块的可能方法,该专利申请的名称为“methods,devices and systems for maintaining consistency of metadata and data across data centers”,其全部内容结合于此。可以使用其他方法。
[0029]
根据一个实施例,客户端代理或迁移器2004可以配置成接收命令c,并且根据迁移的当前状态,选择性地允许执行或阻止执行这样接收的命令c。例如,如果由迁移器2004接
收的命令c既对只存在于提供者文件系统d中的数据块x进行操作,又对存在于提供者文件系统d和受让者文件系统b中的数据块y进行操作,则一个实施例可以配置成阻止执行这样的命令,直到至少数据块x和y的元数据都存在于受让者文件系统b中。这是因为迁移器2004已经到达引用数据块y的受让者文件系统b的节点,并且迁移了数据块y的元数据(否则数据块y的元数据不会出现在受让者文件系统b中),而它可能还没有到达包含或引用数据块x的节点。如果通过执行这种命令c允许对数据块y的元数据进行改变,这种改变可能导致在提供者文件系统d和受让者文件系统b中进行不同的改变,这是不允许的。
[0030]
如图2所示,迁移器或客户端代理可以配置成根据输入命令c的参数是否都存在于受让者文件系统b中、其一些参数是否存在于受让者文件系统b中或者其参数是否都不存在于受让者文件系统b中,来选择性地执行输入命令c。因此,如1所示。在迁移器2004中,如果命令c的所有参数都存在于提供者文件系统d和受让者文件系统b中,则命令c可以在提供者文件系统和受让者文件系统中执行,并且确信命令c的参数(数据块)的元数据将在提供者文件系统d和受让者文件系统b中保持相同。如第一个“else”语句所示,如果命令c的参数都不存在于b中,则可以安全地执行该命令,但是仅在提供者文件系统d处。这是因为扫描器还没有到达引用命令c的一个或多个参数的一个或多个节点。在执行命令c之后,扫描器将最终到达引用命令c的参数的数据块的一个或多个节点,并且将导致所涉及的节点的改变的元数据迁移到受让者文件系统b。如图2中的第二个“else”语句所述,如果只有命令c的一些参数存在于受让者文件系统b中(意味着命令c的一些参数不存在于受让者文件系统b中),则命令c可以在最小堆q中排队,至少直到其所有参数都存在于受让者文件系统b中的时候,于是该命令可以出队并被调度在提供者文件系统d和受让者文件系统b中执行,如3所示。如果扫描器2002报告它已经遍历了整个提供者文件系统d,则存在于最小堆q中的任何剩余命令c可以出队并被执行或被调度执行。
[0031]
图3是示出根据一个实施例的迁移活动文件系统的计算机实现方法的附加特征的框图。图3示出了本计算机实现的迁移活动文件系统的方法的各方面,该方法发生在图的顶部的提供者文件系统d以及图的底部的受让者文件系统b。提供者d的数据储存库用参考数字2006表示,受让者b的数据储存库用参考数字2008表示。根据一个实施例,在扫描器2010的单次通过结束时,使数据储存库2006和2008相同,同时允许执行命令c。在单次通过之后,两个储存库保持相同,因为任何命令c的参数都将出现在受让者文件系统b中,因此,命令c可以在提供者文件系统d和受让者文件系统b两者处执行,而不会损害元数据和数据同步。由于图3是在元数据迁移正在进行的状态下示出的,所以数据储存库2006和数据储存库2008都被示为包括当前正从数据储存库2006迁移到数据储存库2008的数据和元数据,以及已经从数据储存库2006迁移到数据储存库2008的数据和元数据。由于在迁移开始时假定受让者文件系统b为空,因此只有服务于提供者方文件系统d的数据储存库2006包括未迁移的数据和元数据。
[0032]
在图3中,扫描器2010可以包括迭代器模块2012和更新进度模块2014。迭代器模块2012可被配置成以例如dfs方式遍历文件系统树,依次扫描提供者文件系统的每个节点一次。如图所示,迭代器模块2012可发出获取下一个()命令2016,以访问提供者文件系统d的下一个或第一节点,视情况而定,提供者文件系统d在图3中由数据储存库2006表示。如果这是被访问的第一节点,则整个数据储存库2006可以被标记为“未迁移”。响应于获取下一个
()命令,可以从数据储存库2006中检索第一或下一数据对象o,如2018所示。对象o(至少其元数据)然后可以被发送到受让者侧的迁移器远程代理2020。当从扫描器2010接收到数据对象o的元数据时,迁移器远程代理2020可以将数据对象o的元数据复制到受让者的数据储存库2008,在写入过程期间,元数据处于其“迁移”部分,并且在复制和确认成功传输完成之后,元数据处于其“迁移”部分。当然,数据存储库2008的“迁移”和“已迁移”部分不必是数据存储库2008的物理或逻辑分区。实际上,元数据可以与“迁移”标识符或标签相关联,直到复制完成并且提供者意识到这一事实,在此之后,“迁移”标识符或标签可以与其相关联。可以使用其他方法。
[0033]
一旦数据对象o的元数据已被复制到受让者侧的数据存储库2008,迁移器远程代理2020可通知扫描器2010该事实,这可导致更新进度模块2014更新扫描器2010在提供者文件系统节点遍历中的位置,并允许迭代器发出另一获取下一个()命令,以继续dfs遍历,并将存储在提供者侧的数据存储库2006中的数据对象的至少元数据复制到数据存储库2006。
[0034]
以上适用于静态情况,其中在从提供者到受主的迁移期间没有命令c被发出。然而,根据一个实施例,当客户端发出在迁移过程中改变数据对象和/或其元数据的命令c时,如图3中的2022所示,附加功能开始发挥作用,以确保元数据从提供者文件系统到受让者文件系统的有序迁移。如图3所示,当客户端通过数据复制层2024发出命令c2022时(在一个实现中,本受让者的融合(fusion),如上所述),可以首先确定迁移器的扫描器2002是否在命令c的路上,如2025所示。换句话说,可以确定扫描器的前缘是否已经到达与命令的参数相关联的节点。例如,如果扫描器还没有到达对应于命令参数的节点,则命令c的所有参数(的元数据)将只存在于提供者文件系统d中,而不存在于受让者文件系统b中,因为扫描器2002还没有到达它们。因此,该命令可能仅在提供者文件系统d上执行,因为命令c的参数尚未出现在受让者文件系统b中。类似地,如果在2024确定扫描器的后缘已经超过了命令c的所有参数2022(2025的“否”分支),则也可以执行命令c,如2026所示,因为其参数已经存在于提供者和受让者文件系统中。然后,命令c将应用于提供者文件系统和受让者文件系统。
[0035]
然而,当扫描器2002处于命令c的方式中时,这意味着命令c的一些而非全部参数仅存在于提供者文件系统中,并且其一个或多个参数同时存在于提供者和受让者文件系统中,则命令c2022可能不会被立即执行,因为这将使得提供者和受让者文件系统的迁移部分不相似。此外,由于本迁移旨在一次完成,因此在所有不涉及命令的节点被迁移之后,仅保存这些命令以供以后执行,然后返回执行这些命令并不是最佳的。
[0036]
因此,一个实施例要求暂时阻止选定命令c的执行,如2028所示,并将其插入命令队列2030。在一个实施例中,命令队列2030是或包括优先级队列,也称为最小堆。以这种方式,其参数可能被更早迁移的命令c比其参数可能被更晚迁移的命令更靠近队列的头部。一旦命令在2028被阻止并被插入到最小堆2030中,其执行被推迟,并且迁移以与之前相同的顺序继续,以前述dfs(例如)方式遍历提供者文件系统d的节点树。
[0037]
如上所述,一旦数据对象o的元数据被复制到受让者侧的数据存储库2008,迁移器远程代理2020可以通知扫描器2010,这使得更新进度模块2014更新扫描器2010在提供者文件系统d节点遍历中的位置,并允许迭代器2012发出另一个获取下一个()命令,以继续dfs遍历,并将至少存储在提供者侧的数据仓库2006中的数据对象的元数据复制到受让者侧的数据仓库2008。当扫描器2002处理节点并将数据对象发送到迁移器远程代理2020以复制到
受让者文件系统b时,更新进度模块2014触发在2032确定扫描器2002是否在最小堆2030的前面。
[0038]
一旦扫描器2002处理了引用任何阻塞命令的参数中的数据的所有节点,意味着其参数同时存在于提供者文件系统d和受让者文件系统b中(意味着迁移器不再位于优先级队列2030的前面,参见2032的“否”分支),最小堆2030前面的命令可在2034处解除阻塞,在提供者文件系统d和受让者文件系统b中出列并执行,如2026所示。应对对抗情景
[0039]
在整个扫描过程中,希望认定直到后缘的所有节点都已被复制。然而,在下列典型的对抗情况下,不可能维持这一认定:1.如果新内容(新文件或现有文件中的新内容)的摄取速度快于传输摄取内容的速度,则即使该认定在扫描期间暂时变为真,也无法维持该认定。2.即使不将任何新内容吸收到提供者文件系统d中,迁移工作也会受阻。例如,考虑执行重复重命名操作的代码片段:while(true)rename a

x//a in migrated,x in unmigratedrename x
→a[0040]
图4为显示未迁移区域和迁移区域之间的这种重复重命名会阻碍迁移的方式的示意图。在图4中,在4002示出了有根节点树的轮廓。其散列部分指示节点树的已经迁移的部分4004,而其非散列的白色部分指示尚未迁移的部分。
[0041]
通过跟踪路径经历的突变历史,显著改善了涉及处理重命名和重复重命名的困难。在2017年3月13日提交的名称为“methods,devices and systems for maintaining consistency of metadata and data across data centers”的共同转让的申请号为15/457,837的美国专利申请中描述并示出了一种跟踪重命名历史的可能方法,该方法被称为名称映射服务应用程序接口映射文件名(application program interface mapfilename),该专利申请的全部内容结合于此。可以使用其他方法。
[0042]
例如,这里有一种不同的应对机制,可以应对涉及重复目录重命名的特殊困难。回想一下,前缘指的是扫描器2002为其发出对要迁移的内容的请求的最后一个节点,而后缘指的是扫描器为其发出请求的最小(或最左边)节点,但是受让者还没有确认对应于该节点的元数据的成功写入。根据一个实施例,如果重命名的参数之一是前缘或后缘,或者是这些前缘和后缘之间的节点,则该重命名命令被暂时阻止,直到扫描器离开。此外,除非重命名命令的一些参数在迁移的区域中,而其他参数在未迁移的区域中,否则重命名命令的参数将如上所述进行处理。也就是说,如果重命名命令的所有参数在受让者文件系统b中已经可用,则重命名可以在提供者文件系统d和受让者文件系统b中安全地执行。同样,如果重命名命令的所有参数在受让者文件系统b中都不可用,则重命名可以仅在提供者文件系统d中安全地执行。这就需要考虑以下两种情况:1.迁移到未迁移的重命名:一个实施例是在本地执行重命名,随后删除远程端的节点,尽管其他实现也是可能的。实际上,在本地执行重命名,然后在远程删除节点(即,在本地执行重命名命令,并在远程服务器删除相应的对象),虽然是正确的,但效率不是最佳的。假设操作是重命名s

t,其中s和t分别处于被迁移和未迁移状态。在提供者文件系统d
中,这没有什么不同,但是在远程受让者文件系统b中,删除以s为根的子树只是为了以后在名称t下完整地重新创建它是浪费的。一种选择是立即在提供者文件系统d处执行操作,并且将受让者文件系统b处的远程操作安排在稍后的时间处理,例如直到扫描器有机会创建t的父级之后。2.未迁移到已迁移的重命名:这种情况需要更详细的解释,处理方式如下,参见图5。当重命名请求到达时,它们立即在提供者处被执行,并且它们的根被推到大小受限的堆栈5002上,该堆栈5002用于调度迁移器来处理被指定为附加的“未迁移区域”换句话说,这些重命名在连续的迁移区域中产生“孔(holes)”,但是因为堆栈的大小上限为预定常数,所以孔的数量在任何给定时间都是有限的。如果包含这些附加迁移的堆栈变满,这种新的重命名请求可能会被拒绝。跟踪打开的文件
[0043]
针对文件系统发出的命令具有一个或多个参数。这些参数是指向文件系统中的目录或文件的路径。如上文[0022]所述,可以使用《运算符对它们进行比较,该运算符定义了所有可能参数集合的总排序。
[0044]
在一个实施例中,可以跟踪已经被允许执行的、在提供者文件系统d的未迁移部分上操作的、并且不知道已经终止的命令的参数集s,以便于文件系统的有效迁移。因此,集合s可以存储在任何数据结构中,该数据结构支持元素的有效插入和删除以及找到最小元素的有效方式,称为栅栏柱f,如图1c所示。在图1a中,提供者文件系统d的未迁移节点是节点10、11和12。如图所示,客户端当前正在与节点11交互,该节点11是已经被允许执行的命令的参数,其在提供者文件系统d的未迁移部分上操作,并且不知道其已经终止。因此,s={11}并且节点11也是栅栏柱(s的至少=或最小=元素。再举一个例子,假设节点12上有客户端活动。那么,这里定义的集合s是{12}。因为s只有一个元素,集合s的至少(或最小)元素是节点12。当节点12仍然打开时,假设发出另一个命令来打开节点10。然后,集合s变成{10,12}。栅栏柱现在成为节点10,因为10是s的至少(或最小)元素。现在,如果节点10在节点12之前完成迁移,则s回到单元素集{12},并且栅栏柱f相应地移回节点12。注意,s的元素的插入和删除可以是随机的顺序。s的元素可以被结构化为自平衡的二叉搜索树,以有效地支持这些操作,例如最小堆(min heap),或红黑树(red-black tree)。(参考:cormen,thomas h.;leiserson,charles e.;rivest,ronald l.;stein,clifford(2009)[1990].算法入门(introduction to algorithms)(第三版)。麻省理工学院出版社和麦格劳希尔公司(mit press and mcgraw-hill)。isbn 0-262-03384-4),其全部内容通过引用并入本文。
[0045]
确保迁移正确性的充分条件是将扫描器2002与对s的更新同步,使得扫描器永远不会超过f。不同的是,前缘不应该越过栅栏柱。这可以通过不允许在扫描仪前进时移动栅栏柱的改变来实现,即不允许任何具有《f且》=(大于等于)前缘的参数的命令,如图1c中的114所示。换句话说,在扫描开始时,延迟前缘和栅栏柱之间发生的任何客户端活动。会导致较低栅栏柱值的客户端请求会延迟,直到扫描完成。根据一个实施例,一旦扫描完成,延迟的客户端请求被允许继续进行,其中一些现在将在文件系统的迁移部分上操作。继续需要对未迁移部分进行操作的其余部分被添加到s中。本领域技术人员可以想到其他实现方式。注意,当s为空时,f是未定义的。在这种情况下,确保迁移正确性的一种方法是,在推进扫描器2002时,不允许对文件系统的未迁移部分进行任何更改。处理这种情况的其他方式对于
本领域技术人员来说也是显而易见的。图1c示出了栅栏柱概念的有用性。
[0046]
在图1a和1c中,前缘(恰好也是后缘)位于节点9处。为了获得文件系统的获取下一步(),扫描器只需要阻塞(即,延迟更改)节点9、10和11(实际的前缘及其子节点);当扫描器正在获取下一个要访问的节点时,客户端可以自由地操作节点12。一旦扫描器2002已经到达节点11,栅栏柱f可以相应地移动到更高等级(向右)的节点。孤立的迭代器
[0047]
除非采取预防措施,否则一些客户端请求会干扰扫描器2002的自然进程,使其失去在文件系统中的位置,并使其成为孤立者。其中包括:1.删除作为前缘原型的目录的请求2.移动作为前缘原型的目录的请求
[0048]
例如,参考图1,如果执行重命名8

2命令,当迭代器到达8的最后一个子节点,即12时,获取下一个()将返回不正确的值。类似地,如果执行删除x,其中x是扫描器当前位置的原型,那么迁移根为x的子树下的节点是没有意义的。
[0049]
这类问题可以通过识别违规命令来解决,违规命令是指那些具有一个或多个参数的命令,这些参数是前缘的原型。考虑删除操作。例如,根据一个实施例,可以通过首先运行x的获取下一个()来执行删除x命令c,使用该节点作为扫描器应该恢复其操作的节点,随后在提供者文件系统d和受让者文件系统b处删除x。根据一个实施例,根据目标,重命名命令也可以被简化为从未迁移到迁移的重命名的某种组合,反之亦然。例如,如果重命名的目标在提供者文件系统d的迁移部分中,则该目标可被视为从未迁移区域到迁移区域的重命名,如上所述。类似地,如果目标在提供者文件系统d的未迁移区域中,则可以在本地执行重命名,随后删除远程节点处的节点,或者对其进行任何优化。提供者文件系统处于活动状态时的迁移启动
[0050]
迁移器可以随时启动。也就是说,提供者文件系统d可以处于静止状态,或者当前可以是活动的。如果提供者文件系统正在主动处理命令,一个实施例要求设置可配置的时间量t,在此期间,迁移器静默地收集关于打开文件的数据,而不启动扫描器。在此期间,迁移器将了解文件系统上的活动,以便在扫描期间使用此信息。这里的假设是,需要迁移的文件将保持打开不到t个单位的时间。
[0051]
一种更具侵入性的方法是使用具有适当路径的建议,以便在处理该建议之前阻止所有后续客户端活动。最终,文件系统达到静止状态,此时,迁移程序会关闭扫描器,并取消阻止可能已被阻止的客户端活动。使用提议的一个缺点是,如果有长时间运行的操作,客户端活动会被阻塞一段不合理的时间。因此,必须谨慎使用这种方法。
[0052]
图6是根据一个实施例,将活动文件系统从提供者文件系统d迁移到受让者文件系统b的计算机实施方法的流程图。如其中所示,在处理对元数据进行操作的命令的同时,将元数据从具有有根树结构的提供者文件系统d迁移到受让者文件系统b的计算机实现的方法可以包括,如框b602所示,确定是否已经接收到对提供者文件系统d的元数据进行操作的命令。如果没有接收到这样的命令,则可以执行块b604,其中可以通过将提供者文件系统d的节点的元数据顺序复制到受让者文件系统b,在受让者文件系统b复制提供者文件系统d的有根树结构。
[0053]
当接收到对提供者文件系统d的元数据进行操作的命令时,当接收到的命令的所
有参数都存在于提供者文件系统d和受让者文件系统b中时,可在提供者文件系统d和受让者文件系统b中执行接收到的命令,如b606所示。如b608所示,当接收到的命令的参数都不存在于受让者文件系统b中时,接收到的命令可以仅在提供者文件系统d中执行。
[0054]
如b610所示,当所接收的命令的仅一些参数存在于受让者文件系统b中时,所接收的命令可在队列中排队,至少直到所接收的命令的所有参数都存在于受让者文件系统b中。当所接收的命令的所有参数都存在于受让者文件系统b中时,所接收的命令可出列并计划执行,如框b612所示。
[0055]
根据一个实施例,计算机实现的还可以包括当提供者文件系统d的有根树结构已经被复制到受让者文件系统b时,将任何剩余的命令从队列中出列,并调度出列的命令用于执行。该队列可以是优先级队列,例如最小堆。复制提供者文件系统d的有根树结构可以包括,例如,以深度优先扫描(dfs)方式遍历和复制有根树结构。当对元数据进行操作的命令包括作为有根树结构的复制的前缘的原型的节点的删除操作时,计算机实现的方法可以进一步包括将待删除的节点之后的下一个节点识别为顺序复制要恢复的节点,在提供者文件系统d和受让者文件系统b上执行删除操作,并且在所识别的下一个节点恢复顺序复制。当对元数据进行操作的命令包括已经从提供者文件系统d复制到受让者文件系统b的元数据的重命名操作时,计算机实现的方法可以进一步包括执行重命名操作,就好像它是还没有从提供者文件系统d复制到受让者文件系统b的元数据的重命名操作一样。或者,当对元数据进行操作的命令包括尚未从提供者文件系统d复制到受让者文件系统b的元数据的重命名操作时,计算机实现的方法可以进一步包括在提供者文件系统d执行重命名操作,并在受让者文件系统b删除受重命名操作影响的任何节点。该计算机实现的方法还可以包括独立地将与元数据相关联的数据块从提供者文件系统d复制到受让者文件系统b。该计算机实现的方法还可以包括使用扫描器进程以逐步方式遍历有根树结构,该扫描器进程获取提供者文件系统d的未迁移部分的下一节点的元数据,并将所获取的元数据提供给受让者文件系统b处的远程代理,该远程代理被配置为将提供的元数据复制到受让者文件系统b。接收对元数据进行操作的命令可以包括在命令被执行和操作以改变存储在提供者文件系统d中的元数据之前,拦截来自其发送者的命令。该计算机实现的方法还可以包括在受让者文件系统b的有根树结构已经被迁移到受让者文件系统b之后,对存在于队列中的任何剩余命令进行出队和调度以供执行。根据一个实施例,在处理对元数据进行操作的命令的同时,将元数据从提供者文件系统d迁移到受让者文件系统b可以在受让者文件系统b的有根树结构的一次遍历中执行。将接收到的命令入队包括暂时阻止其执行。该计算机实现的方法还可以包括接收重复的重命名命令,并通过将重复的重命名命令压入大小受限的堆栈中以供以后执行来暂时阻止重复的重命名命令的执行。当将提供者文件系统d的节点的元数据复制到受让者文件系统b遇到打开的文件时,该方法可以进一步包括临时阻止从打开的文件向下跨越到有根树结构的分层较低部分的有根树结构的一部分。
[0056]
另一个实施例是计算机实现的系统,包括具有有根树结构的提供者文件系统d;受让者文件系统b;联接到受让者文件系统b的迁移器远程代理和迁移器进程,该迁移器进程配置为拦截由发送者发出的改变存储在提供者文件系统d中的元数据的命令,该迁移器进程包括扫描器进程,该扫描器进程被配置为遍历提供者文件系统d的有根树结构,并且通过计算机网络将从其检索的元数据顺序发送到迁移器远程代理,用于复制到受让者文件系统
b中,以将提供者文件系统d复制到受让者文件系统b。迁移器进程还可以被配置为当截取的命令的所有参数都存在于提供者文件系统d和受让者文件系统b中时,通过在提供者文件系统d和受让者文件系统b中执行接收的命令来处理截取的命令;仅当在受让者文件系统b中不存在截取的命令的参数时,在提供者文件系统d执行接收的命令;当只有所截取的命令的一些参数存在于受让者文件系统b中时,将所接收的命令在队列中排队,至少直到所接收的命令的所有参数都存在于受让者文件系统b中;以及当其所有参数都存在于受让者文件系统b中时,将截取的命令出队并调度执行。物理硬件
[0057]
图7示出了可以实现各实施例的计算设备的框图。图7的计算设备可以包括总线701或用于传递信息的其他通信机制,以及与总线701联接的用于处理信息的一个或多个处理器702。计算设备还可以包括联接到总线701的随机存取存储器(ram)或其他动态存储设备704(称为主存储器),用于存储信息和将由处理器702执行的指令。主存储器(有形的和非暂时性的,这里的术语不包括信号本身和波形)704也可以用于在处理器702执行指令期间存储临时变量或其他中间信息。图7的计算设备还可以包括联接到总线701的只读存储器(rom)和/或其他静态存储设备706,用于存储处理器702的静态信息和指令。诸如磁盘和/或固态数据存储设备之类的数据存储设备707可以联接到总线701,用于存储信息和指令,例如执行相对于图1-6所示和公开的功能所需的信息和指令。计算设备还可以经由总线701联接到显示设备721,用于向计算机用户显示信息。包括字母数字键和其他键的字母数字输入设备722可以联接到总线701,用于向处理器702传送信息和命令选择。另一种类型的用户输入设备为光标控制设备723,如鼠标、轨迹球或光标方向键,用于向处理器702传达方向信息和命令选择,并用于控制显示器721上的光标移动。图7的计算设备可以经由通信接口(例如,调制解调器、网络接口卡或nic)708联接到网络726。
[0058]
如图所示,存储设备707可以包括直接存取数据存储设备,例如磁盘730、非易失性半导体存储器(eeprom、闪存等)732,包括磁盘和非易失性半导体存储器的混合数据存储设备,如731所示。附图标记704、706和707是其上存储有表示指令序列的数据的有形、非暂时性计算机可读介质的示例,当由一个或多个计算设备执行时,这些指令实现本文描述和示出的实施例的各方面。这些指令中的一些可以本地存储在客户端计算设备中,而这些指令中的其他指令可以远程存储(和/或执行)并通过网络726传送给客户端计算。在其他实施例中,所有这些指令可以本地存储在客户端或其他独立计算设备中,而在其他实施例中,所有这些指令被远程存储和执行(例如,在一个或多个远程服务器中),并且结果被传送到客户端计算设备。在又一个实施例中,指令(处理逻辑)可以存储在另一种形式的有形的非暂时性计算机可读介质上,如728所示。例如,参考728可被实现为光盘(或某种其他存储技术),其可构成合适的数据载体,以将存储在其上的指令加载到一个或多个计算设备上,从而将计算设备重新配置为本文描述和示出的一个或多个实施例。在其他实现中,参考728可以被实现为加密的固态驱动器。其他实现也是可能的。
[0059]
本发明的实施例涉及使用计算设备来复制活动文件系统。根据一个实施例,这里描述的方法、设备和系统可以由一个或多个计算设备响应于处理器702执行包含在存储器704中的指令序列来提供,该指令序列体现了这里示出和描述的计算机实现的方法的方面。这样的指令可以从另一个计算机可读介质读入存储器704,例如数据存储设备707或另一个
(光、磁等)。)数据载体,如728所示。包含在存储器704中的指令序列的执行使得处理器702执行这些步骤并具有这里描述的功能。在替代实施例中,可以使用硬连线电路来代替软件指令或者与软件指令相结合来实现所描述的实施例。因此,实施例不限于硬件电路和软件的任何特定组合。实际上,本领域技术人员应该理解,任何合适的计算机系统都可以实现这里描述的功能。计算设备可以包括一个或多个微处理器,用于执行期望的功能。在一个实施例中,由一个或多个微处理器执行的指令可操作来使一个或多个微处理器执行这里描述的步骤。指令可以存储在任何计算机可读介质中。在一个实施例中,它们可以存储在微处理器外部的非易失性半导体存储器上,或者与微处理器集成在一起。在另一个实施例中,指令可以存储在磁盘上,并在由微处理器执行之前读入易失性半导体存储器。
[0060]
上述详细说明的部分描述了计算设备的操作过程和符号表示,计算设备可包括计算机组件,包括本地处理单元、本地处理单元的记忆存储设备、显示设备和输入设备。此外,这样的过程和操作可以利用异构分布式计算环境中的计算机组件,包括例如远程文件服务器、计算机服务器和存储器存储设备。本地处理单元可以通过通信网络访问这些分布式计算组件。
[0061]
计算机执行的过程和操作包括本地处理单元和/或远程服务器对数据位的操作,以及驻留在一个或多个本地或远程存储器存储设备中的数据结构内的数据位的维护。这些数据结构对存储在存储器存储设备中的数据比特集合施加了物理组织,并表示电磁频谱元素。此外,在此公开的计算机实现的方法通过在发布和执行命令以改变其元数据和数据的同时实现文件系统从提供者文件系统到受让者文件系统的迁移,改善了计算机的功能。这种计算机实现的方法不能够被人类的心理过程有效地执行。
[0062]
一种处理,如本文所述和所示的计算机实施的方法,通常可限定为可产生所需结果的计算机执行步骤序列。这些步骤通常需要对物理量进行物理操作。通常,尽管不是必须的,这些量可以采取能够被存储、传输、组合、比较或以其他方式操纵的电、磁或光信号的形式。本领域技术人员通常将这些信号称为比特或字节(当它们具有二进制逻辑电平时)、像素值、作品、值、元素、符号、字符、术语、数字、点、记录、对象、图像、文件、目录、子目录等。然而,应该记住,这些和类似的术语应该与计算机操作的适当物理量相关联,并且这些术语仅仅是应用于在计算机操作中存在的物理量的常规标记。
[0063]
还应理解,计算机内的操作通常指添加、比较、移动、定位、放置、照明、移除、更改等术语。这里描述的操作是结合由与计算机交互的人类或人工智能代理操作员或用户提供的各种输入来执行的机器操作。用于执行这里描述的操作的机器包括本地或远程通用数字计算机或其他类似的计算设备。
[0064]
此外,应理解程序、过程、方法等。这里所描述的不涉及或不限于任何特定的计算机或设备,也不涉及或不限于任何特定的通信网络架构。相反,各种类型的通用硬件机器可以与根据这里描述的教导构造的程序模块一起使用。类似地,通过特定网络架构中的专用计算机系统,利用存储在非易失性存储器(例如只读存储器)中的硬连线逻辑或程序,构建专用设备来执行这里描述的方法步骤可能被证明是有利的。
[0065]
虽然已描述了某些示例性实施例,但这些实施例仅通过示例的方式呈现,并非旨在限制本文公开的实施例的范围。因此,前面的描述并不意味着任何特定的特征、特性、步骤、模块或框是必要的或不可或缺的。实际上,这里描述的新颖方法和系统可以以各种其他
形式来体现;此外,在不脱离这里公开的实施例的精神的情况下,可以对这里描述的方法和系统的形式进行各种省略、替换和改变。
[0066]
所附权利要求及其等同物旨在涵盖属于本发明范围和精神的形式或修改。例如,本领域技术人员将理解,在各种实施例中,实际的物理和逻辑结构可以不同于附图中所示的那些。根据实施例,可以删除以上示例中描述的某些步骤,也可以添加其他步骤。此外,上面公开的特定实施例的特征和属性可以以不同的方式组合以形成附加的实施例,所有这些都落入本公开的范围内。虽然本公开提供了某些优选的实施例和应用,但是对于本领域普通技术人员来说显而易见的其他实施例,包括不提供这里阐述的所有特征和优点的实施例,也在本公开的范围内。因此,本公开的范围旨在仅通过参考所附权利要求来限定。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献