大規(guī)模服務(wù)允許跨海量數(shù)據(jù)的事務(wù)(transaction)并且經(jīng)常保存數(shù)據(jù)的多個(gè)復(fù)本?;A(chǔ)資源具有有限限度,這限制了能夠在任意單個(gè)事務(wù)中處理的數(shù)據(jù)的量。作為結(jié)果,大規(guī)模服務(wù)通常被設(shè)計(jì)為具有固定的規(guī)模單位(scale unit)。當(dāng)服務(wù)上的負(fù)載超過規(guī)模單位時(shí),可以添加額外的規(guī)模單位并且數(shù)據(jù)可以跨多個(gè)規(guī)模單位進(jìn)行分區(qū)。盡管這允許服務(wù)容納增加的量的數(shù)據(jù),但是事務(wù)不再能夠跨已經(jīng)被分區(qū)的數(shù)據(jù)來執(zhí)行。
針對(duì)該問題的傳統(tǒng)的解決方案包括使用同步機(jī)制來調(diào)和數(shù)據(jù)、迫使對(duì)數(shù)據(jù)進(jìn)行的人工劃分適應(yīng)該規(guī)模單位、或者放棄事務(wù)。同步機(jī)制經(jīng)常非常復(fù)雜并且具有多方主導(dǎo)的問題。如果針對(duì)文檔進(jìn)行了沖突的編輯,則需要用戶干預(yù)來解決該沖突。由于傳播延遲,沖突可能在用戶已經(jīng)得到事務(wù)成功的確認(rèn)并且登出服務(wù)之后才會(huì)發(fā)生。因此,沖突可能長時(shí)間無法解決。
使得未解決的沖突最小化的一種機(jī)制是具有負(fù)責(zé)特定的記錄的權(quán)限,但是這在記錄被復(fù)制并存儲(chǔ)在多個(gè)地方時(shí)不能夠得到高效地處理。傳統(tǒng)的解決方案使用諸如Paxos之類的一致性協(xié)議來在存儲(chǔ)復(fù)本的頂端構(gòu)建人工權(quán)限。然而,當(dāng)一致性系統(tǒng)中的節(jié)點(diǎn)由于網(wǎng)絡(luò)運(yùn)行中斷而不可用或者無法進(jìn)行通信時(shí),該一致性系統(tǒng)存在問題。
關(guān)于這些和其他考慮而進(jìn)行了本發(fā)明。盡管已經(jīng)討論了相對(duì)具體的問題,但是應(yīng)當(dāng)理解的是,在本文中所公開的實(shí)施例不應(yīng)該限于解決在
背景技術(shù):
中所標(biāo)識(shí)的具體的問題。
技術(shù)實(shí)現(xiàn)要素:
提供了該發(fā)明內(nèi)容以用簡化的形式引入了在下文的具體實(shí)施方式部分中所進(jìn)一步描述的概念的選擇。該發(fā)明內(nèi)容不旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或本質(zhì)特征,也不旨在用來幫助確定所要求保護(hù)的主題的范圍。
一種可擴(kuò)展最終一致性系統(tǒng)的實(shí)施例包括事務(wù)對(duì)象模型,其允許針對(duì)大規(guī)模服務(wù)的高效且可擴(kuò)展的最終一致性。在可擴(kuò)展最終一致性系統(tǒng)內(nèi),由分離的層來處理寫請(qǐng)求和讀請(qǐng)求。日志服務(wù)寫請(qǐng)求(例如,對(duì)文檔的寫入)在分區(qū)方案中與寫動(dòng)作相一致。存儲(chǔ)服務(wù)讀請(qǐng)求(即,視圖的讀取)在分區(qū)方案中與讀動(dòng)作相一致。該日志包括用于存儲(chǔ)文檔的至少一個(gè)基于文檔的分區(qū)。該存儲(chǔ)包括用于存儲(chǔ)文檔的至少一個(gè)基于視圖的分區(qū)。
當(dāng)用戶執(zhí)行諸如創(chuàng)建、修改、或刪除文檔之類的動(dòng)作時(shí),寫請(qǐng)求被傳送至可擴(kuò)展最終一致性系統(tǒng)。在接收之后,該可擴(kuò)展最終一致性系統(tǒng)首先將該寫請(qǐng)求保存至日志。在已經(jīng)將該寫請(qǐng)求保存至日志之后,對(duì)文檔的改變被認(rèn)為是將要接受的。該可擴(kuò)展最終一致性系統(tǒng)的實(shí)施例可以在接收之后在至少兩個(gè)不同的位置中將該寫請(qǐng)求保存至日志??梢詫⒃搶懻?qǐng)求的一個(gè)副本作為運(yùn)行記錄來保存,所述運(yùn)行記錄充當(dāng)標(biāo)識(shí)還沒有與存儲(chǔ)完全融合的寫請(qǐng)求的動(dòng)作項(xiàng)。該寫請(qǐng)求的另一個(gè)副本可以作為示出了不同版本之間的對(duì)文檔的改變的歷史記錄來保存。
改變提交層負(fù)責(zé)將寫請(qǐng)求從日志傳播至存儲(chǔ)。文檔寫從日志流至存儲(chǔ)從而沒有復(fù)雜的同步機(jī)制。在各個(gè)實(shí)施例中,可擴(kuò)展最終一致性系統(tǒng)可以當(dāng)運(yùn)行記錄在日志中被創(chuàng)建時(shí)進(jìn)行首次嘗試以將所述運(yùn)行記錄復(fù)制到存儲(chǔ)。一旦已經(jīng)成功地復(fù)制了運(yùn)行記錄,就將該運(yùn)行記錄從日志中刪除。
一致性恢復(fù)層負(fù)責(zé)改變提交層的循環(huán)操作并最后提供最終一致性。一致性恢復(fù)層持續(xù)地提示改變提交層以通讀由日志所保存的現(xiàn)有的記錄并且將任何運(yùn)行記錄復(fù)制到存儲(chǔ)。
附圖說明
通過參考以下附圖,本公開的進(jìn)一步的特征、方面、和優(yōu)點(diǎn)將變得更好地被理解,其中,元素不是按比例繪制的,以便更為清楚地示出細(xì)節(jié),并且其中,相同的附圖標(biāo)記在多個(gè)視圖通篇中指示相同的元素:
圖1示出了在大規(guī)模服務(wù)中所實(shí)現(xiàn)的可擴(kuò)展最終一致性系統(tǒng)的一個(gè)實(shí)施例的系統(tǒng)架構(gòu);
圖2是表示針對(duì)日志的一個(gè)分區(qū)的運(yùn)行和歷史記錄的一個(gè)實(shí)施例的圖示;
圖3是由可擴(kuò)展最終一致性系統(tǒng)所采用的最終一致性方法的一個(gè)實(shí)施例的高級(jí)流程圖;
圖4是可擴(kuò)展最終一致性系統(tǒng)的一個(gè)實(shí)施例的流程圖;
圖5A至5D示出了在可擴(kuò)展最終一致性系統(tǒng)內(nèi)如何對(duì)涉及具有各種關(guān)系的文檔的各種事務(wù)(即,編輯)進(jìn)行處理;
圖6是示出了利用其可以實(shí)踐本發(fā)明的實(shí)施例的計(jì)算設(shè)備的物理組件的一個(gè)實(shí)施例的框圖;和
圖7A和7B是利用其可以實(shí)踐本發(fā)明的實(shí)施例的移動(dòng)計(jì)算設(shè)備的簡化框圖。
具體實(shí)施方式
參考形成本發(fā)明的一部分并示出了具體的示例性實(shí)施例的附圖以在下文中更加充分地描述各種實(shí)施例。然而,實(shí)施例可以以許多不同的形式來實(shí)現(xiàn),并且不應(yīng)該被理解為限于在本文中所闡述的實(shí)施例;相反,提供了這些實(shí)施例以使得該公開將是透徹的和完整的,并且將會(huì)向本領(lǐng)域技術(shù)人員完全傳達(dá)實(shí)施例的范圍。實(shí)施例可以被實(shí)踐為方法、系統(tǒng)、或設(shè)備。從而,實(shí)施例可以采取硬件實(shí)現(xiàn)、完全軟件實(shí)現(xiàn)、或者組合了軟件和硬件方面的實(shí)現(xiàn)的形式。因此,以下詳細(xì)描述將不被理解為限制意義。
在本文中描述并且在附圖中示出了可擴(kuò)展最終一致性系統(tǒng)的實(shí)施例。該可擴(kuò)展最終一致性系統(tǒng)使用邏輯文檔日志以在大規(guī)模服務(wù)中提供跨分區(qū)的最終一致性。該系統(tǒng)允許通過并行化來對(duì)文檔的大量互連的圖進(jìn)行事務(wù)性編輯而并不犧牲線性可擴(kuò)展性,只要沒有文檔寫需要事務(wù)性地跨越多個(gè)文檔。該系統(tǒng)將編輯的權(quán)限與重復(fù)的存儲(chǔ)分離,以允許高效的事務(wù)和線性可擴(kuò)展性。將所有文檔寫都寫至日志中的特定于文檔的分區(qū),在這里將文檔寫進(jìn)行排隊(duì)直到改變被傳播至存儲(chǔ)的基于視圖的分區(qū)為止。一旦當(dāng)未完成的文檔寫被成功地復(fù)制到存儲(chǔ),就將其從日志中移除。通過持續(xù)地檢查日志并且嘗試將任何未完成的文檔寫復(fù)制到存儲(chǔ),該系統(tǒng)在沒有諸如一致協(xié)議(例如,Paxos)之類的復(fù)雜的同步機(jī)制的情況下提供最終一致性。該系統(tǒng)以這樣的方式來對(duì)文檔的隸屬和包含關(guān)系進(jìn)行建模:允許將最終影響多于一個(gè)文檔的文檔寫作為對(duì)單個(gè)文檔的編輯來通過日志進(jìn)行高效地處理而不用求助于人工分區(qū)。
圖1示出了可擴(kuò)展最終一致性系統(tǒng)的一個(gè)實(shí)施例的系統(tǒng)架構(gòu)??梢栽谙蛴脩?02提供對(duì)大量信息的訪問和存儲(chǔ)的大規(guī)模(例如,大數(shù)據(jù))服務(wù)中實(shí)現(xiàn)可擴(kuò)展最終一致性系統(tǒng)100。用戶可以經(jīng)由網(wǎng)絡(luò)106從各種客戶端設(shè)備104a-d訪問大規(guī)模服務(wù),所述網(wǎng)絡(luò)例如但不限于互聯(lián)網(wǎng)、廣域網(wǎng)、局域網(wǎng)、及其組合。合適的客戶端設(shè)備的示例包括但不限于臺(tái)式計(jì)算機(jī)104a、膝上型計(jì)算機(jī)104b、平板計(jì)算機(jī)104c、移動(dòng)電話104d、個(gè)人數(shù)字助理、智能手表、以及智能電器(例如,智能電視)。
可擴(kuò)展最終一致性系統(tǒng)包括提供對(duì)大規(guī)模服務(wù)的入口點(diǎn)的前端層108。在各種實(shí)施例中,該大規(guī)模服務(wù)可以提供基于網(wǎng)絡(luò)的用戶接口,所述用戶接口能夠通過諸如瀏覽器之類的用戶代理而由客戶端設(shè)備所訪問。在一些實(shí)施例中,用戶代理可以是提供用戶接口并且處理與大規(guī)模服務(wù)的通信的專用客戶端應(yīng)用。
事務(wù)對(duì)象模型110允許針對(duì)大規(guī)模服務(wù)的高效且可擴(kuò)展的最終一致性。由該可擴(kuò)展最終一致性系統(tǒng)所處理的事務(wù)包括但不限于寫請(qǐng)求和讀請(qǐng)求,它們?cè)试S用戶讀取、查看(即,顯示)、創(chuàng)建、復(fù)制、刪除、操縱(即,編輯或修改)、分享、協(xié)同、或保存(即,寫)由大規(guī)模服務(wù)所處理的文檔和視圖。術(shù)語“文檔”寬泛地涵蓋了由大規(guī)模服務(wù)所處理的任何數(shù)據(jù)對(duì)象。作為示例,針對(duì)基于辦公或生產(chǎn)力應(yīng)用的大規(guī)模服務(wù)而言,文檔可以包括但不限于文字處理文檔、郵件項(xiàng)目、任務(wù)項(xiàng)目、日歷項(xiàng)目、聯(lián)系人項(xiàng)目、演示、電子表格、或數(shù)據(jù)庫。術(shù)語“視圖”寬泛地涵蓋了用來向用戶呈現(xiàn)文檔的基于常見屬性值的文檔的任何索引、分組、或類別。作為示例,視圖可以允許由任務(wù)所有者或者由與該任務(wù)相關(guān)聯(lián)的項(xiàng)目來顯示任務(wù)項(xiàng)目的集合。
在可擴(kuò)展最終一致性系統(tǒng)內(nèi),由分離的層來處理寫請(qǐng)求112和讀請(qǐng)求114。日志116以與寫動(dòng)作一致的分區(qū)方案來為寫請(qǐng)求(例如,對(duì)文檔的寫入)服務(wù)。存儲(chǔ)118以與讀動(dòng)作一致的分區(qū)方案來為讀請(qǐng)求(例如,視圖的讀取)服務(wù)。在所圖示的實(shí)施例中,將日志和存儲(chǔ)表示為通過對(duì)應(yīng)的應(yīng)用程序接口(API)(日志API 120、和存儲(chǔ)API 122)來訪問的虛擬化的存儲(chǔ)資源(例如,云存儲(chǔ))。
日志包括用于存儲(chǔ)文檔的至少一個(gè)基于文檔的分區(qū)124。基于分配給單個(gè)資源或查詢的數(shù)據(jù)的最大分組來設(shè)置每個(gè)分區(qū)的大小。隨著由大規(guī)模服務(wù)所處理的數(shù)據(jù)的量的增加,可以線性地?cái)U(kuò)展日志并且添加新的分區(qū)。無論日志分區(qū)的數(shù)量如何,可擴(kuò)展最終一致性系統(tǒng)都將與任何給定的文本相關(guān)聯(lián)的所有寫請(qǐng)求全部存儲(chǔ)在同一日志分區(qū)中。具有與每個(gè)文檔相關(guān)聯(lián)的單個(gè)日志分區(qū)允許針對(duì)每個(gè)文檔而保存事務(wù)編輯隊(duì)列。
存儲(chǔ)包括用于存儲(chǔ)文檔的至少一個(gè)基于視圖的分區(qū)126。按視圖對(duì)存儲(chǔ)進(jìn)行分區(qū)允許文檔高效地被多個(gè)用戶同時(shí)進(jìn)行訪問。如果文檔與多于一個(gè)視圖相關(guān)聯(lián),則每個(gè)視圖通常保存文檔的其自己的副本(即,復(fù)本)。在該存儲(chǔ)內(nèi),文檔的各種復(fù)本/視圖形成跨多個(gè)分區(qū)分布的文檔的大量互連的圖。盡管一些文檔除了該文檔的復(fù)本之外可以獨(dú)立于所有其他文檔,但是其他文檔可以憑借包含關(guān)系或隸屬關(guān)系而進(jìn)行互連。例如,單個(gè)的個(gè)人任務(wù)可以獨(dú)立于存儲(chǔ)內(nèi)的其他文檔。一個(gè)文檔也可以涉及存儲(chǔ)中的另一個(gè)文檔,例如,分配給項(xiàng)目的任務(wù)。該項(xiàng)目可以充當(dāng)多個(gè)任務(wù)的容器。類似地,文檔可以涉及存儲(chǔ)中對(duì)視圖有影響的其他實(shí)體,例如,分配給項(xiàng)目的人員。就如日志一樣,可以線性地?cái)U(kuò)展存儲(chǔ)并且添加新的分區(qū)以處理額外的文檔或視圖。
當(dāng)用戶執(zhí)行諸如創(chuàng)建、修改、或刪除文檔的動(dòng)作時(shí),將寫請(qǐng)求傳送至可擴(kuò)展最終一致性系統(tǒng)。在接收之后,該可擴(kuò)展最終一致性系統(tǒng)首先將該寫請(qǐng)求保存至日志。在已經(jīng)將該寫請(qǐng)求保存至日志之后,對(duì)文檔的改變被認(rèn)為是將要接受的,但是在該寫請(qǐng)求中所反映的改變通常不是對(duì)所有用戶可見的,直至它們已經(jīng)融入存儲(chǔ)中為止。當(dāng)日志包括多個(gè)分區(qū)時(shí),該可擴(kuò)展最終一致性系統(tǒng)可以確定指示該寫請(qǐng)求應(yīng)當(dāng)被寫入的分區(qū)的分區(qū)標(biāo)識(shí)符。在各種實(shí)施例中,該分區(qū)標(biāo)識(shí)符可以基于與該寫請(qǐng)求相關(guān)聯(lián)的文檔的文檔標(biāo)識(shí)符。
可擴(kuò)展最終一致性系統(tǒng)使用日志作為用于保存寫請(qǐng)求直到它們已經(jīng)融入合適的視圖為止的暫存區(qū)域(staging area)。當(dāng)檢測(cè)到針對(duì)文檔的沖突編輯時(shí)也可以使用該日志。為了實(shí)現(xiàn)這些功能,可擴(kuò)展最終一致性系統(tǒng)的實(shí)施例可以在接收寫請(qǐng)求之后,在至少兩個(gè)不同的位置將該寫請(qǐng)求保存至日志。可以將該寫請(qǐng)求的一個(gè)副本保存為運(yùn)行記錄128,其充當(dāng)標(biāo)識(shí)還沒有與存儲(chǔ)完全融合的寫請(qǐng)求的動(dòng)作項(xiàng)。無法將寫請(qǐng)求復(fù)制到存儲(chǔ)可以是分區(qū)或者日志與存儲(chǔ)之間的通信信道(例如,互聯(lián)網(wǎng))暫時(shí)無法訪問(例如,資源故障或停機(jī))的結(jié)果。可以將該寫請(qǐng)求的另一個(gè)副本保存為歷史記錄130??梢猿鲇谥T如檢測(cè)對(duì)文檔的沖突編輯或維護(hù)審計(jì)日志之類的目的來使用歷史記錄。
改變提交層132負(fù)責(zé)以并行化的方式將寫請(qǐng)求從日志傳播至存儲(chǔ)。文檔寫從日志流動(dòng)至存儲(chǔ),因此不存在復(fù)雜的同步機(jī)制。換句話說,對(duì)每個(gè)視圖/復(fù)本的更新獨(dú)立于受到文檔寫影響的對(duì)其他視圖/復(fù)本的更新。這進(jìn)而允許文檔寫以及每個(gè)更新作為單個(gè)的文檔事務(wù)來進(jìn)行而并不求助于人工劃分(即,將文檔圖細(xì)分為人工的規(guī)模單位或區(qū))。在各種實(shí)施例中,該可擴(kuò)展最終一致性系統(tǒng)可以當(dāng)在日志中創(chuàng)建運(yùn)行記錄時(shí)首次嘗試將其復(fù)制到存儲(chǔ)。一旦已經(jīng)成功地復(fù)制了運(yùn)行記錄,就將該運(yùn)行記錄從該日志中刪除。
一致性恢復(fù)層134負(fù)責(zé)該改變提交層的循環(huán)操作并最后提供最終一致性。一致性恢復(fù)層提示改變提交層通讀由日志所保存的現(xiàn)有的記錄并且將任何運(yùn)行記錄復(fù)制至存儲(chǔ)。在各種實(shí)施例中,該改變提交層以最老的運(yùn)行記錄開始,按照編輯被該可擴(kuò)展最終一致性系統(tǒng)所接收的順序來對(duì)文檔進(jìn)行事務(wù)性編輯。該一致性恢復(fù)層可以基于各種事件的發(fā)生和/或定期地(例如,每N分鐘、小時(shí)、或天)發(fā)起改變提交層的操作??梢杂脕碛|發(fā)改變提交層的操作的事件的示例包括但不限于:系統(tǒng)啟動(dòng)、錯(cuò)誤恢復(fù)、以及接收寫請(qǐng)求。
圖2是表示針對(duì)日志的一個(gè)分區(qū)的運(yùn)行和歷史記錄的一個(gè)實(shí)施例的圖示。所示出的代表性日志分區(qū)包含針對(duì)每個(gè)寫請(qǐng)求的歷史記錄130a-c。文檔“doc1”的版本2和文檔“doc4”的版本1還具有運(yùn)行記錄128b-c。運(yùn)行記錄的存在表示寫請(qǐng)求還沒有被完全復(fù)制到存儲(chǔ)。針對(duì)文檔“doc1”的版本1的運(yùn)行記錄不存在表示已經(jīng)用針對(duì)版本1的寫請(qǐng)求更新了所有復(fù)本。在對(duì)日志的下一次檢查時(shí),該可擴(kuò)展最終一致性系統(tǒng)將嘗試將針對(duì)文檔“doc1”的版本2和文檔“doc4”的版本1的寫請(qǐng)求傳播至存儲(chǔ)。
針對(duì)每個(gè)基于文檔的日志分區(qū)124的隊(duì)列200是指可擴(kuò)展最終一致性系統(tǒng)中未完成的寫請(qǐng)求。換句話說,該隊(duì)列寬泛地指代還沒有成功地復(fù)制到存儲(chǔ)的運(yùn)行記錄的集合。日志和存儲(chǔ)的實(shí)施例是鍵值存儲(chǔ)系統(tǒng)。在各種實(shí)施例中,與運(yùn)行和歷史記錄相關(guān)聯(lián)的基本信息包括但不限于:分區(qū)鍵值202、行鍵值204、和文檔數(shù)據(jù)206??梢葬槍?duì)每個(gè)記錄所存儲(chǔ)的額外的信息可以包括但不限于:充當(dāng)文檔的離線副本的源的文檔的版本(即,針對(duì)其生成編輯的版本)、接收到寫請(qǐng)求的日期、接收到寫請(qǐng)求的時(shí)間、以及提交寫請(qǐng)求的用戶的用戶標(biāo)識(shí)符。
分區(qū)鍵值202標(biāo)識(shí)向其分配文檔的分區(qū)。在各種實(shí)施例中,分區(qū)鍵值是文檔標(biāo)識(shí)符210(例如,文檔名稱)的散列值208,這與將文檔標(biāo)識(shí)符用作分區(qū)鍵值相比允許更為高效的最終一致性。散列值允許通過將文檔標(biāo)識(shí)符一般化來將具有一系列唯一的文檔標(biāo)識(shí)符的文檔分組到相同的分區(qū)中。例如,在所示出的實(shí)施例中,文檔標(biāo)識(shí)符“doc1”和“doc4”的散列值是“ABC”,并且“doc1”和“doc4”的運(yùn)行和歷史記錄被分配給對(duì)應(yīng)于散列值“ABC”的相同的日志。
行鍵值204是日志內(nèi)唯一的記錄標(biāo)識(shí)符。在各種實(shí)施例中,行鍵值是附加有記錄的版本212的文檔標(biāo)識(shí)符210??梢岳妙愋蜆?biāo)識(shí)符214來修改行鍵值從而在歷史記錄和運(yùn)行記錄之間進(jìn)行區(qū)分。例如,可以在行鍵值前加上諸如“H”之類的字符以指示該記錄是歷史記錄、或者在行鍵值前加上“R”以指示該記錄是運(yùn)行記錄。
文檔數(shù)據(jù)206包括被寫的文檔的內(nèi)容216。在一些實(shí)施例中,內(nèi)容可以僅包括改變而不是該文檔的完整副本。
圖3是由可擴(kuò)展最終一致性系統(tǒng)所采用的最終一致性方法的一個(gè)實(shí)施的高級(jí)流程圖。最終一致性方法300以其中接收到寫請(qǐng)求的文檔寫操作302開始。鍵值操作304計(jì)算寫請(qǐng)求的鍵值。該鍵值可以包括如關(guān)于圖2所描述的分區(qū)鍵值和行鍵值。分區(qū)鍵值標(biāo)識(shí)向其分配文檔的分區(qū)。行鍵值是唯一的記錄標(biāo)識(shí)符。在各種實(shí)施例中,該行鍵值是附加有記錄的版本的文檔標(biāo)識(shí)符。
歷史操作306將寫請(qǐng)求作為歷史記錄存儲(chǔ)在使用鍵值的日志中。更加具體而言,將該寫請(qǐng)求寫入到由分區(qū)鍵值所標(biāo)識(shí)的分區(qū)的日志中。歷史記錄是使用利用歷史記錄指示符所修改的行鍵值而唯一地標(biāo)識(shí)的。例如,可以該歷史記錄的在行鍵值前加上諸如“H”之類的字符以指示該記錄是歷史記錄。
運(yùn)行操作308將寫請(qǐng)求的副本作為運(yùn)行記錄存儲(chǔ)在使用該鍵值的日志中。更加具體而言,將該寫請(qǐng)求寫入到由分區(qū)鍵值所標(biāo)識(shí)的分區(qū)的日志中。運(yùn)行記錄是使用利用運(yùn)行記錄指示符所修改的行鍵值而唯一地標(biāo)識(shí)的。例如,可以在該運(yùn)行記錄的行鍵值前加上諸如“R”之類的字符以指示該記錄是運(yùn)行記錄。
運(yùn)行記錄處理操作310將寫記錄(即,運(yùn)行記錄中的編輯)復(fù)制到存儲(chǔ)。運(yùn)行記錄可以通過運(yùn)行記錄指示符與其他記錄區(qū)分開來。運(yùn)行記錄處理操作的各種實(shí)施例在每個(gè)運(yùn)行記錄被創(chuàng)建時(shí)對(duì)其進(jìn)行作用。如果存在未經(jīng)處理的運(yùn)行記錄(即,未完成的寫請(qǐng)求),則復(fù)制操作312將該寫請(qǐng)求復(fù)制到文檔存儲(chǔ)。
復(fù)制成功檢查操作314驗(yàn)證已經(jīng)將寫請(qǐng)求成地功復(fù)制到存儲(chǔ)中的合適的分區(qū)。在一些實(shí)施例中,可以通過從存儲(chǔ)接收成功或失敗響應(yīng)而指示成功或失敗。在其他實(shí)施例中,可以通過將存儲(chǔ)中的分區(qū)的內(nèi)容與寫請(qǐng)求的內(nèi)容進(jìn)行比較來確定成功??梢詫⒃摫容^實(shí)現(xiàn)為元數(shù)據(jù)比較(例如,驗(yàn)證每個(gè)復(fù)本的版本號(hào)與所處理的寫請(qǐng)求相同)或內(nèi)容比較(例如,散列或逐字節(jié)比較)。
刪除操作316在復(fù)制操作成功完成之后將運(yùn)行記錄從日志中刪除。刪除運(yùn)行記錄是已經(jīng)成功地將文檔編輯并入存儲(chǔ)中的信號(hào)。盡管運(yùn)行記錄被刪除,但保留歷史記錄以用于在標(biāo)識(shí)沖突編輯以及對(duì)沖突解決進(jìn)行幫助時(shí)使用。在各種實(shí)施例中,可以將歷史記錄無限期地保留在日志中。
在可選的歷史清理操作318中,可以有條件地清理歷史記錄以降低日志的大小。在一些實(shí)施例中,針對(duì)每個(gè)文檔可以僅保留所選擇的數(shù)量的歷史記錄(例如,最后五個(gè))??商娲?,可以在指定時(shí)間段(例如,兩周或三個(gè)月)之后刪除歷史記錄。在一些實(shí)施例中,可以將歷史記錄保留鏈接至與文檔相關(guān)聯(lián)的活動(dòng)。換句話說,基于文檔的屬性可以保留更多的歷史記錄,所述文檔的屬性例如但不限于最近或頻繁地編輯的文檔。
如果該復(fù)制成功檢查操作確定復(fù)制失敗,則該復(fù)制成功檢查操作可以用于發(fā)起調(diào)度操作320,該調(diào)度操作320使得在所選擇的標(biāo)準(zhǔn)發(fā)生時(shí)再次嘗試重復(fù)操作??梢砸远喾N方式來確定成功或失敗。例如,可以由與存儲(chǔ)API建立連接的功能或者由接收到從存儲(chǔ)API所發(fā)送的成功/失敗響應(yīng)來指示,但不限于此。在各種實(shí)施例中,該調(diào)度操作可以被配置為使得該復(fù)制操作按照調(diào)度(例如,每天、每小時(shí)等)、在經(jīng)過時(shí)間之后(例如,在失敗后60分鐘)、或者在事件(例如,接收到新的寫請(qǐng)求)之后進(jìn)行重試,但不限于此。
重試操作322讀取日志文檔分區(qū)并且將存在于該日志中的任何未經(jīng)處理的運(yùn)行記錄收集到隊(duì)列中。運(yùn)行記錄處理操作310對(duì)該隊(duì)列中的每個(gè)運(yùn)行記錄進(jìn)行重復(fù)。在各種實(shí)施例中,該重試操作從最舊的記錄到最新的記錄來處理該日志。這確保了文檔編輯以它們被接收的順序而被處理,這促成了沖突編輯檢查以及可以依賴于按順序接收寫請(qǐng)求的其他功能。
圖4是可擴(kuò)展最終一致性系統(tǒng)的一個(gè)實(shí)施例的流程圖。流程在流程A處以用戶對(duì)文檔402進(jìn)行編輯開始。該文檔可以是由用戶所創(chuàng)建的新的文檔或者是已經(jīng)從大規(guī)模服務(wù)所讀取的現(xiàn)有文檔(例如,離線副本)。當(dāng)用戶保存針對(duì)文檔的改變時(shí),流程在B處以創(chuàng)建寫請(qǐng)求112繼續(xù)。該寫請(qǐng)求可以包含經(jīng)改變的文檔和額外的信息,例如但不限于:提交寫請(qǐng)求的用戶的用戶標(biāo)識(shí)符、提交寫請(qǐng)求的日期、提交寫請(qǐng)求的時(shí)間、以及充當(dāng)離線副本的源的文檔的版本(即,離線副本的基線版本)。在流程C處,確定與經(jīng)改變的文檔的文檔標(biāo)識(shí)符相對(duì)應(yīng)的分區(qū)鍵值。在流程D處,將運(yùn)行記錄添加至經(jīng)改變的文檔的合適的日志。在流程E處,可以將歷史記錄添加至經(jīng)改變的文檔的合適的日志。在流程F處,在存儲(chǔ)了用戶記錄之后,根據(jù)用戶(per-user)的一致視圖系統(tǒng)向用戶發(fā)送確認(rèn)404。該確認(rèn)向用戶指示已經(jīng)接收并接受了對(duì)文檔的改變。
在各種實(shí)施例中,在流程G處,將新添加的運(yùn)行記錄發(fā)送至改變提交層以供復(fù)制到存儲(chǔ)。在流程H處,該改變提交層將運(yùn)行記錄發(fā)送至存儲(chǔ)API,在這里該運(yùn)行記錄被傳播至針對(duì)對(duì)應(yīng)的視圖的合適的存儲(chǔ)分區(qū)。在流程I處,基于運(yùn)行記錄中的改變來對(duì)存儲(chǔ)分區(qū)中針對(duì)各種視圖的復(fù)本406a-n進(jìn)行更新。流程在流程J處以將成功或失敗報(bào)告回日志API而繼續(xù)。成功/失敗指示408可以源自于存儲(chǔ)API并且可以由該存儲(chǔ)API直接報(bào)告給日志API或者通過改變提交層而間接地報(bào)告。在其他實(shí)施例中,成功/失敗指示408可以由改變提交層來確定并且直接地報(bào)告至日志API。如果運(yùn)行記錄的復(fù)制成功,則流程在K處以刪除成功地復(fù)制的運(yùn)行記錄128r而繼續(xù)。
流程在L處隨著一致性恢復(fù)層從日志中讀取運(yùn)行記錄并形成隊(duì)列200而繼續(xù)。在流程M處,將經(jīng)排隊(duì)的運(yùn)行記錄發(fā)送至改變提交層以用于以它們被接收的順序來處理。流程針對(duì)隊(duì)列中的每個(gè)運(yùn)行記錄而從流程H處繼續(xù),并且繼續(xù)直到該隊(duì)列中的所有運(yùn)行記錄都已經(jīng)被處理為止。
圖5A至5D示出了如何在可擴(kuò)展最終一致性系統(tǒng)內(nèi)對(duì)涉及具有各種關(guān)系的文檔的各種事務(wù)(即,編輯)進(jìn)行處理。該可擴(kuò)展最終一致性系統(tǒng)對(duì)隸屬(例如,處于多個(gè)項(xiàng)目中的用戶)和包含(例如,作為項(xiàng)目一部分的任務(wù))進(jìn)行建模,并且允許在那些邊界之間移動(dòng)文檔,而不必將文檔圖(即,數(shù)據(jù)集)細(xì)分成人工規(guī)模單位或區(qū)。
圖5A示出了日志和存儲(chǔ)的初始狀態(tài)。出于討論的目的,所涉及的文檔包括經(jīng)復(fù)制的任務(wù)502、兩個(gè)項(xiàng)目504e、504f、以及兩個(gè)用戶506a、506b。日志116被示為具有單個(gè)分區(qū)124,其假定所涉及的所有文檔的分區(qū)鍵值(例如,散列值)都映射至同一分區(qū);然而,如之前所描述的,一個(gè)或多個(gè)文檔可以由鍵值指向不同的日志分區(qū)而對(duì)操作沒有任何顯著的影響。存儲(chǔ)118被分區(qū)成各種視圖分區(qū),包括個(gè)體項(xiàng)目分區(qū)126e、126f、根據(jù)分配的用戶來索引的任務(wù)的分區(qū)126t、以及用于高效的文檔取回的根據(jù)名稱來索引的用戶的分區(qū)126u。例如,可以在存儲(chǔ)中給不同的容器(例如,項(xiàng)目)提供有分離的視圖分區(qū),以允許在單個(gè)事務(wù)中取回表示與特定的項(xiàng)目相關(guān)聯(lián)的任務(wù)、資源(例如,用戶)、以及其他對(duì)象的各種文檔。文檔可以包括各種獨(dú)立的簡單值字段510,例如標(biāo)題或名稱。
一些文檔還可以包括容器關(guān)系字段512,例如項(xiàng)目標(biāo)識(shí)符,其將任務(wù)鏈接至另一個(gè)文檔(例如,項(xiàng)目)。項(xiàng)目標(biāo)識(shí)符可以充當(dāng)指向該任務(wù)所屬的項(xiàng)目(即,容器)的指針,從而定義了容器關(guān)系。通常而言,容器關(guān)系被局限于一對(duì)一(例如,任務(wù)屬于一個(gè)項(xiàng)目)或一對(duì)無(例如,項(xiàng)目不屬于一個(gè)項(xiàng)目)關(guān)系。出于說明性目的,將項(xiàng)目示出為具有對(duì)文檔標(biāo)識(shí)符進(jìn)行鏡像的項(xiàng)目標(biāo)識(shí)符以為索引提供公共字段。
一些文檔可以包括隸屬關(guān)系字段514,例如被分配至項(xiàng)目的人員(即,來自分組側(cè)的隸屬)或者用戶與其相關(guān)聯(lián)的項(xiàng)目(即,來自成員側(cè)的隸屬)。通常而言,隸屬關(guān)系除了允許一對(duì)一和一對(duì)無關(guān)系之外,還允許一對(duì)多(例如,項(xiàng)目可以具有多個(gè)經(jīng)分配的人員或者用戶可以具有多個(gè)角色)。
圖5B示出了在該可擴(kuò)展最終一致性系統(tǒng)內(nèi)對(duì)發(fā)生改變的獨(dú)立字段的處理。在這里,對(duì)任務(wù)的離線副本502o進(jìn)行工作的用戶102提交了寫請(qǐng)求(即,編輯)112,以將標(biāo)題字段510的值從“Fix A/C”改變?yōu)椤癋ix HVAC”。該編輯被存儲(chǔ)在與該任務(wù)相關(guān)聯(lián)的日志分區(qū)中(即,基于鍵值)。如在本文中所描述的,該標(biāo)題改變最終從日志傳播至存儲(chǔ)的各個(gè)分區(qū)中的該任務(wù)的每個(gè)復(fù)本502。從日志的角度而言,這樣的事務(wù)能夠容易地被識(shí)別為單個(gè)文檔事務(wù)。由于該改變限于對(duì)單個(gè)文檔進(jìn)行,因此所以該事務(wù)無需跨日志中的多個(gè)分區(qū)。
圖5C示出了該可擴(kuò)展最終一致性系統(tǒng)內(nèi)對(duì)包含關(guān)系字段改變的處理。在該實(shí)例中,對(duì)任務(wù)的離線副本502o進(jìn)行工作的用戶102提交了寫請(qǐng)求112,以通過將項(xiàng)目標(biāo)識(shí)符字段512的值從“Echo”改變?yōu)椤癋oxtrot”而將該任務(wù)移動(dòng)至不同的項(xiàng)目。同樣,該編輯被存儲(chǔ)在與任務(wù)相關(guān)聯(lián)的日志分區(qū)中。盡管該編輯涉及包含關(guān)系,但是僅僅任務(wù)(即,所包含的文檔)是必須改變的。該編輯最終被傳播至每個(gè)視圖/復(fù)本,這可以涉及從一個(gè)或多個(gè)分區(qū)中移除復(fù)本、將任務(wù)添加至一個(gè)或多個(gè)分區(qū)、以及在一個(gè)或多個(gè)分區(qū)中修改任務(wù)。在這里,從項(xiàng)目E(例如,針對(duì)項(xiàng)目E所指定的視圖分區(qū))中移除復(fù)本,并且將復(fù)本添加至項(xiàng)目F(例如,針對(duì)項(xiàng)目F所指定的視圖分區(qū))。此外,對(duì)視圖分區(qū)中針對(duì)根據(jù)受托者來索引的任務(wù)的復(fù)本進(jìn)行更新。然而,不需要對(duì)項(xiàng)目(即,容器)進(jìn)行改變。從而,從日志的角度而言,該事務(wù)是單個(gè)文檔事務(wù),這是因?yàn)閮H僅需要針對(duì)單個(gè)文檔來記錄改變。換句話說,僅盡需要將改變寫入到單個(gè)日志分區(qū)。
圖5D示出了該可擴(kuò)展最終一致性系統(tǒng)內(nèi)對(duì)隸屬關(guān)系字段改變的處理。在該實(shí)例中,對(duì)項(xiàng)目F的離線副本504o進(jìn)行工作的用戶102提交了寫請(qǐng)求112,以通過將“Alice”添加至人員字段514而向與該項(xiàng)目相關(guān)聯(lián)的用戶分組中添加成員。該編輯被存儲(chǔ)在與該項(xiàng)目相關(guān)聯(lián)的日志分區(qū)中。盡管改變最終可以被傳播至存儲(chǔ)中受該隸屬改變所影響的其他文檔,但是從日志的角度而言,對(duì)該隸屬關(guān)系字段的隸屬的更新僅僅是對(duì)項(xiàng)目的編輯。因此,即使最終結(jié)果可以是對(duì)多個(gè)文檔進(jìn)行更新(例如,可以對(duì)用戶A的隸屬字段進(jìn)行更新),但是將該寫請(qǐng)求作為單個(gè)文檔事務(wù)來高效地處理。
該申請(qǐng)的主題可以以多種系統(tǒng)、設(shè)備、和其他制品來實(shí)現(xiàn)或者被實(shí)踐為方法。實(shí)施例可以被實(shí)現(xiàn)為硬件、軟件、計(jì)算機(jī)可讀介質(zhì)或者其組合。在本文中所描述的實(shí)施例和功能可以經(jīng)由多種計(jì)算系統(tǒng)來操作,所述計(jì)算系統(tǒng)包括但不限于:臺(tái)式計(jì)算機(jī)系統(tǒng)、有線和無線計(jì)算系統(tǒng)、移動(dòng)計(jì)算系統(tǒng)(例如,移動(dòng)電話、上網(wǎng)本、平板或板式計(jì)算機(jī)、以及膝上型計(jì)算機(jī))、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程的消費(fèi)型電子產(chǎn)品、小型計(jì)算機(jī)、以及大型計(jì)算機(jī)。
各種類型的用戶界面和信息可以經(jīng)由板載計(jì)算設(shè)備顯示器或者經(jīng)由與一個(gè)或多個(gè)計(jì)算設(shè)備相關(guān)聯(lián)的遠(yuǎn)程顯示單元來顯示。例如,各種類型的用戶界面和信息可以在各種類型的用戶界面和信息所透射到的墻面上顯示并且與這樣的墻面進(jìn)行交互被投射在其上。與本發(fā)明實(shí)施例可以利用其實(shí)踐的多種計(jì)算系統(tǒng)的交互包括:鍵擊輸入、觸摸屏輸入、語音或其他音頻輸入、在相關(guān)聯(lián)的計(jì)算設(shè)備裝備有用于捕捉和解譯用戶手勢(shì)的檢測(cè)(例如,相機(jī))功能以用于控制計(jì)算設(shè)備的功能等的情況下的手勢(shì)輸入。
圖6至7B以及相關(guān)聯(lián)的描述提供了對(duì)其中可以實(shí)踐本發(fā)明的實(shí)施例的多種操作環(huán)境的討論。然而,所圖示和討論的設(shè)備和系統(tǒng)是出于示例和說明的目的,而不限于可以用于實(shí)踐在本文中所述的本發(fā)明的實(shí)施例的大量計(jì)算設(shè)備配置。
圖6是示出了利用其可以實(shí)踐本發(fā)明的實(shí)施例的計(jì)算設(shè)備600的物理組件(即,硬件)的框圖。在下文中所描述的計(jì)算設(shè)備組件可以適用于實(shí)施計(jì)算設(shè)備,其包括但不限于:個(gè)人計(jì)算機(jī)、平板計(jì)算機(jī)、平面計(jì)算機(jī)和智能電話、或者在文本中所討論的任何其他計(jì)算設(shè)備。在基本配置中,計(jì)算設(shè)備600可以包括系統(tǒng)存儲(chǔ)器604以及至少一個(gè)處理單元602。取決于計(jì)算設(shè)備的配置和類型,系統(tǒng)存儲(chǔ)器604可以包括但不限于:易失性存儲(chǔ)(例如,隨機(jī)存取存儲(chǔ)器)、非易失性存儲(chǔ)(例如,只讀存儲(chǔ)器)、閃速存儲(chǔ)器、或者這樣的存儲(chǔ)器的任何組合。系統(tǒng)存儲(chǔ)器604可以包括操作系統(tǒng)605和適用于運(yùn)行軟件應(yīng)用620的一個(gè)或多個(gè)程序模塊606,例如可擴(kuò)展最終一致性系統(tǒng)100的組件。例如,操作系統(tǒng)605可以適用于控制計(jì)算設(shè)備600的操作。此外,本發(fā)明的實(shí)施例可結(jié)合圖形庫、其他操作系統(tǒng)或任何其他應(yīng)用程序來實(shí)踐,并且不局限于任何特定的應(yīng)用或系統(tǒng)。由虛線608內(nèi)的那些組件示出了該基本配置。計(jì)算設(shè)備600可以具有額外的特征或功能。例如,計(jì)算設(shè)備600還可以包括諸如例如磁盤、光盤或磁帶之類的額外的數(shù)據(jù)存儲(chǔ)設(shè)備(可移動(dòng)的和/或不可移動(dòng)的)。由可移動(dòng)存儲(chǔ)設(shè)備609和不可移動(dòng)存儲(chǔ)設(shè)備610示出了這樣額外的存儲(chǔ)。
如上所述,可以將多個(gè)程序模塊和數(shù)據(jù)文件存儲(chǔ)在系統(tǒng)存儲(chǔ)器604中。當(dāng)在處理單元602上執(zhí)行時(shí),軟件應(yīng)用620可以執(zhí)行包括但不限于最終一致性方法300的一個(gè)或多個(gè)階段的過程??梢愿鶕?jù)本發(fā)明的實(shí)施例而使用的其他程序模塊可以包括以下應(yīng)用,例如電子郵件及聯(lián)系人應(yīng)用、文字處理應(yīng)用、電子表格應(yīng)用、數(shù)據(jù)庫應(yīng)用、幻燈片演示應(yīng)用、畫圖或計(jì)算機(jī)輔助應(yīng)用程序等。
此外,可以在包括分立電子元件的電路、包含邏輯門的封裝或集成的電子芯片、利用微處理器的電路、或者在包含電子元件或微處理器的單個(gè)芯片上實(shí)現(xiàn)本發(fā)明的實(shí)施例。例如,可以經(jīng)由其中所示出的每個(gè)或許多組件可以集成在單個(gè)集成電路上的片上系統(tǒng)(SOC)來實(shí)踐本發(fā)明的實(shí)施例。這樣的SOC設(shè)備可以包括一個(gè)或多個(gè)處理單元、圖形單元、通信單元、系統(tǒng)虛擬化單元、以及各種應(yīng)用功能,其全部作為單個(gè)集成電路而被集成(或“燒”)到芯片基底上。當(dāng)經(jīng)由SOC進(jìn)行操作時(shí),可以經(jīng)由在單個(gè)集成電路(芯片)上與計(jì)算設(shè)備600的其他組件集成的專用邏輯來對(duì)在本文中所描述的關(guān)于應(yīng)用620的功能進(jìn)行操作。還可以使用能夠執(zhí)行邏輯操作(例如AND、OR和NOT)的其他技術(shù)來實(shí)踐本發(fā)明的實(shí)施例,所述其他技術(shù)包括但不限于機(jī)械、光學(xué)、流體、和量子技術(shù)。另外,可以在通用計(jì)算機(jī)內(nèi)或在任何其他任何電路或系統(tǒng)中實(shí)踐本發(fā)明的實(shí)施例。
計(jì)算設(shè)備600還可以具有一個(gè)或多個(gè)輸入設(shè)備612,例如鍵盤、鼠標(biāo)、筆、語音輸入設(shè)備、觸摸輸入設(shè)備等。還可以包括輸出設(shè)備614,例如顯示器、揚(yáng)聲器、打印機(jī)等。前述設(shè)備是示例并且也可以使用其他設(shè)備。計(jì)算設(shè)備600可以包括允許與其他計(jì)算設(shè)備618進(jìn)行通信的一個(gè)或多個(gè)通信連接616。合適的通信連接616的示例包括但不限于:RF發(fā)射機(jī)、接收機(jī)和/或收發(fā)機(jī)電路;通用串行總線(USB)、并行和/或串行端口。
如在本文中所使用的術(shù)語計(jì)算機(jī)可讀介質(zhì)可以包括計(jì)算機(jī)存儲(chǔ)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)可以包括以任何用于存儲(chǔ)信息(例如,計(jì)算機(jī)可讀指示、數(shù)據(jù)結(jié)構(gòu)、或程序模塊)的方法或技術(shù)來實(shí)現(xiàn)的易失性的和非易失性的、可移動(dòng)的和不可移動(dòng)的介質(zhì)。系統(tǒng)存儲(chǔ)器604、可移動(dòng)存儲(chǔ)設(shè)備609、和不可移動(dòng)存儲(chǔ)設(shè)備610都是計(jì)算機(jī)存儲(chǔ)介質(zhì)的示例(即,存儲(chǔ)器存儲(chǔ))。計(jì)算機(jī)存儲(chǔ)介質(zhì)可以包括RAM、ROM、電可擦只讀存儲(chǔ)器(EEPROM)、閃速存儲(chǔ)器或其他存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字通用盤(DVD)或其他光存儲(chǔ)、盒式磁帶、磁帶、磁盤存儲(chǔ)器或其他磁存儲(chǔ)設(shè)備、或者可用于存儲(chǔ)信息且可以由計(jì)算機(jī)設(shè)備600訪問的任何其他制品。任何這樣的計(jì)算機(jī)存儲(chǔ)介質(zhì)都可以是計(jì)算設(shè)備600的一部分。
圖7A和7B圖示了利用其可以實(shí)踐本發(fā)明的實(shí)施例的移動(dòng)計(jì)算設(shè)備700。合適的移動(dòng)計(jì)算設(shè)備的示例包括但不限于:移動(dòng)電話、智能電話、平板計(jì)算機(jī)、平面計(jì)算機(jī)、以及膝上型計(jì)算機(jī)。在基本配置中,移動(dòng)計(jì)算設(shè)備700是具有輸入元件和輸出元件兩者的手持式計(jì)算機(jī)。移動(dòng)計(jì)算設(shè)備700通常包括顯示器705以及允許用戶將信息輸入到移動(dòng)計(jì)算設(shè)備700中的一個(gè)或多個(gè)輸入按鈕710。移動(dòng)計(jì)算設(shè)備700的顯示器705也可以充當(dāng)輸入設(shè)備(例如,觸摸屏顯示器)。如果被包括在內(nèi),則可選的側(cè)輸入元件715允許進(jìn)一步的用戶輸入。側(cè)輸入元715可以是旋轉(zhuǎn)開關(guān)、按鈕、或任何其他類型的手動(dòng)輸入元件。在可替代的實(shí)施例中,移動(dòng)計(jì)算設(shè)備700可包含更多或更少的輸入元件。例如,在一些實(shí)施例中,顯示器705可以不是觸摸屏。在另一個(gè)可替代的實(shí)施例中,移動(dòng)計(jì)算設(shè)備700是諸如蜂窩電話之類的便攜式電話系統(tǒng)。移動(dòng)計(jì)算設(shè)備700還可以包括可選的小鍵盤735??蛇x的小鍵盤735可以是物理小鍵盤或者是在觸摸屏顯示器上生成的“軟”小鍵盤。在各種實(shí)施例中,輸出元件包括用于示出圖形用戶界面(GUI)的顯示器705、視覺指示器720(例如,發(fā)光二極管)、和/或音頻換能器725(例如,揚(yáng)聲器)。在一些實(shí)施例中,移動(dòng)計(jì)算設(shè)備700包含用來向用戶提供觸覺反饋的振動(dòng)換能器。在另一個(gè)實(shí)施例中,移動(dòng)計(jì)算設(shè)備700包含用于向外部設(shè)備發(fā)送信號(hào)或者從外部設(shè)備接收信號(hào)的輸入和/或輸出端口,例如音頻輸入端(例如,麥克風(fēng)插孔)、音頻輸出端(如耳機(jī)插孔)、以及視頻輸出端(例如,HDMI端口)。
圖7B是示出了移動(dòng)計(jì)算設(shè)備的一個(gè)實(shí)施例的架構(gòu)的框圖。即,移動(dòng)計(jì)算設(shè)備700可以包含用于實(shí)現(xiàn)一些實(shí)施例的系統(tǒng)(即,架構(gòu))702。在一個(gè)實(shí)施例中,系統(tǒng)702被實(shí)現(xiàn)為能夠運(yùn)行一個(gè)或多個(gè)應(yīng)用(例如瀏覽器、電子郵件、日歷、聯(lián)系人管理器、消息傳送客戶端、游戲、以及媒體客戶端/播放器)的“智能電話”。在一些實(shí)施例中,將系統(tǒng)702集成為諸如集成的個(gè)人數(shù)字助理(PDA)和無線電話之類的計(jì)算設(shè)備。
一個(gè)或多個(gè)應(yīng)用程序765可被加載到存儲(chǔ)器762中,并且在操作系統(tǒng)764上運(yùn)行或者結(jié)合操作系統(tǒng)764運(yùn)行。應(yīng)用程序的示例包括電話撥號(hào)程序、電子郵件程序、個(gè)人信息管理(PIM)程序、文字處理程序、電子表格程序、互聯(lián)網(wǎng)瀏覽器程序、消息傳送程序等。系統(tǒng)702還包括存儲(chǔ)器762內(nèi)的非易失性存儲(chǔ)區(qū)768。非易失性存儲(chǔ)區(qū)768可以用于存儲(chǔ)如果系統(tǒng)702斷電而不應(yīng)該丟失的持續(xù)的信息。應(yīng)用程序765可以使用非易失性存儲(chǔ)區(qū)768中的信息并將信息存儲(chǔ)在非易失性存儲(chǔ)區(qū)768中,所述信息例如由電子郵件應(yīng)用等所使用的電子郵件或其他消息。同步應(yīng)用(未示出)也駐留在系統(tǒng)702上并且被編程為與駐留在主機(jī)計(jì)算機(jī)上的對(duì)應(yīng)的同步應(yīng)用進(jìn)行交互,以保持存儲(chǔ)在非易失性存儲(chǔ)區(qū)域768中的信息與存儲(chǔ)在主機(jī)計(jì)算機(jī)處的對(duì)應(yīng)的信息相同步。應(yīng)當(dāng)理解的是,包括在本文中所描述的軟件應(yīng)用620在內(nèi)的其他應(yīng)用也可被加載到存儲(chǔ)器762中并且在移動(dòng)計(jì)算設(shè)備700上運(yùn)行。
系統(tǒng)702具有可以被實(shí)現(xiàn)為一個(gè)或多個(gè)電池的電源770。電源770還可以包括外置電源,例如交流的(AC)適配器或給電池供電或充電的加電對(duì)接托架。
系統(tǒng)702還可以包括執(zhí)行發(fā)送和接收射頻通信的功能的無線電設(shè)備772。無線電設(shè)備772經(jīng)由通信載波或服務(wù)供應(yīng)商來促成系統(tǒng)702與外部世界之間的無線連通性。來往無線電設(shè)備772的傳輸是在操作系統(tǒng)764的控制下進(jìn)行的。換句話說,可以將由無線電設(shè)備772所接收的通信經(jīng)由操作系統(tǒng)764散播至應(yīng)用程序765,反之亦然。
視覺指示符720可以用于提供視覺通知和/或音頻接口774可以用于經(jīng)由音頻換能器725產(chǎn)生能夠聽到的通知。在所示出的實(shí)施例中,視覺指示符720是發(fā)光二極管(LED),而音頻換能器725是揚(yáng)聲器。這些設(shè)備可直接地耦合至電源770,使得當(dāng)被激活時(shí),即使處理器760和其他組件可以關(guān)閉以節(jié)省電池電量,這些設(shè)備也能保持通電并持續(xù)由通知機(jī)制所指示的一段時(shí)間。LED可被編程為無限期地保持通電,直到用戶采取動(dòng)作來指示該設(shè)備的通電狀態(tài)為止。音頻接口774用于向用戶提供能夠聽到的信號(hào)并且從用戶處接收能夠聽到的信號(hào)。例如,除了耦合至音頻換能器725之外,音頻接口774還可耦合至麥克風(fēng)以接收能夠聽到的輸入,例如,促進(jìn)電話會(huì)話。根據(jù)本發(fā)明的實(shí)施例,麥克風(fēng)還可以充當(dāng)音頻傳感器以促進(jìn)對(duì)通知的控制,如在下文中描述的。系統(tǒng)702還可以包括支持用于記錄靜止的圖像、視頻流等的板載相機(jī)730的操作的視頻接口776。
實(shí)現(xiàn)系統(tǒng)702的移動(dòng)計(jì)算設(shè)備700可以具有額外的特征或功能。例如,移動(dòng)計(jì)算設(shè)備700還可以包括額外的數(shù)據(jù)存儲(chǔ)設(shè)備(可移動(dòng)的和/或不可移動(dòng)的),例如磁盤、光盤、或磁帶。由非易失性存儲(chǔ)區(qū)768示出了這樣額外的存儲(chǔ)設(shè)備。
如在上文中所描述的,可以將由移動(dòng)計(jì)算設(shè)備700所生成或捕獲的數(shù)據(jù)/信息以及經(jīng)由系統(tǒng)702所存儲(chǔ)的數(shù)據(jù)/信息本地地存儲(chǔ)在移動(dòng)計(jì)算設(shè)備700上,或者可以將數(shù)據(jù)存儲(chǔ)在可以經(jīng)由無線電設(shè)備772或經(jīng)由移動(dòng)計(jì)算設(shè)備700和與移動(dòng)計(jì)算設(shè)備700相關(guān)聯(lián)的單獨(dú)的計(jì)算設(shè)備(例如,分布式計(jì)算網(wǎng)絡(luò)(例如,互聯(lián)網(wǎng))中的服務(wù)器計(jì)算機(jī))之間的有線連接由設(shè)備來訪問的任何數(shù)量的存儲(chǔ)介質(zhì)上。應(yīng)當(dāng)理解的是,可以經(jīng)由移動(dòng)計(jì)算設(shè)備700、經(jīng)由無線電772、或經(jīng)由分布式計(jì)算網(wǎng)絡(luò)來訪問這樣的數(shù)據(jù)/信息。類似地,根據(jù)公知的數(shù)據(jù)/信息傳輸和存儲(chǔ)方式(包括電子郵件和協(xié)同數(shù)據(jù)/信息共享系統(tǒng)),這樣的數(shù)據(jù)/信息可以容易地在計(jì)算設(shè)備之間傳輸以供存儲(chǔ)和使用。
在該公開中所提供的一個(gè)或多個(gè)實(shí)施例的描述或圖示旨在向本領(lǐng)域技術(shù)人員提供對(duì)主題的完整范圍的完全徹底和完整的公開,而不旨在以任何方式限制或約束所要求保護(hù)的發(fā)明的范圍。在該公開中所提供的實(shí)施例、示例、和細(xì)節(jié)被認(rèn)為足以傳達(dá)所有物,并且使得本領(lǐng)域技術(shù)人員能夠制造并使用所要求保護(hù)的發(fā)明的最佳模式。被認(rèn)為是對(duì)本領(lǐng)域技術(shù)人員公知的對(duì)結(jié)構(gòu)、資源、操作、和行為的描述可以是簡要的或者被省略,以避免使得該申請(qǐng)的主題的較少人知道的或者獨(dú)特的方面難以理解。所要求保護(hù)的發(fā)明不應(yīng)該被解釋為限于在該申請(qǐng)中所提供的任何實(shí)施例、示例、或細(xì)節(jié)。無論是共同地還是單獨(dú)地示出或描述,(結(jié)構(gòu)上和方法上兩者的)各種特征旨在選擇性地包括或省略,以產(chǎn)生具有特定組的特征的實(shí)施例。此外,可以以任何順序或者同時(shí)地執(zhí)行所示出或描述的功能和行為中的任何一個(gè)或全部。在已經(jīng)提供有本申請(qǐng)的描述和圖示之后,本領(lǐng)域技術(shù)人員可以預(yù)想落入在該申請(qǐng)中所實(shí)施的一般的發(fā)明概念的更寬泛的方面的精神內(nèi)的變型、修改和替代實(shí)施例,而不脫離所要求保護(hù)的發(fā)明的更寬泛的范圍。