CN113574515A - 分布式系统中的异步存储管理 - Google Patents
分布式系统中的异步存储管理 Download PDFInfo
- Publication number
- CN113574515A CN113574515A CN201980093510.9A CN201980093510A CN113574515A CN 113574515 A CN113574515 A CN 113574515A CN 201980093510 A CN201980093510 A CN 201980093510A CN 113574515 A CN113574515 A CN 113574515A
- Authority
- CN
- China
- Prior art keywords
- update
- queue
- updates
- processor
- request
- 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.)
- Granted
Links
- 230000004044 response Effects 0.000 claims abstract description 12
- 238000000034 method Methods 0.000 claims description 45
- 238000012545 processing Methods 0.000 claims description 41
- 230000008569 process Effects 0.000 claims description 38
- 238000010586 diagram Methods 0.000 description 38
- 238000004891 communication Methods 0.000 description 18
- 230000002085 persistent effect Effects 0.000 description 10
- 230000009471 action Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 6
- 238000007726 management method Methods 0.000 description 6
- 239000008186 active pharmaceutical agent Substances 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 239000000835 fiber Substances 0.000 description 4
- 238000013523 data management Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 235000003642 hunger Nutrition 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000007704 transition Effects 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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/273—Asynchronous replication or reconciliation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1471—Saving, restoring, recovering or retrying involving logging of persistent data for recovery
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
在一些示例中,系统可以从用户设备接收对与存储器处的数据的存储有关的存储操作的用户请求。可以在向用户设备发送指示存储操作的执行的响应之前将更新添加到更新队列以使存储操作持续存在。例如,将更新添加到更新队列可以包括基于指定存储操作的类型和/或存储操作要实现的状态发送使更新被添加到更新队列的请求。另外,可以将关于更新的信息发送到另一个处理器以将更新添加到由另一个处理器管理的另一个更新队列。随后,可以从更新队列中获得更新并对该更新进行处理以执行存储操作。
Description
技术领域
本发明涉及数据存储的技术领域。
背景技术
数据对象可以被存储在将数据作为对象进行管理的对象存储架构中。许多用于管理存储数据的动作在计算上可能是昂贵的,并且当在线进行时,可能引入比某些应用所期望的更长的响应时间。用于异步地执行某些存储管理动作的传统方案在保证每个操作的正确性的能力方面可能是有限的。例如,传统方案可能没有某些操作可能需要的足够的保证原子性。另外,某些动作本质上可能是异步的,例如对象的保留在一段时间后期满。因此,需要有效且可靠的保护机制来实现复杂数据管理系统的高性能。
发明内容
本文的一些实现方式包括持久更新队列。例如,系统可以从用户设备接收对与存储器处的数据的存储有关的存储操作的用户请求。可以在向用户设备发送指示存储操作的执行的响应之前将更新添加到更新队列以使存储操作持续存在。例如,将更新添加到更新队列可以包括基于指定存储操作的类型和/或存储操作要实现的状态发送使更新被添加到更新队列的请求。另外,可以将关于更新的信息发送到另一个处理器以将更新添加到由另一个处理器管理的另一个更新队列。随后,可以从更新队列中获得更新并对该更新进行处理以执行存储操作。
附图说明
参照附图阐述详细描述。在附图中,附图标记的最左边的一个或多个数字标识该附图标记首次出现在其中的附图。在不同附图中使用相同的附图标记表示相似或相同的项目或特征。
图1示出根据一些实现方式的能够存储数据的系统的示例架构。
图2是示出根据一些实现方式的多个服务计算设备的示例配置的框图。
图3是示出根据一些实现方式的执行入队和折叠(collapse)更新操作的示例的框图。
图4是示出根据一些实现方式的执行按较高优先级入队的操作的示例的框图。
图5是示出根据一些实现方式的执行取得工作操作的示例的框图。
图6是示出根据一些实现方式的执行取得工作操作的示例的框图。
图7是示出根据一些实现方式的执行出队操作的示例的框图。
图8是示出根据一些实现方式的执行重新排队操作的示例的框图。
图9是示出根据一些实现方式的执行进行中列表操作(list in progressoperation)的示例的框图。
图10是示出根据一些实现方式的异步管理程序的示例操作的框图。
图11是示出根据一些实现方式的异步管理程序的示例操作的框图。
图12是示出根据一些实现方式的异步管理程序的示例操作的框图。
图13是示出根据一些实现方式的异步管理程序的示例操作的框图。
图14是示出根据一些实现方式的异步管理程序的示例操作的框图。
图15是示出根据一些实现方式的异步管理程序的示例操作的框图。
图16是示出根据一些实现方式的异步管理程序的示例操作的框图。
图17是示出根据一些实现方式的异步管理程序的示例操作的框图。
图18是示出根据一些实现方式的异步管理程序的示例操作的框图。
图19是示出根据一些实现方式的用于采用持久更新队列来管理更新的处理的流程图。
具体实施方式
本文的一些实现方式涉及用于分布式计算机系统的技术和布置,该分布式计算机系统包括维护用户请求和其他存储更新的高度可用的持久更新队列(DUQ)。例如,异步管理程序可以作为管理DUQ的后台服务执行以确保存储管理活动按照正确的顺序和指示执行和完成。在一些情况下,对DUQ的更新可以在与用户请求或其他存储事件的执行相同的事务中执行,从而使DUQ高效且一致。DUQ的冗余可以通过筏共识(Raft consensus)算法或其他合适的共识算法来实现。此外,举个例子,可以使用日志结构的合并树(LSM树)型数据结构来存储DUQ。
在一些示例中,为了同时支持效率和安全性,可以通过冗余使本文的高度可用的DUQ持续存在以存储将被异步处理的更新。由于可能存在至少三个DUQ副本,因此计算机系统能够承受其上存储有DUQ的存储设备的故障。DUQ可以保存关于任何通用更新的信息,并可用于任何类型的一般策略或动作。对DUQ的更新可以在与其他状态更改相同的事务内进行。这确保了在对用户做出响应之前使对DUQ的更新持续存在。另外,在对用户做出响应之后,更新可能仍需要在计算机系统内进一步处理。
在一些情况下,更改索引的事务也可能导致更新被委托给另一个索引。因此,也可以将对其他索引的更新添加到DUQ。举个例子,如果之前添加到DUQ的其他索引已经有更新并且该更新尚未被处理,则DUQ可以将该多个更新折叠成单个更新。如果这多个更新包含状态,则它们也可以单独控制如何合并两个更新以使状态一致。因此,本文的实现方式包括用于存储任意更新以供以后处理的灵活系统。可以通过在与系统的其余更改相同的事务中将更新添加到DUQ来保持一致性,以减少或消除更新被丢失的机会,或者相反在更新被记录在DUQ中时更改被丢失的机会。
在一些示例中,异步管理程序可以针对要处理的更新定期轮询DUQ。异步管理程序可以通过将DUQ中的要处理的更新标记为“正在进行”来处理这些更新,并且可以在内部将更新添加到内存队列以供工作者之后处理。该工作者可以进行与更新相关联的任何更改,例如更新二级索引、向系统发送消息等。处理完更新后,可以使更新从DUQ出队,以便DUQ的大小永远不会增长。
举个例子,假设计算机系统的一部分部署在包括第一用户的环境中,并且第一用户正在使用用户应用程序来摄取将在系统中保留几个月的一组视频。进一步地,假设随后基于特定的标准所选择的这些视频中的一部分需要对它们应用特定的元数据标签,然后使它们迁移到远程站点以进行存档。因此,此示例描述了以特定方式应用的一系列操作。此外,尽管该示例中的一系列操作相当复杂,但在本文的系统的真实世界的实现方式中可以应用实质上更复杂的系列操作。
在上面阐述的示例中,在用于完成上述系列的操作的数据的整个生命周期中存在由系统执行的具有昂贵性质的多个存储相关操作。为了完成示例的一系列操作,可以将在摄取每个视频时设置视频的保留的更新插入到DUQ中。类似地,也可以将基于上述标准启动索引作业的更新插入到DUQ中。然后,可以将索引结果用于查询要与元数据标签相关联的对象集。在应用元数据标签时,可以将另一个更新插入到DUQ中以建立将带标签的对象迁移到远程站点进行存档的动作。
本文的DUQ的一个示例优点是,可以根据先前应用的动作的结果来触发被插入到DUQ中的一系列更新。再举个例子,假设在迁移数据的更新被添加到DUQ之后,系统中的DUQ的一个副本存在于其上的节点出现故障(go down)或以其他方式变得不可用。由于DUQ可以在系统中的多个节点上冗余地维护,因此上述示例的处理仍然可以使用在系统中的另一个节点上维护的DUQ的冗余副本按照指示执行。
因此,本文的实现方式通过使用持续存在的DUQ在分布式计算系统内实现异步更新。本文添加到DUQ的更新随其余的状态更改是原子性的以保证正确性。本文的技术消除了更新是否会随与用户请求同步进行的对应更改出现的问题。更新可以在同步更改之前不排队,因此不存在DUQ中的更新永远持续存在的风险,因为DUQ不能在没有同步添加的对应状态的情况下运行。另外,更新不会在同步更新之后排队,因此在没有需要的更新的情况下不存在同步更改的风险。一旦从DUQ中检索到更新,可以安全地消耗它们,并且如果已应用了对应的状态更改,则不存在更新不在DUQ中的风险。
出于讨论的目的,在与用于管理对象和/或其他数据和相关联的元数据的存储的云存储系统通信的多个服务计算设备的环境中描述了一些示例实现方式。然而,这里的实现方式不限于所提供的特定示例,并且可以扩展到根据本文的公开内容对于本领域技术人员来说是清楚的其他类型的计算系统架构、其他类型的存储环境、其他类型的用户配置、其他类型的数据等。
图1示出根据一些实现方式的能够存储数据的系统100的示例架构。系统100包括多个服务计算设备102(1)-102(N),它们能够与至少一个存储系统104通信或以其他方式耦合,例如通过一个或多个网络106。此外,服务计算设备102能够通过一个或多个网络106与一个或多个用户计算设备108(例如,用户设备108(1)、108(2)、……)通信,用户计算设备108可以是各种类型的计算设备中的任何一种,如下面另外讨论的那样。
在一些示例中,服务计算设备102可以包括可以以任何数量的方式实施的一个或多个服务器。例如,服务计算设备102的程序、其他功能组件以及至少一部分数据存储可以在至少一个服务器上实现,例如以服务器集群、服务器农场(server farm)、数据中心、云托管计算服务等等实现,但是可以附加地或替代地使用其他计算机架构。在所示的示例中,服务计算设备102包括一个或多个处理器110、一个或多个计算机可读介质112以及一个或多个通信接口114,或者可以与一个或多个处理器110、一个或多个计算机可读介质112以及一个或多个通信接口114相关联。
每个处理器110可以是单个处理单元或多个处理单元,并且可以包括单个或多个计算单元或多个处理核。一个或多个处理器110可以被实施为一个或多个中央处理单元、微处理器、微计算机、微控制器、数字信号处理器、状态机、逻辑电路和/或基于操作指令来操纵信号的任何设备。举个例子,一个或多个处理器110可以包括一个或多个硬件处理器和/或任何适当类型的逻辑电路,这些硬件处理器和/或逻辑电路被特别编程或配置为执行本文所述的算法和处理。一个或多个处理器110可以被配置为获取并执行存储在计算机可读介质112中的计算机可读指令,该计算机可读指令可以对一个或多个处理器110进行编程以执行本文所述的功能。
计算机可读介质112可以包括通过用于诸如计算机可读指令、数据结构、程序模块或其他数据之类的任何类型的信息存储技术实现的易失性和非易失性内存和/或可移除和不可移除介质。例如,计算机可读介质112可以包括但不限于RAM、ROM、EEPROM、闪存或其他内存技术、光学存储器、固态存储器、磁带、磁盘存储器、RAID存储系统、存储器阵列、网络附加存储器、存储区域网络、云存储器或可用于存储所需信息并可由计算设备访问的任何其他介质。根据服务计算设备102的配置,计算机可读介质112可以是有形的非瞬态介质,从而在提及时,该非瞬态计算机可读介质不包括诸如能量、载波信号、电磁波和/或信号本身的介质。在一些情况下,计算机可读介质112可以与服务计算设备102位于相同的位置,而在其他示例中,计算机可读介质112可以部分远离服务计算设备102。例如,在一些情况下,计算机可读介质112可以包括一个或多个存储系统104中的一部分存储器。
计算机可读介质112可用于存储可由一个或多个处理器110执行的任意数量的功能组件。在许多实现方式中,这些功能组件包括可由一个或多个处理器110执行的指令或程序,当被执行时,这些指令或程序特别地对一个或多个处理器110进行编程以执行本文归于服务计算设备102的动作。存储在计算机可读介质112中的功能组件可以包括服务器程序116和存储程序118,其中每一个都可以包括一个或多个计算机程序、应用程序、可执行代码或其一部分。例如,服务器程序116可以提供与用户设备108和一个或多个存储系统104的通信功能。
存储程序118可以包括异步管理程序120并且还可以包括用于创建和管理元数据数据结构(DS)122(1)-122(N)的数据库管理功能,该元数据数据结构包含与由一个或多个服务计算设备102(1)-102(N)存储和管理的数据相关的元数据。例如,存储程序118可以包括被配置为使存储程序118维护文件系统、对象信息、数据管理信息和作为元数据数据结构122(1)-122(N)的一部分的其他信息的可执行指令。存储程序118还可执行管理功能,以管理包括在元数据数据结构122(1)-122(N)中的其他类型的信息,例如用户信息。
异步管理程序120可以管理并维护持久更新队列(DUQ)124。例如,DUQ124可以用于管理对由服务计算设备102存储的数据的更新,如下面另外讨论的那样。存储在计算机可读介质112中的附加功能组件可以包括用于控制和管理服务计算设备102的各种功能的操作系统(未在图1中示出)。在一些情况下,功能组件可以被存储在计算机可读介质112的存储部分中,被加载到计算机可读介质112的本地内存部分中,并由一个或多个处理器110执行。
另外,计算机可读介质112可以存储用于执行本文描述的功能和服务的数据、数据结构和其他信息。例如,计算机可读介质112可以存储元数据数据结构122(1)-122(N)和DUQ124。另外,计算机可读介质112可以存储应用程序编程接口(API)信息126,在执行本文描述的一些功能时,存储程序118和/或异步管理程序120使用该API信息126,如下面另外讨论的那样。此外,计算机可读介质112可以存储本地数据128(1)-128(N),其可以是每个服务计算设备102(1)-102(N)例如基于与用户设备108的交互等而存储的数据。
服务计算设备102还可包括或维护其他功能组件和数据(可包括程序、驱动器等)以及由功能组件使用或生成的数据。此外,服务计算设备102可以包括许多其他逻辑、程序和物理组件,其中上述那些仅仅是与本文讨论相关的示例。
一个或多个通信接口(I/F)114可以包括用于例如通过一个或多个网络106实现与各种其他设备的通信的一个或多个软件和硬件组件。因此,通信接口114可以包括或可以耦合至一个或多个端口,该端口提供与一个或多个网络106的连接以与一个或多个存储系统104、其他服务计算设备102和用户设备108通信。例如,一个或多个通信接口114可以通过LAN、互联网、电缆网络、蜂窝网络、无线网络(例如,Wi-Fi)和有线网络(例如,光纤通道、光纤、以太网)、直接连接以及本文其他地方另外列举的诸如等近距离通信中的一个或多个来实现通信。
一个或多个网络106可以包括任何合适的网络,包括:广域网,例如因特网;局域网(LAN),例如内联网;无线网络,例如,蜂窝网络、本地无线网络(例如,Wi-Fi)和/或短距离无线通信(例如,);有线网络,包括光纤通道、光纤、以太网或任何其他这样的网络、直接有线连接或其任意组合。因此,一个或多个网络106可以包括有线和/或无线通信技术。用于这种通信的组件可以至少部分取决于网络的类型、所选的环境或两者。用于通过这样的网络进行通信的协议是众所周知的,因此这里将不详细讨论。因此,服务计算设备102、一个或多个网络存储系统104以及用户设备108能够通过使用有线或无线连接及其组合的一个或多个网络106进行通信。
每个用户设备108可以是任何合适类型的计算设备,例如台式机、膝上型电脑、平板计算设备、移动设备、智能电话、可穿戴设备和/或能够通过网络发送数据的任何其他类型的计算设备。用户130(1)、130(2)、……可以分别与用户设备108(1)、108(2)、……相关联,例如通过各自的用户账户、用户登录凭证等。此外,用户设备108可能能够通过一个或多个网络106、通过单独的网络或通过任何其他合适类型的通信连接来与一个或多个服务计算设备102通信。许多其他变化对于受益于本文的公开内容的本领域技术人员来说是清楚的。
此外,每个用户设备108(1)、108(2)、……可以包括可以在相应的用户设备108(1)、108(2)、……上执行的用户应用程序136(1)、136(2)、……的相应实例,例如用于与服务器程序116通信,例如,用于发送用户数据以存储在一个或多个网络存储系统104上和/或用于从一个或多个网络存储系统104接收所存储的数据。在一些情况下,应用程序136可以包括浏览器或可以通过浏览器进行操作,而在其他情况下,应用程序136可以包括具有通过一个或多个网络106实现与服务器程序116通信的通信功能的任何其他类型的应用程序。
一个或多个存储系统104可以包括一个或多个存储计算设备140,其可以包括一个或多个服务器或任何其他合适的计算设备,例如上面关于服务计算设备102讨论的任何示例。一个或多个存储计算设备140可以各自包括一个或多个处理器142、一个或多个计算机可读介质144以及一个或多个通信接口146。例如,处理器142可以对应于上面关于处理器110讨论的任何示例,计算机可读介质144可以对应于上面关于计算机可读介质112讨论的任何示例,并且通信接口146可以对应于上面关于通信接口114讨论的任何示例。
另外,计算机可读介质144可以包括作为由一个或多个处理器142执行的功能组件的存储程序148,以用于管理一个或多个存储系统104中包括的存储器150上的数据的存储。存储器150可以包括与存储器150相关联的一个或多个控制器152,以用于将数据存储在存储设备156的一个或多个阵列154上等。例如,控制器152可以控制阵列154,例如用于以RAID配置、JBOD配置等配置阵列154,和/或用于基于存储设备156向存储程序148呈现逻辑单元,并用于管理作为云数据158存储在底层物理存储设备156上的数据。存储设备156可以是任何类型的存储设备,例如硬盘驱动器、固态驱动器、光驱动器、磁带、其组合等等。在一些示例中,一个或多个网络存储系统104可以包括本领域已知的可商购的云存储器,而在其他示例中,一个或多个网络存储系统104可以包括只能由与服务计算设备102相关联的实体访问的私有或企业存储系统。
在系统100中,用户130可以将数据存储到它们各自的用户设备108与之通信的一个或多个服务计算设备102并从该一个或多个服务计算设备102接收数据。因此,服务计算设备102可以为用户130和相应的用户设备108提供本地存储。在稳态操作期间,可能存在与服务计算设备102定期通信的用户108。另外,服务计算设备可以定期将元数据数据结构122备份到一个或多个网络存储系统104作为元数据数据结构备份168,以在服务计算设备102遭受故障时能够恢复元数据数据结构122。
在一些情况下,服务计算设备102可以被布置成一个或多个组、集群、系统等。例如,在一些示例(未在图1中示出)中,服务计算设备102可以成对布置,其中第一服务计算设备102可以耦合至第二服务计算设备102,使得它们一起形成用于向多个用户设备108提供存储和数据管理服务的计算节点。例如,至少对于维护元数据数据结构122,第一服务计算设备102(1)可以充当主要计算设备,而第二服务计算设备102(2)可以充当辅助计算设备。附加地或替代地,在一些示例中,服务计算设备102可以被布置在位于地理上分离的远程位置的多个集群中以实现复制和灾难恢复。许多其他配置对于受益于本文的公开内容的本领域技术人员而言将是清楚的。
如上所述,在一些情况下,可以在筏配置中配置多个服务计算设备102以用于管理DUQ 124并且用于在多个位置提供DUQ 124的冗余。例如,持续存在的DUQ 124使异步更新能够在分布式计算系统100内执行。添加到DUQ124的更新可以随其余的状态更改是原子性的以保证正确性。DUQ 124的使用确保了更新将随与用户请求同步进行的对应更改而出现。此外,更新可以在同步更改之前不排队,因此不存在DUQ中的更新永远持续存在的风险,因为DUQ不能在没有同步添加的对应状态的情况下运行。另外,更新不会在同步更新之后排队,因此在没有预期更新的情况下不存在同步更改的风险。一旦从DUQ 124中检索到更新,可以安全地消耗它们,并且如果已应用了对应的状态更改,则不存在更新不在DUQ中的风险。在下面讨论DUQ 124的其他特征和应用。
图2是示出根据一些实现方式的多个服务计算设备102的示例配置200的框图。在一些示例中,服务计算设备102(1)-102(3)可以被配置为执行用于管理DUQ 124的筏共识算法。例如,计算系统可以被布置为使用云存储器或其他网络存储器作为主要存储器的分布式对象存储,并且在一些示例中,可以将对象存储在由用户创建的桶(bucket)(未在图2中示出)中。
在图2的示例中,DUQ 124可以与其他状态一起驻留在由异步管理程序120生成的处理(被称为元数据网关202)内。因此,每个服务计算设备102(1)-102(3)可以包括各自的元数据网关202(l)-202(3),每个元数据网关具有持续存在状态204(l)-204(3),其包括DUQ124和其他状态206(l)-206(3)。元数据网关202管理由相应的服务计算设备102(1)-102(3)执行的元数据相关操作。元数据网关202可以提供或者可以以其他方式访问一个或多个API,例如从允许服务计算设备102进行调用以执行特定的更高级别的操作(例如,创建桶)的API信息126。在一些情况下,执行这些操作需要与不止一个索引(未在图2中示出)进行交互。举个例子,桶创建操作可以包括与三个索引交互。因此,二级索引的更新可以包括使用DUQ 124来确保所有更新都被正确执行以提供一致的二级索引。另外,DUQ 124可用于执行调度策略,例如在分布式系统中执行各种维护任务,例如自动删除满足某些标准的对象以及管理用户定义的动作,例如允许用户定义可以对某些操作、条件等执行的策略。
如上所述,在一些情况下,服务计算设备102(1)-102(3)可以被配置为作为筏组(Raft group)进行操作以提供DUQ 124的冗余。例如,异步管理程序120可以使用筏算法来保持多个服务计算设备102上持续存在状态204(包括DUQ124和其他状态206)的一致性。筏算法确保了每个服务计算设备102(1)-102(3)同意相同系列的状态转变。因此,筏共识208可以应用于整个持续存在状态204,而不仅仅是DUQ 124,因为可以使用筏共识协议将DUQ124与伴随状态(例如,其他状态206)一起而通常不独立于其他状态206进行复制。筏组经由选出的领导者而达成共识,例如筏组中的服务计算设备102可以是领导者也可以是追随者。领导者可以负责将DUQ 124复制到追随者。领导者可以通过发送心跳消息而定期通知追随者其存在。
在该示例中,假设用于根据指示的策略来存储对象的用户请求210例如从上面关于图1讨论的用户设备108接收。进一步地,假设第一服务计算设备102(1)是筏组领导者,而服务计算设备102(2)和102(3)是第一服务计算设备102(1)的筏组跟随者。因此,用户请求210在第一服务计算设备102(1)处使存储程序存储对象并将至少一个更新写入DUQ 124作为单个事务。另外,筏领导者(服务计算设备102(1))可以将对DUQ 124的至少一个更新传送到筏跟随者(服务计算设备102(2)和102(3))。因此,如208所示,通过筏共识算法,筏领导者可以将至少一个DUQ更新214发送到第二服务计算设备102(2)和第三服务计算设备102(3)。另外,如上所述,在一些示例中,还可以通过筏共识208更新与其他状态206相关的信息,其性质可以至少部分取决于通过DUQ124应用的更新。因此,可以基于筏算法定期更新DUQ 124的冗余副本。由于DUQ 124的多个副本在多个不同的存储设备上维护,因此系统能够承受在其上维护DUQ 124的存储设备或计算设备的故障。此外,通过在与用户请求相同的事务中执行更新DUQ 124,事件在对用户进行响应之前持续存在,元数据数据结构更新的延迟减少,并且从DUQ 124处理的任何后续更新可以异步处理。此外,如果对现有更新的处理导致需要对另一个数据结构、对象等进行附加处理,则可以将该附加处理作为附加更新添加到DUQ124,并且也可以对其异步执行。
DUQ 124可以是作为日志结构的合并树型数据结构存储的冗余优先级队列,并且可以与系统的其余状态保持在相同的存储器中。这使DUQ 124能够随系统的其余状态原子地进行更新。对DUQ 124的每个更新可以包括多个属性。优先级属性可以是指示DUQ 124中的项目的优先级的整数。例如,优先级可以是决定DUQ 124中的更新的处理顺序的首要考虑因素。具有较高优先级的更新可以比具有较低优先级的更新更快地处理。
队列编号属性也可以是整数,对于每次更新,该整数对于DUQ 124来说是唯一的。例如,随着每个更新被插入到DUQ 124中,可以从单调递增的计数器中给更新分配数字。具有较高队列编号的更新可以在具有较低队列编号的更新之后被插入到DUQ 124中。因此,队列编号可以是决定更新处理顺序的第二考虑因素。如果两个更新具有相同的优先级,则具有较低队列编号的更新可以比具有较高队列编号的更新更快地处理。
另一个属性可以是更新的类型,它可以是决定异步管理程序将如何处理更新以及如何折叠相同关键字的更新的列举类型。关键字属性可以是为DUQ 124提供DUQ 124可以对更新进行去复制(deduplicate)的机制的二进制大对象(blob)。另外,处理器标识符(ID)属性可以是系统中的各个处理器的指示哪个处理器当前正在处理特定更新的唯一ID。对于不是正在被处理的更新,不设置处理器ID属性。此外,状态属性可以是包含与更新相关的、在上面讨论的任何其他字段中都不可用的任何内容的二进制大对象。
另外,DUQ 124可以采用以下可以包括在API信息126中的一个或多个API。在一些情况下,所有这些API都可以是原子性的。“入队(enqueue)”API可以负责将更新插入到DUQ124中。“取得工作(get work)”API可以负责从DUQ 124检索工作。“出队(dequeue)”API可以负责从DUQ 124中清除已完成的更新。“重新排队(requeue)”API可以负责将未完成的工作放回到DUQ 124中,使得DUQ 124可以潜在地被其他处理器进一步处理。“进行中列表”API可以负责取得已经被处理器处理的工作。每个上述API的功能的示例在下面提供并且在图3至图9中示出。
图3是示出根据一些实现方式的执行入队和折叠更新操作300的示例的框图。如上所述,入队API可以负责将更新插入到DUQ 124中。入队API可以将优先级、类型、关键字和状态作为自变量(argument)。入队API可以确定是否应该将接收到的更新与已经存在于DUQ124中的更新进行折叠。当DUQ124中确实已经存在更新并且该更新符合与接收到的更新进行折叠的条件时,那么将这些更新进行折叠以具有与已经在DUQ 124中的更新相同的优先级和队列编号。更新的类型和关键字将保持不变。由于更新只有在不是正在被处理的情况下才符合折叠的条件,因此更新的处理器ID将为空(null)。状态属性的值可以由更新的类型决定,其接收旧状态和新状态作为输入,返回包含在更新中的状态二进制大对象。
另一方面,当更新不是已经存在于DUQ 124中,或者现有更新不符合折叠的条件时,那么可以将新更新添加到DUQ 124。如果对于该关键字的更新不存在于DUQ 124中、如果DUQ 124中的对于该关键字的更新已经被处理、或者如果更新的类型不支持折叠,则更新不符合折叠条件。
在图3的示例中,更新302已经存在于DUQ 124中,并且包括优先级304等于3、队列编号306等于1、类型308为“删除”、关键字310为“KEY1”、处理器ID 312等于空并且状态314等于[a,b]。假设正在发生入队请求316。对左侧的DUQ 124执行入队请求316,导致DUQ 124的状态在完成入队请求316之后变为右侧所示的DUQ 124。
入队请求316包括优先级304为3、类型308为删除、关键字310为KEY1并且状态314等于[c,d]。由于优先级304、类型308和关键字310对于现有更新和入队请求316是相同的,因此,可以将新更新与现有更新302一起折叠,这导致现有更新302的状态314发生改变。因此,DUQ 124中的状态314在更新的入队和折叠之后是现有更新302的状态和入队请求316的状态的组合,即[a,b,c,d]。这是因为状态314在已经在DUQ 124中的更新302与入队请求316之间进行了折叠,在这种情况下将来自入队请求316的状态附加到来自已经在DUQ 124中的更新302的状态。状态是如何折叠的可能取决于各个更新类型。
图4是示出根据一些实现方式的执行以较高优先级入队的操作400的示例的框图。在这个示例中,接收入队请求402。入队请求402包括优先级304为5、类型308为创建、关键字310等于KEY2以及状态314。当接收到入队请求402时,DUQ 124已经包括优先级304等于3的现有更新404。因此,由于优先级不同,入队请求402不与现有更新404一起折叠。替代地,如右侧的DUQ 124所示,创建新更新406并将其插入到DUQ 124中现有更新404的前方。这是因为,尽管新更新406具有较低的队列编号306,但新更新406具有较高的优先级304,即优先级=5。因此,新更新406在优先级=3的现有更新404之前入队。
图5是示出根据一些实现方式的执行取得工作操作500的示例的框图。如上所述,取得工作API可用于从DUQ 124检索工作。取得工作API可以将处理器ID、最大优先级和计数作为自变量。取得工作API可以从DUQ 124获得一个或多个更新的列表,以供调用取得工作API的处理器进行处理。可以通过查找最高优先级小于或等于指定的最大优先级的更新直到所提供的更新的计数数目来填充该列表。然后,取得工作API可以使用所提供的发出请求的处理器的处理器ID来标记这些更新,并且可以将具有对处理器ID 312的更改的这些更新保留在DUQ 124中,并将所选的更新的列表返回给发出请求的处理器。发出请求的处理器现在能够对这些更新进行操作,而无需其他处理器也尝试获得它们。由于在DUQ 124中可能有数千个事件,因此需要限制通过单个取得工作调用而检索的更新的数量。事件的整个数量可以超过DUQ 124或队列处理器能够处理的运行的处理。因此,计数属性可以限制包括在返回列表中的更新的数量。已通过取得工作请求检索到的更新可能不通过不同的取得工作请求返回,并且可能在入队请求期间不符合折叠条件。
在图5的示例中,从处理器ID 312为1的处理器接收工作请求502。取得工作请求502还包括最大优先级504等于4以及计数506等于10。因此,取得工作请求502包括低于当前位于DUQ 124的头部的更新406的优先级304的最大优先级506。相反,由于第二更新404的优先级304小于或等于在取得工作请求502中指定的最大优先级506,因此可以返回更新404。存在该特征,使得可以防止高优先级更新使可能已经在DUQ 124中较长时间的低优先级更新供应不足。同样作为取得工作请求的结果,DUQ 124中的更新404被修改,使得更新404中的处理器ID 312从空变为处理器ID=1。因此,在返回给发送取得工作请求502的处理器的列表中,更新404的处理器ID被设置为包括在取得工作请求502中的处理器ID的值。对来自任何处理器的未来取得工作请求的响应可以不包括更新404,因为处理器ID已被分配给更新404。另外,如下所述,如果进行中列表请求(list in progress request)中的处理器ID与更新404中的处理器ID相同,那么进行中列表请求可以仅返回更新404。
图6是示出根据一些实现方式的执行取得工作操作600的示例的框图。在该示例中,接收到的取得工作请求602包括处理器ID 312等于1、最大优先级506为10以及计数508等于11。此外,该示例中的DUQ 124当前包括优先级=5的更新602和优先级=3的更新604。利用取得工作请求602中提供的自变量,位于DUQ 124的头部的更新604被选择来进行处理并在列表中返回。此外,更新604中的处理器ID 312从“空”变为“1”。由于取得工作请求602指定响应应该仅包括一个结果,如计数参数508所示,因此不返回第二更新606。因此,即使DUQ 124中有大量要执行的更新,DUQ 124消耗者(consumer)也能够根据他们自己的可用性而限制检索的工作量。
图7是示出根据一些实现方式的执行出队操作700的示例的框图。如上所述,出队API可用于从DUQ 124中清除已完成的更新。出队API可以包括优先级、尝试次数、队列编号和处理器ID作为自变量。例如,如果更新的处理器ID等于出队请求702中包括的处理器ID,则出队API可以删除对应于给定的优先级和队列编号的更新。如果更新的处理器ID不等于提供的处理器ID,则抛出错误,因为具有提供的ID的处理器不应该在处理正在出队的更新。更新应由处理器处理以便出队,因此如果不首先经由取得工作API取得和处理更新,就无法使更新该出队。另外,系统可以使用出队API将更新标记为已完成。这意味着更新将不再出现在DUQ 124中或由任何API请求返回。
在图7的示例中,接收出队请求702。出队请求702包括优先级304等于5、尝试次数704等于1、队列编号306等于1以及处理器ID 312等于1。出队请求702定位并从DUQ 124中移除匹配的更新。在这种情况下,更新706与在出队请求702中指定的参数相匹配,并从DUQ124中被移除,导致更新708移动到DUQ 124的头部。如果出队请求702中的处理器ID与更新706的处理器ID 312不匹配,则出队请求702可能已经失败并导致生成错误消息。
图8是示出根据一些实现方式的执行重新排队操作800的示例的框图。如上所述,重新排队API可用于将未完成的工作放回到DUQ 124中,使得未完成的更新可被进一步处理,例如由其他处理器处理。重新排队API将处理器ID、优先级、队列编号、新优先级和新状态作为自变量。如果现有更新的处理器ID与所提供的处理器ID相匹配,则重新排队API可以首先移除与所提供的优先级和队列编号相匹配的更新。如果现有更新的处理器ID与重新排队请求中提供的处理器ID不匹配,则可以向管理员等生成错误消息,因为具有所提供的ID的处理器不应该在处理正在重新排队的更新。相反,为了将更新重新排队,该更新必须不再被处理器处理,因此在不首先经由取得工作API取得更新的情况下,无法将该更新重新排队。从DUQ 124中移除现有更新后,可以通过调用上面的入队API使新更新入队,其中自变量为:优先级=新优先级,类型=现有更新类型,关键字=现有更新关键字,状态=新状态。系统使用重新排队API将通常由于防止进一步处理的错误而尚未完成的工作放回到DUQ 124中。
在图8的示例中,接收重新排队请求802。重新排队请求包括处理器ID 312等于1、优先级304等于3、队列编号306等于2、新优先级804等于4以及新状态806为[e,f]。因此,重新排队请求802匹配更新810,正在将具有队列编号2和优先级3的更新重新排队。这可以出于任何数量的原因而发生,例如队列消耗者在尝试处理更新810时遇到错误并希望稍后重新处理更新810,或者更新810可能由于某些其他原因而没有被完全处理。在重新队列中,应存在处理器ID 312与重新排队请求中的处理器ID 312相匹配并且具有匹配的优先级304和队列编号306的现有更新。在所示的示例中,DUQ 124中的第二更新810与重新排队请求802相匹配,因此重新排队在更新812处,更新812具有等于3的新队列编号306、等于4的优先级304和新状态[e,f]。在新更新812中,处理器ID 312被设置为空,因此任何处理器都可以处理新排队的更新812。此外,其他现有更新808不受本示例中重新排队请求的动作的影响。
图9是示出根据一些实现方式的执行进行中列表操作900的示例的框图。如上所述,进行中列表API可用于取得已经正在被处理器处理的工作。进行中列表API将处理器ID和限制作为自变量。进行中列表API可以按照与取得工作API相同的顺序并且直到指定的限制来检索当前正在被具有所提供的ID的处理器根据DUQ 124处理的更新。
在图9的示例中,接收进行中列表请求。进行中列表请求902包括处理器ID 312等于1以及限制904等于1。可以返回具有匹配的处理器ID 312的DUQ124的头部处的更新906。如果处理器ID不匹配,则不会返回更新906,而是可以返回第二更新908。因此,类似于取得工作请求,进行中列表请求902具有限制响应于单个请求而返回的更新总数的能力。在此示例中,基于等于1的限制904,仅返回单个更新。
图10是示出根据一些实现方式的异步管理程序120的示例操作1000的框图。图10的例子示出了异步管理程序120在启动时的状态。此时,异步管理程序120没有工作者,但确实包括或能够访问内存队列1002,并知道DUQ 124在内存中的位置。在该示例中,DUQ 124包括准备好被消耗的四个现有更新1004-1010。异步管理程序120可以被配置为消耗来自DUQ124的更新。
在该示例中,假设更新1004标记有更新1004中的处理器ID 1012(即处理器ID“P1”),这表明更新1004正在进行,例如在执行取得工作请求之后,例如,如上面关于图5和图6所讨论的那样。作为一个非限制性示例,假设更新1004的处理可能已经开始,但可能已经被中断或者因其他方式而没有完成。在异步管理程序120开始之后,异步管理程序120可以执行诸如关于图11至图18所描述的那些操作。
图11是示出根据一些实现方式的异步管理程序120的示例操作1100的框图。在该示例中,异步管理程序120启动一组工作者1102、1104和1106来执行消耗来自DUQ 124的更新或以其他方式对DUQ 124执行操作。举个例子,工作者1102-1106可以分别对应于由执行异步管理程序120的一个或多个处理器执行的多个处理,以处理在DUQ 124中维护的更新。
图12是示出根据一些实现方式的异步管理程序120的示例操作1200的框图。在该示例中,异步管理程序120可以开始寻找它之前运行时未完成的工作。异步管理程序120通过针对DUQ 124做出进行中列表请求来这样做。因此,异步管理程序120针对DUQ 124做出进行中列表API请求1202,以确定是否存在其处理在上次执行异步管理程序120时已开始但未完成的任何更新。例如,进行中列表请求可以将执行异步管理程序120的处理器的处理器ID用作参数,并且可以进一步包括限制作为参数,例如,如上面关于图9所讨论的。异步管理程序120可以将任何检索到的更新的列表添加到内存队列1002中以供工作者1102-1106消耗。如果没有检索到新更新,异步管理程序120可以执行下面关于图16所讨论的取得工作请求,并且可以跳过图13至图15。
在所示的示例中,假设执行异步管理程序120的处理器的处理器ID与标记更新1004的处理器ID 1012(即,“P1”)相匹配。因此,响应于进行中列表请求1202,返回更新1004,这意味着它的处理器ID等于这个异步管理程序的处理器。异步管理程序120可以将更新1004放入其内存队列1002中。
图13是示出根据一些实现方式的异步管理程序120的示例操作1300的框图。在图13的例子中,异步管理程序120可以处理由上述图12中的操作定位的任何正在进行的更新。例如,异步管理程序120可以在取得另一批更新之前等待所有更新被工作者1002-1006的组中的一个或多个工作者处理。在图13的示例中,工作者1102已经从内存队列1002中检索到更新1004。在一些情况下,异步管理程序120可能直到工作者1102完成对更新1004的处理才会再向DUQ 124做出请求。
图14是示出根据一些实现方式的异步管理程序120的示例操作1400的框图。在该示例中,在更新1004的处理完成之后,工作者1102可以发送使更新1004从DUQ 124中出队的出队更新请求1402。然后,从DUQ 124中移除更新1004。因此,在本文的一些示例中,直到做出出队请求才从DUQ 124移除更新,例如,如上面关于图7所讨论的。例如,通过只有在更新完成处理后才调用出队请求,系统确保根据DUQ 124完成更新。
图15是示出根据一些实现方式的异步管理程序120的示例操作1500的框图。在该示例中,异步管理程序120通过发送进行中列表请求1502来做出确定现在正在进行的更新的另一个请求。这一次,没有正在进行的更新被返回,这表明异步管理程序120已经完成了之前没有完成的所有正在进行的工作的处理,并且现在可以取得新工作。
图16是示出根据一些实现方式的异步管理程序120的示例操作1600的框图。在该示例中,假设异步管理程序通过使用其处理器ID、最大优先级和3或更大的一些限制作为自变量,来做出取得工作请求1602作为针对DUQ 124的API调用。例如,为了避免使异步管理程序120耗尽内存,异步管理程序120可以被配置为当内存队列1002高于阈值大小时不检索额外的更新。
响应于取得工作请求1602,假设三个更新1006、1008、1010的列表1604被返回。更新1006、1008和1010中的每一个都可以在DUQ 124中用执行异步管理程序120的处理器的处理器ID 1012(即,处理器ID“P1”)进行标记。异步管理程序120可以将所有检索到的更新添加到相同的内存队列1002中。因此,DUQ 124已经返回三个新的更新1006-1010以供处理,所有这些更新现在都在DUQ 124中添加了异步管理程序的处理器ID 1012(如上面关于图5和图6所讨论的),以防止其他使用者可能消耗这些更新。
图17是示出根据一些实现方式的异步管理程序120的示例操作1700的框图。异步管理程序120向异步管理程序120内的工作者1102-1106提供相应的更新以进行处理。工作者1102-1106分别开始处理更新1006-1010。
图18是示出根据一些实现方式的异步管理程序120的示例操作1800的框图。在该示例中,假设异步管理程序工作者1102-1106都对他们的任务做了一些事情。例如,假设工作者1102和1104分别成功地完成了更新1006和1008。因此,工作者1102发送使更新1006从DUQ 124中出队的出队更新请求1802,并且工作者1104发送使更新1008从DUQ 124中出队的出队更新请求1804。
另一方面,假设第三工作者1106没有成功完成更新1010。因此,第三工作者1106可以发送下面(例如关于图8)所讨论的重新排队更新请求1806。因此,将更新1012重新排队。例如,更新1010可能在处理期间遇到错误或者可能需要附加的处理。基于工作者1106在处理更新1010时可能已经完成的处理,更新1012可以在一个或多个属性(例如,优先级、状态等)上不同于原始更新1010。
在处理更新时,异步管理程序工作者1102-1106可以首先从内存队列1002中获得更新,例如基于优先级顺序等。在工作者从内存队列1002中获得更新之后,没有其他工作者会尝试对该更新进行操作。
对于它处理的每个更新,工作者可以首先确定工作者正在处理什么类型的更新,例如基于上面关于图3至图9讨论的类型属性308。由此,工作者可以使用上面讨论的关键字属性310和状态属性314来确定如何处理更新以用于另外的情况。例如,如果二级索引需要被更新,工作者可以使用更新的关键字来从一级索引中查找关于该关键字的当前信息,然后更新二级索引以具有更新的信息。这可能是DUQ 124中列出的更新的常用情况。
更新的另一个可能用途是驱动其他一些异步处理。例如,可以通过第一处理将更新插入到DUQ 124中以触发第一策略的执行。例如,假设第一策略之后又导致进行更新,其改变一个或多个存储对象、对象元数据等的条件。这种场景可以与上面讨论的、对存储在存储位置中的多个视频的子集执行将标签添加到具有某些特征的视频的策略的示例相对应。例如,触发的策略可能会在数据集中找出具有指定特征的视频,并且可能会进一步将更新添加到DUQ 124以处理该单独的视频。进而又可以处理对视频的更新,例如为满足特定特征的视频添加标签。此外,假设作为向该视频应用标签的一部分,向DUQ 124添加导致另一个策略被执行(例如用于压缩超过存储器上特定文件大小的任何带标签的视频)的又一个更新。
如果某个更新由于某种原因而未能被处理,则可以使用DUQ 124的重新排队API将该更新重新排队,例如,如上面关于图8和18所讨论的。更新可能因多种原因中的任何一种原因而失败。例如,如果在上面的示例中未能读取视频,则可以在对视频的更新下一次从DUQ 124中出来时将该更新重新排队并对此进行重试。此外,尽管上面已经讨论了若干示例配置和应用,但是对于受益于本文的公开内容的本领域技术人员而言,许多其他变化将是清楚的。
图19是示出根据一些实现方式的示例处理的流程图。该处理在逻辑流程图中被示为框的集合,其表示一系列操作,其中一些或全部可以以硬件、软件或其组合来实现。在软件的情况下,框可以表示存储在一个或多个计算机可读介质上的计算机可执行指令,当由一个或多个处理器执行时,该计算机可执行指令对处理器进行编程以执行所述的操作。通常,计算机可执行指令包括执行特定功能或实现特定数据类型的例程、程序、对象、组件、数据结构等。描述框的顺序不应被解释为限制。可以以任何顺序和/或并行地组合许多描述的框以实现处理或替代处理,并且并非所有框都需要执行。出于讨论的目的,参照在本文的示例中描述的环境、框架和系统来描述处理,但是该处理可以在各种各样的其他环境、框架和系统中实现。
图19是示出根据一些实现方式的用于采用持久更新队列来管理更新的示例处理1900的流程图。在一些情况下,处理1900可以至少部分地由一个或多个服务计算设备102执行。
在1902处,计算设备可以从用户设备接收对与存储器处的数据的存储有关的存储操作的用户请求。
在1904处,在向用户设备发送指示存储操作的执行的响应之前,计算设备可以将更新添加到更新队列以使存储操作持续存在。
在1906处,计算设备可以在可能的情况下通过将更新与已经存在于更新队列中的现有更新进行组合来折叠更新。
在1908处,计算设备可以将关于更新的信息发送到至少一个其他处理器,以将更新添加到由至少一个其他处理器管理的至少一个其他更新队列。
在1910处,计算设备可以将至少一个工作者处理实例化以处理更新队列中的更新。
在1912处,计算设备可以从更新队列中选择更新。
在1914处,计算设备可以用与执行至少一个工作者处理的一个或多个处理器中的处理器对应的处理器标识符来标记更新队列中的更新。
在1916处,计算设备可以执行一个工作者处理来处理更新并执行存储操作。
在1918处,在工作者处理完成对更新的处理之后,计算设备可以发送使更新从更新队列中出队的请求。
本文描述的示例处理仅仅是出于讨论目的而提供的处理的示例。根据本文的公开内容,许多其他变化对于本领域技术人员将是清楚的。此外,尽管本文的公开内容阐述了用于执行处理的合适的框架、架构和环境的多个示例,但是本文的实现方式不限于所示出和讨论的特定示例。此外,本公开提供了在附图中描述和示出的各种示例实现方式。但是,本发明不限于本文描述和示出的实现方式,而是可以扩展到对于本领域技术人员来说已知或将会变得已知的其他实现方式。
可以在存储在计算机可读介质上并由本文的一个或多个处理器执行的计算机可执行指令(例如,程序)的一般情况下考虑本文所述的各种指令、处理和技术。通常,程序包括用于执行特定任务或实现特定抽象数据类型的应用程序、例程、对象、组件、数据结构、可执行代码等。这些程序等可以作为本机代码执行,或者可以例如在虚拟机或其他即时编译执行环境中下载并执行。通常,程序的功能可以在各种实现方式中根据需要进行组合或分布。这些模块和技术的实现方式可以存储在计算机存储介质上,或通过某种形式的通信介质传输。
尽管已经以结构特征和/或方法动作专用的语言描述了主题,但是应该理解,所附权利要求书中定义的主题不必限于所描述的特定特征或动作。相反,特定的特征和动作是作为实现权利要求的示例形式而被公开。
Claims (15)
1.一种系统,包括:
一个或多个处理器,其由可执行指令配置以执行操作,所述操作包括:
从用户设备接收与存储器处的数据的存储有关的存储操作的用户请求;
在向所述用户设备发送指示所述存储操作的执行的响应之前,将更新添加到更新队列以使所述存储操作持续存在,其中将所述更新添加到所述更新队列包括发送使所述更新被添加到所述更新队列的请求,其中所述请求指定所述存储操作的类型或所述存储操作要实现的状态中的至少一种;
将关于对所述更新队列的所述更新的信息发送到至少一个其他处理器,以将所述更新添加到由所述至少一个其他处理器管理的至少一个其他更新队列;以及
随后从所述更新队列中获得所述更新并处理所述更新以执行所述存储操作。
2.根据权利要求1所述的系统,所述操作还包括通过将所述更新与已经存在于所述更新队列中的现有更新进行组合来折叠所述更新,其中所述组合包括将所述存储操作要实现的状态与所述现有更新的存储操作要实现的状态进行组合。
3.根据权利要求1所述的系统,其中,将所述更新与所述现有更新进行组合至少部分地基于所述更新和所述现有更新包括相同指定的优先级或相同指定的存储操作类型中的至少一种。
4.根据权利要求1所述的系统,所述操作还包括:在将所述更新添加到所述更新队列时,
将分配给所述更新的优先级与分配给已经存在于所述更新队列中的一个或多个更新的优先级进行比较;以及
将所述更新放在所述更新队列中的具有较低优先级的已经存在的更新之前。
5.根据权利要求1所述的系统,其中,随后从所述更新队列中获得所述更新并处理所述更新以执行所述存储操作包括:
将至少一个工作者处理实例化以处理所述更新;
从所述更新队列中选择所述更新;
用与执行所述至少一个工作者处理的所述一个或多个处理器中的处理器对应的处理器标识符来标记所述更新队列中的所述更新;以及
执行一个所述工作者处理来执行所述存储操作。
6.根据权利要求5所述的系统,其中,标记所述更新队列中的所述更新的所述处理器标识符指示所述更新队列中的所述更新正在被处理。
7.根据权利要求5所述的系统,所述操作还包括:在所述工作者处理完成对所述更新的处理之后,发送使所述更新从所述更新队列中出队的请求。
8.根据权利要求5所述的系统,所述操作还包括:在未能完成对所述更新的处理之后,由所述工作者处理发送基于所述更新的部分处理将所述更新作为具有更新状态的新更新重新排队的请求。
9.根据权利要求5所述的系统,所述操作还包括:在从所述更新队列中获得所述更新之前,发送至少部分地基于将所述处理器标识符与在所述更新队列中已经存在的更新中指示的处理器标识符进行匹配来确定被处理但未完成的已经存在的更新的请求。
10.根据权利要求1所述的系统,其中,随后从所述更新队列中获得所述更新包括指定被检索的更新的最大优先级或被检索的更新的最大数量中的至少一个。
11.根据权利要求1所述的系统,其中,将关于所述更新的信息发送到至少一个其他处理器以将所述更新添加到所述至少一个其他更新队列包括根据筏共识算法发送所述信息。
12.一种方法,包括:
由一个或多个处理器从用户设备接收与存储器处的数据的存储有关的存储操作的用户请求;
在向所述用户设备发送指示所述存储操作的执行的响应之前,由所述一个或多个处理器将更新添加到更新队列以使所述存储操作持续存在,其中将所述更新添加到所述更新队列包括发送使所述更新被添加到所述更新队列的请求,其中所述请求指定所述存储操作的类型或所述存储操作要实现的状态中的至少一种;
由所述一个或多个处理器将关于对所述更新队列的所述更新的信息发送到至少一个其他处理器,以将所述更新添加到由所述至少一个其他处理器管理的至少一个其他更新队列;以及
随后由所述一个或多个处理器从所述更新队列中获得所述更新并处理所述更新以执行所述存储操作。
13.根据权利要求12所述的方法,还包括通过将所述更新与已经存在于所述更新队列中的现有更新进行组合来折叠所述更新,其中所述组合包括将所述存储操作要实现的状态与所述现有更新的存储操作要实现的状态进行组合。
14.一个或多个非瞬态计算机可读介质,其存储指令,所述指令在由一个或多个处理器执行时,对所述一个或多个处理器进行配置以执行操作,所述操作包括:
从用户设备接收与存储器处的数据的存储有关的存储操作的用户请求;
在向所述用户设备发送指示所述存储操作的执行的响应之前,将更新添加到更新队列以使所述存储操作持续存在,其中将所述更新添加到所述更新队列包括发送使所述更新被添加到所述更新队列的请求,其中所述请求指定所述存储操作的类型或所述存储操作要实现的状态中的至少一种;
将关于对所述更新队列的所述更新的信息发送到至少一个其他处理器,以将所述更新添加到由所述至少一个其他处理器管理的至少一个其他更新队列;以及
随后从所述更新队列中获得所述更新并处理所述更新以执行所述存储操作。
15.根据权利要求14所述的一个或多个非瞬态计算机可读介质,所述操作还包括通过将所述更新与已经存在于所述更新队列中的现有更新进行组合来折叠所述更新,其中所述组合包括将所述存储操作要实现的状态与所述现有更新的存储操作要实现的状态进行组合。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2019/020500 WO2020180290A1 (en) | 2019-03-04 | 2019-03-04 | Asynchronous storage management in a distributed system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113574515A true CN113574515A (zh) | 2021-10-29 |
CN113574515B CN113574515B (zh) | 2024-04-26 |
Family
ID=72338230
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980093510.9A Active CN113574515B (zh) | 2019-03-04 | 2019-03-04 | 用于分布式系统中的异步存储管理的系统和方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20220092083A1 (zh) |
EP (1) | EP3935514A4 (zh) |
JP (1) | JP7322161B2 (zh) |
CN (1) | CN113574515B (zh) |
WO (1) | WO2020180290A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11875178B2 (en) | 2020-07-30 | 2024-01-16 | Oracle International Corporation | Using multiple blockchains for applying transactions to a set of persistent data objects in persistent storage systems |
US11537569B2 (en) * | 2020-09-01 | 2022-12-27 | Salesforce.Com, Inc. | Merges using key range data structures |
US11494347B1 (en) * | 2021-05-05 | 2022-11-08 | Oracle International Corporation | Efficient update-anywhere replication of queue operations on a replicated message queue |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5970488A (en) * | 1997-05-05 | 1999-10-19 | Northrop Grumman Corporation | Real-time distributed database system and method |
US20050289505A1 (en) * | 2004-06-25 | 2005-12-29 | Williams Stanley N | Method and system for improving performance and scalability of applications that utilize a flow-based-programming methodology |
US20060179274A1 (en) * | 2005-02-04 | 2006-08-10 | Mips Technologies, Inc. | Instruction/skid buffers in a multithreading microprocessor |
US20090177666A1 (en) * | 2008-01-07 | 2009-07-09 | Hitachi, Ltd. | Methods and apparatus for assigning performance to data volumes on data storage systems |
US20090320033A1 (en) * | 2008-06-19 | 2009-12-24 | Parag Gokhale | Data storage resource allocation by employing dynamic methods and blacklisting resource request pools |
CN106716335A (zh) * | 2014-09-23 | 2017-05-24 | 亚马逊技术股份有限公司 | 映射信息的异步处理 |
US20170193034A1 (en) * | 2016-01-04 | 2017-07-06 | Beijing Baidu Netcom Science And Technology Co., Ltd. | Object data updating method and apparatus in an object storage system |
US20180004828A1 (en) * | 2016-06-30 | 2018-01-04 | Facebook, Inc. | Techniques for replication of a client database to remote devices |
CN107609090A (zh) * | 2017-09-07 | 2018-01-19 | 电子科技大学 | 分布式存储系统中多副本弱一致性维护方法 |
Family Cites Families (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5995980A (en) * | 1996-07-23 | 1999-11-30 | Olson; Jack E. | System and method for database update replication |
JP3230668B2 (ja) | 1998-11-25 | 2001-11-19 | 日本電気株式会社 | データ記憶再生システム |
CA2472887A1 (en) * | 2003-06-30 | 2004-12-30 | Gravic, Inc. | Methods for ensuring referential integrity in multithreaded replication engines |
JP4551662B2 (ja) | 2003-07-11 | 2010-09-29 | 新日鉄ソリューションズ株式会社 | 計算機システム、計算機、データ通信方法及びプログラム |
US7278049B2 (en) * | 2003-09-29 | 2007-10-02 | International Business Machines Corporation | Method, system, and program for recovery from a failure in an asynchronous data copying system |
US7681014B2 (en) * | 2005-02-04 | 2010-03-16 | Mips Technologies, Inc. | Multithreading instruction scheduler employing thread group priorities |
US7523110B2 (en) * | 2005-03-03 | 2009-04-21 | Gravic, Inc. | High availability designated winner data replication |
US8190561B1 (en) * | 2006-12-06 | 2012-05-29 | At&T Mobility Ii Llc | LDAP replication priority queuing mechanism |
US8073922B2 (en) * | 2007-07-27 | 2011-12-06 | Twinstrata, Inc | System and method for remote asynchronous data replication |
US7984094B2 (en) * | 2009-06-23 | 2011-07-19 | Microsoft Corporation | Using distributed queues in an overlay network |
US9058334B2 (en) * | 2010-02-11 | 2015-06-16 | Emc Corporation | Parallel file system processing |
JP5292350B2 (ja) | 2010-03-30 | 2013-09-18 | 日本電信電話株式会社 | メッセージキュー管理システム及びロックサーバ及びメッセージキュー管理方法及びメッセージキュー管理プログラム |
US9477738B2 (en) * | 2010-07-21 | 2016-10-25 | International Business Machines Corporation | Initialization protocol for a peer-to-peer replication environment |
US9519673B2 (en) * | 2011-08-23 | 2016-12-13 | Sap Se | Management of I/O and log size for columnar database |
US8843441B1 (en) * | 2012-01-17 | 2014-09-23 | Amazon Technologies, Inc. | System and method for maintaining a master replica for reads and writes in a data store |
US8965861B1 (en) * | 2012-06-28 | 2015-02-24 | Amazon Technologies, Inc. | Concurrency control in database transactions |
US10169090B2 (en) * | 2012-09-12 | 2019-01-01 | Salesforce.Com, Inc. | Facilitating tiered service model-based fair allocation of resources for application servers in multi-tenant environments |
US9904721B1 (en) * | 2013-01-25 | 2018-02-27 | Gravic, Inc. | Source-side merging of distributed transactions prior to replication |
US9361236B2 (en) * | 2013-06-18 | 2016-06-07 | Arm Limited | Handling write requests for a data array |
US9280372B2 (en) * | 2013-08-12 | 2016-03-08 | Amazon Technologies, Inc. | Request processing techniques |
JP6095539B2 (ja) | 2013-09-20 | 2017-03-15 | 株式会社日立製作所 | I/o処理制御装置及びi/o処理制御方法 |
US11257271B2 (en) * | 2013-09-26 | 2022-02-22 | Imagination Technologies Limited | Atomic memory update unit and methods |
US9466091B2 (en) * | 2013-09-26 | 2016-10-11 | Imagination Technologies Limited | Atomic memory update unit and methods |
US9191299B1 (en) * | 2014-02-22 | 2015-11-17 | Allscripts Software, Llc | Task processing utilizing queues |
US10698607B2 (en) | 2015-05-19 | 2020-06-30 | Netapp Inc. | Configuration update management |
US9836366B2 (en) * | 2015-10-27 | 2017-12-05 | Netapp, Inc. | Third vote consensus in a cluster using shared storage devices |
US20190339905A1 (en) | 2016-03-17 | 2019-11-07 | Hitachi, Ltd. | Storage apparatus and information processing method |
US10756757B2 (en) * | 2016-06-03 | 2020-08-25 | Dell Products L.P. | Maintaining data deduplication reference information |
US10180812B2 (en) * | 2016-06-16 | 2019-01-15 | Sap Se | Consensus protocol enhancements for supporting flexible durability options |
JP2018022397A (ja) | 2016-08-04 | 2018-02-08 | 富士通株式会社 | ストレージ制御装置、ストレージ制御方法、およびストレージ制御プログラム |
GB2572545B (en) * | 2018-03-27 | 2021-01-20 | Openwave Mobility Inc | Data replication |
US10834194B2 (en) * | 2019-02-13 | 2020-11-10 | International Business Machnes Corporation | Batching updates in a dispersed storage network |
-
2019
- 2019-03-04 CN CN201980093510.9A patent/CN113574515B/zh active Active
- 2019-03-04 US US17/420,151 patent/US20220092083A1/en active Pending
- 2019-03-04 WO PCT/US2019/020500 patent/WO2020180290A1/en unknown
- 2019-03-04 EP EP19918036.5A patent/EP3935514A4/en active Pending
- 2019-03-04 JP JP2021549453A patent/JP7322161B2/ja active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5970488A (en) * | 1997-05-05 | 1999-10-19 | Northrop Grumman Corporation | Real-time distributed database system and method |
US20050289505A1 (en) * | 2004-06-25 | 2005-12-29 | Williams Stanley N | Method and system for improving performance and scalability of applications that utilize a flow-based-programming methodology |
US20060179274A1 (en) * | 2005-02-04 | 2006-08-10 | Mips Technologies, Inc. | Instruction/skid buffers in a multithreading microprocessor |
US20090177666A1 (en) * | 2008-01-07 | 2009-07-09 | Hitachi, Ltd. | Methods and apparatus for assigning performance to data volumes on data storage systems |
US20090320033A1 (en) * | 2008-06-19 | 2009-12-24 | Parag Gokhale | Data storage resource allocation by employing dynamic methods and blacklisting resource request pools |
CN106716335A (zh) * | 2014-09-23 | 2017-05-24 | 亚马逊技术股份有限公司 | 映射信息的异步处理 |
US20170193034A1 (en) * | 2016-01-04 | 2017-07-06 | Beijing Baidu Netcom Science And Technology Co., Ltd. | Object data updating method and apparatus in an object storage system |
US20180004828A1 (en) * | 2016-06-30 | 2018-01-04 | Facebook, Inc. | Techniques for replication of a client database to remote devices |
CN107609090A (zh) * | 2017-09-07 | 2018-01-19 | 电子科技大学 | 分布式存储系统中多副本弱一致性维护方法 |
Non-Patent Citations (2)
Title |
---|
于程远;万剑怡;陈艳琼;: "基于模式的并行编程环境中任务队列模式的研究与实现", 计算机与现代化, no. 10 * |
于程远;万剑怡;陈艳琼;: "基于模式的并行编程环境中任务队列模式的研究与实现", 计算机与现代化, no. 10, 15 October 2008 (2008-10-15) * |
Also Published As
Publication number | Publication date |
---|---|
JP2022521412A (ja) | 2022-04-07 |
CN113574515B (zh) | 2024-04-26 |
US20220092083A1 (en) | 2022-03-24 |
JP7322161B2 (ja) | 2023-08-07 |
EP3935514A4 (en) | 2022-10-19 |
WO2020180290A1 (en) | 2020-09-10 |
EP3935514A1 (en) | 2022-01-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11928029B2 (en) | Backup of partitioned database tables | |
US11036591B2 (en) | Restoring partitioned database tables from backup | |
US20240020038A1 (en) | Distributed Storage Method and Device | |
US9489443B1 (en) | Scheduling of splits and moves of database partitions | |
US11199985B2 (en) | Tracking storage capacity usage by snapshot lineages using metadata in a multi-level tree structure | |
EP3935515B1 (en) | Metadata routing in a distributed system | |
CN113574515B (zh) | 用于分布式系统中的异步存储管理的系统和方法 | |
US20210286760A1 (en) | Managing snapshots stored locally in a storage system and in cloud storage utilizing policy-based snapshot lineages | |
CN109639773A (zh) | 一种动态构建的分布式数据集群控制系统及其方法 | |
US11599276B1 (en) | Snapshot shipping to multiple cloud destinations | |
US11573923B2 (en) | Generating configuration data enabling remote access to portions of a snapshot lineage copied to cloud storage | |
CN113347238A (zh) | 基于区块链的消息分区方法及系统、设备、存储介质 | |
US11288134B2 (en) | Pausing and resuming copying of snapshots from a local snapshot lineage to at least one cloud snapshot lineage | |
US11630736B2 (en) | Recovering a storage volume associated with a snapshot lineage from cloud storage | |
US10461991B1 (en) | Dynamic replication peering | |
EP3811227B1 (en) | Methods, devices and systems for non-disruptive upgrades to a distributed coordination engine in a distributed computing environment | |
JP2024514467A (ja) | 地理的に分散されたハイブリッドクラウドクラスタ | |
US20240211434A1 (en) | Orchestration of storage system-based snapshot shipping | |
US20240211357A1 (en) | Orchestration of storage system-based snapshot recovery | |
CN116820430B (zh) | 异步读写方法、装置、计算机设备及存储介质 | |
US11907163B1 (en) | Cloud snapshot lineage mobility between virtualization software running on different storage systems | |
US11366600B2 (en) | Moving snapshots from a local snapshot lineage on a storage system to a cloud snapshot lineage on cloud storage | |
US20210248108A1 (en) | Asynchronous data synchronization and reconciliation | |
US20220391409A1 (en) | Hybrid cloud asynchronous data synchronization | |
JP2024511774A (ja) | ハイブリッドクラウドイベント通知管理 |
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 |