副本)。在至少一些實施方案中,可基于主副本處可用的信息(包括主副本處可用的關于從副本的信息)在主副本處對所有副本執(zhí)行針對邏輯分區(qū)103的寫入請求的準入控制決定。應注意,即使當在主副本處對寫入執(zhí)行準入控制決定時,在這樣的實施方案中,在從副本處復制寫入時,仍依據(jù)可適用消耗策略在從副本處消耗令牌。
[0059]如前所描述,關于從副本416所駐留的共享裝置102處的可用I/O容量的信息可以(例如)根據(jù)從副本更新策略傳遞至主副本以幫助主副本處的保守型寫入準入控制。在圖6中所描繪的實施方案中,可以使用(例如)圖8a或圖Sb中所示的技術中的一個將包含從副本共享裝置桶171C的填充數(shù)快照650的消息發(fā)送至主副本412。應注意,在一些實施中,對于從副本416,根本不需要維持桶;例如,關于由從副本使用的共享裝置處的可用容量的信息可以周期性供應至主副本412而無必要實施對從副本而言為特定的桶171。
[0060]在圖5中所示的實施方案中,共同代理桶157用于在主副本處維持從副本裝置信息。在一些實施方案中,可以使用其它方法,而非使用表示所有從副本的共同代理桶和計算主副本處的可用從副本裝置容量的最小值以確定共同代理桶的填充數(shù)。圖7圖示根據(jù)至少一些實施方案的可以維持于數(shù)據(jù)對象分區(qū)的主副本處的令牌桶的類型的另一實例。在圖7中所示的實施方案中,對于每個主副本,實施總數(shù)η個從副本。圖7中的桶的主副本側(cè)布置相同于圖5中所示的布置。但是,圖7中所示的實施方案中的從副本快照桶集包括每個從副本一個桶,而非圖5的單個共同代理桶。從副本快照共享裝置桶157Α存儲指示關于從副本#1共享存儲裝置處的可用容量的最新可用信息的令牌,桶157Β存儲指示關于從副本#2共享存儲裝置處的可用容量的最新可用信息的令牌等等。從副本快照共享裝置桶在本文中可以簡單地稱作“從副本快照桶”或“快照桶”。當接收寫入請求時,可以首先檢驗桶150Α。如果在圖5中所示的實施方案的情況下,桶150Α中存在足夠令牌,那么在請求速率低于供應限制時,可以準許寫入。即使在正常模式期間,如果準許寫入,那么可以從圖7中所示的每個桶消耗令牌。
[0061]如果在供應容量桶150Α中未存在足夠令牌,那么邏輯分區(qū)可以被認為在突發(fā)模式中。在突發(fā)模式期間,準入控制器180可以被配置來只當在主副本桶集的桶150Β和150C中的每個中和從副本快照桶集155的Q個桶中的每個中一個令牌可用時允許繼續(xù)進行寫入,其中在寫入被認為成功之前其必須完成的副本數(shù)量是(Q+1)(例如,Q個從副本和一個主副本)。因此,準入控制器180可以使用從副本快照桶集(其桶填充數(shù)追蹤(在來自從副本的最新可用通信允許下盡可能接近)從副本共享驅(qū)動器桶171C的桶填充數(shù))以確保在突發(fā)模式中在準許寫入請求之前成功寫入到至少規(guī)定數(shù)量的副本。在一些實施方案中,不管針對寫入的規(guī)定數(shù)量大小如何,可以自從副本快照桶集中的N個桶中的每個消耗令牌。在其中消耗來自僅規(guī)定數(shù)量(而非每個)從副本共享裝置桶的令牌的實施方案中,寫入可以首先復制至其令牌被消耗的對應從副本(即,在寫入復制至其它從副本之前)。在一個實施方案中,不管桶150Α是否具有足夠令牌,可以檢驗圖7的主副本桶集152的所有桶以確保其具有足夠令牌來允許繼續(xù)進行寫入且此外,可以檢驗從副本快照桶集155的至少Q(mào)個桶以確保在允許繼續(xù)進行寫入之前其具有足夠令牌。
[0062]在至少一些實施方案中,除了圖5至圖7中所示的基于副本的令牌桶和/或共享裝置令牌桶的類型之外或并非上述類型,可以對寫入準入控制采用一個或多個節(jié)點級令牌桶。例如,對應于存儲主副本數(shù)據(jù)的至少一部分的存儲節(jié)點110,可以在一個實施方案中實施節(jié)點能力桶,其中節(jié)點能力桶的令牌填充數(shù)至少部分基于視作整體的存儲節(jié)點110的一些性能能力或限制集的度量。這樣的度量可以(例如)指示存儲節(jié)點的可用處理容量(例如,就CPU循環(huán)、利用限制或速度而言)、存儲器限制、線程計數(shù)限制、操作系統(tǒng)邏輯資源限制(例如,打開的文件或套接字的數(shù)量)、聯(lián)網(wǎng)限制或?qū)梢杂糜趯懭牖蜃x取的任何其它類型的能力的限制。在這樣的實施方案中,針對寫入的至少一些準入控制決定可以基于節(jié)點能力桶中可用的令牌的數(shù)量。在一些實施方案中,給定節(jié)點能力桶可以用于針對其數(shù)據(jù)存儲于給定存儲節(jié)點110上的多個副本中的每個的準入控制決定(例如,針對多于一個主副本或多于一個從副本或主副本和從副本的組合)。在至少一個實施方案中,節(jié)點能力桶可以包括于主副本桶集中(和/或從副本桶集中)。
[0063]應注意,在一些實施方案中,可以經(jīng)由編程接口(例如,網(wǎng)絡服務應用程序編程接口(API)或其它AP1、網(wǎng)頁、命令行工具或定制圖形用戶界面)配置準入控制策略的多種性質(zhì)。因此,例如,關于對于給定數(shù)據(jù)對象或分區(qū)到底是否支持突發(fā)模式寫入操作的決定,在多種操作模式中從哪個桶集消耗多少令牌或圖3中所示的多種其它桶性質(zhì)的值/設置在這樣的實施方案中可以至少部分基于經(jīng)由這樣的編程接口從授權實體(諸如擁有數(shù)據(jù)對象的客戶端)接收的配置請求。
[0064]如前所述,在其中從多個桶(諸如,圖5的桶150A、150B、150C和157或圖6或圖7中所示的桶)消耗令牌以接受特定I/o請求來執(zhí)行的至少一些實施方案中,原子操作(諸如交易或受鎖定保護的軟件例行程序)可以用于從相關桶集合消耗令牌。在一些實施方案中,原子操作可以包括檢查桶的令牌填充數(shù)和同樣再填入桶,即,所有三個類型的桶操作可以在單個原子操作中執(zhí)行:桶填充數(shù)的檢查,填充數(shù)的減少和再填入操作。這樣的原子操作可以幫助減少達成不一致狀態(tài)的概率,其中例如,在接收允許I/o操作的決定之后,在從其中一個桶消耗適當數(shù)量的令牌之前,所述桶用完令牌(由于另一 I/o請求)。在一些實施方案中,在這樣組合的原子操作內(nèi)可以不執(zhí)行至少一些消耗和/或再填入操作。
[0065]在主副本處收集從副本側(cè)信息
[0066]圖8a和圖8b圖示根據(jù)至少一些實施方案的用于在主副本處獲得從副本吞吐量容量信息的各自交互集。在圖8a中所描繪的實施方案中,主副本412根據(jù)寫入針對的數(shù)據(jù)對象的實際上的持久性策略和/或復制策略將對應于接受的寫入請求810的寫入復制請求815發(fā)送至從副本416。從副本416接收寫入復制請求,執(zhí)行適當寫入操作且將寫入應答820發(fā)送回至主副本。除了從副本寫入操作的結果之外,寫入應答820還包括指示從副本存儲裝置102處的可用吞吐量容量的背載填充數(shù)快照650 (例如,自嘗試寫入復制時起,其上駐留從副本數(shù)據(jù)的共享裝置的桶171C的填充數(shù))。(本文中使用的術語“背載”指示關于從副本共享存儲裝置的信息添加至通信上的信息,其已以任何方式發(fā)生而不管正使用的準入控制的特定方法如何或即使根本不使用準入控制;因此,快照的通信通常引發(fā)非常少的開銷,尤其相比于將快照作為獨立消息發(fā)送的成本)。如上文所描述,快照650可以在主副本處使用以更新從副本快照桶集的填充數(shù)。應注意,在至少一些實施方案中,可發(fā)送快照而不管從副本是否成功地復制寫入;例如,即使因為一些原因,不能在從副本處復制寫入,但共享裝置的容量的更新視圖可以提供至主副本。在一個實施中,僅寫入應答的子集可以包括背載填充數(shù)快照一例如,從副本416可以選擇將填充數(shù)快照添加至隨機選擇的寫入應答或可以選擇每100毫秒將背載信息添加到多達一個寫入應答。
[0067]在一些實施方案中,并非使用寫入應答820來刷新從副本吞吐量可用性的主副本視圖或除了使用寫入應答820來刷新從副本吞吐量可用性的主副本視圖之外,如圖Sb中所示,可以使用心跳機制。在所描繪的實例中,從副本可以被配置來將周期性心跳消息830發(fā)送至主副本(和/或其它從副本),其指示從副本的健康狀態(tài)(例如,指示從副本可供使用且可進行網(wǎng)絡訪問)。在所描繪的實施方案中,填充數(shù)快照650可以背載至心跳消息830上。在一些實施方案中,發(fā)送至主副本412的所有心跳消息可以包括填充數(shù)快照650,但在其它實施方案中,心跳消息的一些所選子集可以用于背載吞吐量容量信息。應注意,在一些實施方案中,其它機制可以用于將從副本裝置吞吐量容量傳達至主副本,例如,在一個實施方案中,如果在X分鐘內(nèi)不接收任何寫入復制請求且不使用心跳,那么從副本可以將單獨包括填充數(shù)快照的專用消息傳輸至主副本(即,并不采用背載)。在一些實施方案中,主副本可以周期性或根據(jù)需要,將容量更新請求發(fā)送至從副本以獲得或更新關于從副本的吞吐量容量的信息。
[0068]用于基于令牌的寫入準入控制的方法
[0069]圖9是根據(jù)至少一些實施方案的圖示可以被執(zhí)行來在網(wǎng)絡可訪問服務下對寫入實施基于令牌的準入控制機制的操作的方面的流程圖。如圖9中的元素902所示,可以確定給定數(shù)據(jù)對象101 (諸如,關系或非關系數(shù)據(jù)庫的表,文件或文件系統(tǒng),卷或任何其它類型的數(shù)據(jù)對象)的存儲參數(shù)??梢源_定許多不同參數(shù)的值,諸如其中分布數(shù)據(jù)對象的邏輯分區(qū)103的數(shù)量,因為持久性和/或可用性原因維持的每個邏輯分區(qū)的物理副本的數(shù)量,寫入副本規(guī)定數(shù)量大小(例如,在認為對應寫入請求成功之前,需要在多少副本處保持寫入)等等。在不同實施方案中,可以基于各種因素的任何組合選擇參數(shù)的值,諸如客戶端提供的規(guī)格(例如,在對象創(chuàng)建時)或偏好、與客戶端相稱的,將代表客戶端維持數(shù)據(jù)對象的服務級別協(xié)議、系統(tǒng)默認值、被獲得來用于期望具有類似工作負載的其它數(shù)據(jù)對象的度量等等。在所描繪的實施方案中,可以維持對應于數(shù)據(jù)對象101的每個邏輯分區(qū)103的至少一個主副本412和至少一個從副本416。
[0070]如圖9的元素906中所示,服務可以初始化和存儲對應于給定邏輯分區(qū)103的主副本412的主副本桶集152和從副本快照桶集157,每個桶集包括一個或多個令牌桶202。每個桶可以包括可用于限制針對邏輯分區(qū)103的輸入/輸出(I/O)操作的吞吐量的令牌的各自可再填入集合,且每個桶可以具有指示對于允許的I/O操作,在何種情形下(且如果有的話,多少)令牌將從桶消耗的各自令牌消耗策略。主副本桶集152可以包括對主副本而言為本地的至少一些信息一例如,在一個實施中,主副本桶集的特定桶150C的當前令牌計數(shù)可以反映其上存儲主副本數(shù)據(jù)的共享存儲裝置處的可用吞吐量容量。主副本桶集的其它桶可以用于實現(xiàn)與邏輯分區(qū)關聯(lián)的供應吞吐量級別(例如,已請求和/或支付的數(shù)據(jù)對象的擁有者的I/O操作的速率)或處理I/O工作負載中的短期突發(fā)。從副本快照桶集可以包括表示一個或多個從副本416處的可用吞吐量容量的桶一例如,一個這樣的桶可以指示與其上存儲從副本數(shù)據(jù)的共享存儲裝置關聯(lián)的桶中存在的令牌數(shù)量的主副本視圖。在一些實施方案中,不同桶集可以用于讀取的準入控制,而非寫入的準入控制。
[0071]主副本在所描繪的實施方案中可以使用特定從副本桶更新協(xié)議獲得關于從副本處的可用吞吐量容量的信息(元素910)。例如,指示由從副本使用的共享存儲裝置的可用吞吐量容量的維持于從副本處的令牌桶(諸如圖6的桶171C)的填充數(shù)的快照或時間點值可以在一個實施方案中于寫入應答消息中發(fā)送至主副本和/或于心跳消息中自從副本發(fā)送至主副本。主副本在所描繪的實施方案中可以使用經(jīng)由協(xié)議獲得的信息以更新從副本快照桶集的一個或多個桶中的令牌填充數(shù)(元素914)。在至少一些實施方案中,通過添加或背載已因為其它原因發(fā)送至主副本(例如,以應答寫入復制請求或以確認從副本可供使用且正運行)的消息內(nèi)的從副本側(cè)可用容量快照,可以使由寫入準入控制機制引入的開銷最小化。
[0072]例如,考慮其中邏輯分區(qū)具有主副本M和其數(shù)據(jù)分別存儲于共享存儲裝置Dl和D2上的兩個從副本SI和S2的實施方案。裝置特定令牌桶SBl和SB2可以維持于各自從副本SI和S2處,其分別指示Dl和D2的當前可用吞吐量容量。共同代理桶CPB可以維持于主副本處的從副本快照桶集中以存儲關于Dl和D2之中的最小吞吐量容量的可用的最新信息。SI可以將背載于時間Tl時的寫入應答內(nèi)的填充數(shù)(SBl) ( S卩,當前SBl中的令牌的數(shù)量)提供至主副本。類似地,S2可以在時間(Tl+deltal)時的寫入應答中將填充數(shù)(SB2)提供至主副本。當主副本接收填充數(shù)(SBl)時,其可以將填充數(shù)(SBl)與填充數(shù)(CPB)(共同代理桶的當前令牌計數(shù))相比較,且如果填充數(shù)(SBl)小于填充數(shù)(CPB),那么填充數(shù)(CPB)可以設置為填充數(shù)(SBl)。當在主副本處接收填充數(shù)(SB2)時,可以執(zhí)行類似檢驗。因此,主副本可以使用共同代理桶保持追蹤兩個從副本的裝置特定桶的最小吞吐量容量,但在任何給定瞬間,主副本視圖取決于多頻繁地更新從副本側(cè)信息而相對于從副本的一者或兩者略微過時。在一些實施中,各自快照桶可以如圖7中所示維持于對應于每個從副本的主副本處,而非共同代理桶。
[0073]如元素918中所指示,可以接收針對邏輯分區(qū)的寫入請求(諸如,對于邏輯分區(qū)的一些部分的創(chuàng)建、更新或刪除請求)。在所描繪的實施方案中,可以相對于主副本或在主副本處對邏輯分區(qū)的所有副本處理針對寫入的準入控制。準入控制機制可以確定足夠令牌是否存在于主副本桶集和從副本快照桶集的一個或兩個桶集處,其中令牌的足夠性基于桶的各自消耗策略為桶集中的每個桶作出解釋。在一個實施中,例如,如果特定桶(例如,供應容量桶,諸如圖5的主副本桶集的桶150A)基于其消耗策略具有足夠令牌,那么可以準許請求而不管其它桶的狀態(tài)如何。在這樣的實施中,如果特定桶不具有足夠令牌,那么如圖10中所示和下文所描述,可以檢查其它桶的填充數(shù)且基于那些其它桶的內(nèi)容準許請求。在另一實施中,在每個桶集的每個桶中需要一個令牌以允許寫入請求。在多個桶實施于給定桶集內(nèi)的一個實施中,可從桶集的一個或多個桶要求零個令牌,但可從桶集的一個或多個其它桶中的每個要求一個或多個令牌。在其它實施中,可取決于寫入請求的參數(shù)而從多種桶要求不同數(shù)量的令牌一例如,如果準入控制機制能夠確定寫入請求將導致較大數(shù)量的物理或邏輯寫入,那么可從特定桶消耗多于一個令牌。
[0074]如果如對應于圖9的元素922的操作中確定,基于實際上的消耗策略或若干策略,在每個桶集中找到足夠令牌,那么寫入請求可以被接受來執(zhí)行(元素926)??梢詮拿總€桶集消耗適當數(shù)量的令牌,且寫入復制請求可以從主副本發(fā)送至適當數(shù)量的從副本。如果寫入成功地復制于規(guī)定數(shù)量的副本處(如元素928中確定),那么可以告知請求客戶端寫入成功(元素932)。如果未找到足夠令牌(如元素922中確定)或如果寫入在規(guī)定數(shù)量副本處未成功(如元素928中確定),那么在一些實施方案中,可以告知客戶端寫入失敗(元素936) ο在其它實施方案中,在延遲之后重試寫入。
[0075]圖10是根據(jù)至少一些實施方案的圖示可以被執(zhí)行來在網(wǎng)絡可訪問服務下對突發(fā)模式寫入實施基于令牌的準入控制機制的操作的方面的流程圖。所描繪的實施方案中的主副本桶集可以包括類似于圖5的供應容量桶150A、突發(fā)處理桶150B和主副本共享裝置150C的供應容量桶150A、突發(fā)處理桶150B和從副本共享裝置150C。從副本快照桶集可以包括類似于圖5中所示的共同代理桶157的共同代理桶157。如元素1001中所示,可以在與寫入所針對的邏輯分區(qū)的主副本關聯(lián)的準入控制器180處接收寫入請求。
[0076]如果主副本供應容量桶150A基于其消耗策略具有足夠令牌(如元素1004中確定),那么邏輯分區(qū)可以被認為在正常(非突發(fā))模式中,且可以接受寫入請求(元素1007) ο可以從供應容量桶消耗(移除)一個或多個令牌以反映寫入的接受(元素1010)。在至少一些實施方案中,還可以基于桶的各自消耗策略從主副本桶集和/或從副本快照桶集的其它桶移除令牌一例如,在一個簡答實施中,可以從桶150A、150B、150C和157中的每個消耗一個令牌。在所描述的實施方案中,取決于多種桶的再填入速率可以將令牌添加至主副本桶集的一個或多個桶(元素1034)。(對從副本快照桶集的填充數(shù)的改變可以如上文所描述,基于自從副本接收的通信;關于這樣的通信的操作的實例圖示于圖1la和圖1lb中。)
[0077]但是如果主副本供應容量桶150A不具有足夠令牌(如還在元素1004中確定),那么邏輯分區(qū)可以被認為在突發(fā)模式中。在所描繪的實施方案中,在突發(fā)模式中,可以檢驗桶150B、150C和150D中的每個以基于其消耗策略確定其是否各具有足夠令牌。如元素1014中所示,可以首先檢驗突發(fā)處理桶150B以(例如)確定邏輯分區(qū)是否在配置的突發(fā)峰值容量限制內(nèi)和/或具有足夠的存入令牌來允許突發(fā)。如果桶150B具有足夠令牌,那么接下來可以檢驗主副本共享裝置桶150C(元素1018)以(例如)確定在用于主副本數(shù)據(jù)的共享存儲裝置處足夠吞吐量容量是否可用。接著,如果主副本共享裝置桶150C具有足夠令牌,那么可以檢驗從副本快照共同代理桶157以(例如)確定(若干)從副本是否可能在其各自共享裝置處具有足夠吞吐量容量(元素1022)。(應注意,在其中對于每個從副本,從副本快照桶集具有一個快照桶的實施方案中,如圖7中所示,可以檢驗快照桶的至少一個子集中的每個,而非檢驗共同代理桶。)如果在對應于元素1014、1018和1022的操作中檢驗的所有桶具有足夠令牌,那么寫入請求