專利名稱::一種數(shù)據(jù)讀寫方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計算機(jī)
技術(shù)領(lǐng)域:
,尤其涉及ー種數(shù)據(jù)讀寫方法及系統(tǒng)。
背景技術(shù):
:隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,web相關(guān)產(chǎn)品越來越多,競爭也越來越激烈,在服務(wù)器宕機(jī)、互聯(lián)網(wǎng)數(shù)據(jù)中興(IDC)故障、網(wǎng)絡(luò)故障等情況下,web產(chǎn)品是否仍能提供高質(zhì)量的服務(wù),是用戶在選擇web產(chǎn)品時優(yōu)先考慮的因素之一,換言之,提供高可靠性的容災(zāi)服務(wù),是web產(chǎn)品制勝的一大法寶?,F(xiàn)有大多數(shù)web產(chǎn)品的數(shù)據(jù)存儲服務(wù)都是采用主備方式來容災(zāi),或者通過主寫備讀的方式來處理,但是,現(xiàn)有的主備方式只通過多個備用設(shè)備保證了數(shù)據(jù)讀取容災(zāi),而向主用設(shè)備寫數(shù)據(jù)仍存在單點隱患,一旦主用設(shè)備或其所在的IDC出現(xiàn)故障,就會導(dǎo)致數(shù)據(jù)寫失敗,從而會嚴(yán)重降低服務(wù)質(zhì)量并影響用戶體驗。
發(fā)明內(nèi)容有鑒于此,本發(fā)明的主要目的在于提供ー種數(shù)據(jù)讀寫方法及系統(tǒng),能夠提高數(shù)據(jù)寫服務(wù)的可靠性,提高服務(wù)質(zhì)量及用戶體驗。為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的ー種數(shù)據(jù)讀寫方法,劃分多個分組,每個分組均能實現(xiàn)讀服務(wù)和寫服務(wù),該方法包括用戶需要讀寫數(shù)據(jù)時,查找就近分組;判斷查找到的就近分組是否可用,判定查找到的就近分組可用,則訪問所述就近分組,通過相應(yīng)的分組接ロ進(jìn)行數(shù)據(jù)讀寫;判定查找到的就近分組不可用,則訪問其他分組,通過相應(yīng)的分組接ロ進(jìn)行數(shù)據(jù)讀寫。該方法還包括數(shù)據(jù)在分組存儲后,所述分組有選擇性地向所述分組以外的至少一個分組同步所述存儲的數(shù)據(jù)。該方法還包括在向分組寫入數(shù)據(jù)的過程中,分組接ロ或接ロ鏈路發(fā)生故障,則所述分組接ロ向其他分組接ロ轉(zhuǎn)發(fā)需要寫入的數(shù)據(jù),或者,切換到其他分組接ロ寫入數(shù)據(jù)。ー種數(shù)據(jù)讀寫系統(tǒng),包括控制模塊、多個分組、以及與分組相對應(yīng)的分組接ロ;其中,所述控制模塊,用于在用戶需要讀寫數(shù)據(jù)時,查找就近分組,并判斷查找到的就近分組是否可用,判定查找到的就近分組可用,則訪問所述就近分組,通過相應(yīng)的分組接ロ進(jìn)行數(shù)據(jù)讀寫;判定查找到的就近分組不可用,則訪問其他分組,通過相應(yīng)的分組接ロ進(jìn)行數(shù)據(jù)讀寫。所述每個分組至少包括讀服務(wù)和寫服務(wù),該方法還包括數(shù)據(jù)通過寫服務(wù)在分組存儲后,所述分組的寫服務(wù)有選擇性地向所述分組以外的至少ー個分組的寫服務(wù)同步所述存儲的數(shù)據(jù)。所述分組接ロ,還用于在分組接ロ或接ロ鏈路發(fā)生故障吋,向其他分組接ロ轉(zhuǎn)發(fā)需要寫入的數(shù)據(jù)。所述控制模塊,還用于在分組寫入數(shù)據(jù)的過程中,分組接ロ或接ロ鏈路發(fā)生故障時,控制切換到其他分組接ロ寫入數(shù)據(jù)。所述分組包括寫服務(wù)、讀服務(wù)、主庫、備庫和緩存;其中,數(shù)據(jù)寫入時,寫服務(wù)向主庫寫入數(shù)據(jù),數(shù)據(jù)寫入后,主庫向備庫同步數(shù)據(jù),數(shù)據(jù)讀取吋,讀服務(wù)首先從緩存中讀取數(shù)據(jù),如果緩存沒有,則從備庫讀取數(shù)據(jù),返回結(jié)果的同時將該數(shù)據(jù)同步到緩存中,以供下次讀取。所述分組包括寫服務(wù)、讀服務(wù)、緩存和數(shù)據(jù)庫;其中,應(yīng)用程序調(diào)用寫服務(wù),TTC數(shù)據(jù)會自動同步到數(shù)據(jù)庫中,調(diào)用讀服務(wù)時,如果TTC緩存中有則直接返回,如果沒有則向數(shù)據(jù)庫查詢,然后將結(jié)果更新到緩存再返回。所述分組包括寫接ロ、讀接ロ、數(shù)據(jù)庫、至少ー個讀服務(wù)和與讀服務(wù)對應(yīng)的緩存;其中,寫操作直接通過寫接ロ更新到數(shù)據(jù)庫中,寫接ロ同時將寫消息轉(zhuǎn)發(fā)給讀接ロー份,讀接ロ將該寫消息轉(zhuǎn)發(fā)到對應(yīng)的讀服務(wù),以便將該寫消息更新到緩存中。本發(fā)明提出的數(shù)據(jù)讀寫方法及系統(tǒng),劃分多個分組,每個分組均能實現(xiàn)讀服務(wù)和寫服務(wù),用戶需要讀寫數(shù)據(jù)時,查找就近分組;判斷查找到的就近分組是否可用,判定查找到的就近分組可用,則訪問所述就近分組,通過相應(yīng)的分組接ロ進(jìn)行數(shù)據(jù)讀寫;判定查找到的就近分組不可用,則訪問其他分組,通過相應(yīng)的分組接ロ進(jìn)行數(shù)據(jù)讀寫。本發(fā)明能夠提高數(shù)據(jù)寫服務(wù)的可靠性,提高服務(wù)質(zhì)量及用戶體驗,且便于擴(kuò)容升級。圖1為本發(fā)明數(shù)據(jù)讀寫方法流程示意圖;圖2為Memchache緩存方式的原理示意圖;圖3為TTC緩存方式的原理示意圖;圖4為全量分離緩存方式的原理示意圖;圖5為本發(fā)明以兩個分組為例,相應(yīng)于圖2的系統(tǒng)結(jié)構(gòu)示意圖;圖6為本發(fā)明以兩個分組為例,相應(yīng)于圖3的系統(tǒng)結(jié)構(gòu)示意圖;圖7為本發(fā)明以兩個分組為例,相應(yīng)于圖4的系統(tǒng)結(jié)構(gòu)示意圖。具體實施例方式本發(fā)明的基本思想是劃分多個分組,每個分組均能實現(xiàn)讀服務(wù)和寫服務(wù),用戶需要讀寫數(shù)據(jù)時,查找就近分組;判斷查找到的就近分組是否可用,判定查找到的就近分組可用,則訪問所述就近分組,通過相應(yīng)的分組接ロ進(jìn)行數(shù)據(jù)讀寫;判定查找到的就近分組不可用,則訪問其他分組,通過相應(yīng)的分組接ロ進(jìn)行數(shù)據(jù)讀寫。本發(fā)明結(jié)合讀寫分離、分組(set)模型、分布式策略,針對海量處理、高可靠性等特點提供了一個完整的數(shù)據(jù)存儲方案,本發(fā)明中,分組是ー組相關(guān)的資源的組合,可以提供相對固定的一定數(shù)量的用戶服務(wù),也是ー個部署単位。圖1為本發(fā)明數(shù)據(jù)讀寫方法流程示意圖,如圖1所示,該方法包括步驟101:用戶需要讀寫數(shù)據(jù)。步驟102:查找就近分組。本發(fā)明中,劃分多個分組,每個分組均能實現(xiàn)讀服務(wù)和寫服務(wù),且每個分組有ー個唯一編號,存儲數(shù)據(jù)時每個數(shù)據(jù)項的編號(key)都以其分組編號為前綴,這樣可以保證數(shù)據(jù)的全局卩隹一'注。步驟103:判斷查找到的就近分組是否可用,如果查找到的就近分組可用,執(zhí)行步驟104;如果查找到的就近分組不可用,則執(zhí)行步驟105。需要說明的是,查找到的就近分組可以為ー個也可以為多個,查找到多個就近分組時,依次對各個就近分組進(jìn)行判斷,直到找到可用的就近分組或遍歷所有查找到的就近分組,停止判斷。步驟104:訪問所述就近分組,進(jìn)行數(shù)據(jù)讀寫。步驟105:訪問其他分組,進(jìn)行數(shù)據(jù)讀寫。需要說明的是,本發(fā)明中,數(shù)據(jù)在某分組存儲后,該分組可以有選擇性地向該分組以外的至少ー個分組同步所述存儲的數(shù)據(jù),并有同步失敗的重做機(jī)制,例如,該分組將同步失敗的ニ進(jìn)制協(xié)議包記錄到文件中,文件的格式為開始標(biāo)記(Oxfd58646c)+unix時間戳+包長+消息包+結(jié)束標(biāo)記(0x6c6458fd),文件名為IP地址+端ロ+同步方式(tcp為I或udp為2)+日期+小時(0-23)+序列號(0-3,因為每15分鐘ー個文件),然后有消息同步工具根據(jù)文件名和文件內(nèi)的內(nèi)容進(jìn)行實時同步,每同步ー個消息包,記錄該文件下ー個協(xié)議包的文件行數(shù),以便同步工具重啟時,可以直接從該行開始處理;如果已經(jīng)處理到最后ー行,毎秒檢查該文件是否有新包寫入,直至有下一個失敗文件產(chǎn)生;如果同步協(xié)議包同步失敗,則告警,并不斷重試直至成功。需要說明的是,如果在向分組寫入數(shù)據(jù)的過程中,分組接ロ或接ロ鏈路發(fā)生故障,則該分組接ロ需要向其他分組接ロ轉(zhuǎn)發(fā)需要寫入的數(shù)據(jù),或者,系統(tǒng)切換到其他分組接ロ寫入數(shù)據(jù)。一般的,將數(shù)據(jù)的讀寫服務(wù)分離,使讀服務(wù)或?qū)懛?wù)都方便各自擴(kuò)展,讀寫分離根據(jù)業(yè)務(wù)不同主要有下面三種方式圖2為Memchache緩存方式的原理示意圖,如圖2所示,數(shù)據(jù)寫入時,寫服務(wù)向主庫寫入數(shù)據(jù),數(shù)據(jù)寫入后,主庫向備庫同步數(shù)據(jù),數(shù)據(jù)讀取吋,讀服務(wù)首先從緩存中讀取數(shù)據(jù),如果緩存沒有,則從備庫讀取數(shù)據(jù),返回結(jié)果的同時將該數(shù)據(jù)同步到緩存中,以供下次讀取。圖3為TTC(tencenttablecache)緩存方式的原理示意圖,如圖3所示,TTC為公司的數(shù)據(jù)庫緩存服務(wù),有獨立的接口和api,應(yīng)用程序調(diào)用寫服務(wù),TTC數(shù)據(jù)會自動同步到數(shù)據(jù)庫中,調(diào)用讀服務(wù)時,如果TTC緩存中有則直接返回,如果沒有則向數(shù)據(jù)庫(DB)查詢,然后將結(jié)果更新到緩存再返回。圖4為全量分離緩存方式的原理示意圖,如圖4所示,寫操作直接通過左邊的寫接ロ更新到數(shù)據(jù)庫中,寫接ロ同時將寫消息轉(zhuǎn)發(fā)給讀接ロー份,讀接ロ將該寫消息轉(zhuǎn)發(fā)到對應(yīng)的讀服務(wù),以便將該寫消息更新到緩存(cache)中,如果寫接ロ向讀接ロ寫失敗,則記錄同步文件,進(jìn)行重做,讀操作側(cè)直接通過讀接ロ到對應(yīng)的讀服務(wù)進(jìn)行信息的讀取。本發(fā)明還相應(yīng)地提出ー種數(shù)據(jù)讀寫系統(tǒng),該系統(tǒng)包括控制模塊、多個分組、以及與分組相對應(yīng)的分組接ロ;其中,所述控制模塊,用于在用戶需要讀寫數(shù)據(jù)時,查找就近分組,并判斷查找到的就近分組是否可用,判定查找到的就近分組可用,則訪問所述就近分組,通過相應(yīng)的分組接ロ進(jìn)行數(shù)據(jù)讀寫;判定查找到的就近分組不可用,則訪問其他分組,通過相應(yīng)的分組接ロ進(jìn)行數(shù)據(jù)讀寫。所述每個分組至少包括讀服務(wù)和寫服務(wù),該方法還包括數(shù)據(jù)通過寫服務(wù)在分組存儲后,所述分組的寫服務(wù)有選擇性地向所述分組以外的至少ー個分組的寫服務(wù)同步所述存儲的數(shù)據(jù)。所述分組接ロ,還用于在分組接ロ或接ロ鏈路發(fā)生故障吋,向其他分組接ロ轉(zhuǎn)發(fā)需要寫入的數(shù)據(jù)。所述控制模塊,還用于在分組寫入數(shù)據(jù)的過程中,分組接ロ或接ロ鏈路發(fā)生故障時,控制切換到其他分組接ロ寫入數(shù)據(jù)。所述分組包括寫服務(wù)、讀服務(wù)、主庫、備庫和緩存;其中,數(shù)據(jù)寫入時,寫服務(wù)向主庫寫入數(shù)據(jù),數(shù)據(jù)寫入后,主庫向備庫同步數(shù)據(jù),數(shù)據(jù)讀取吋,讀服務(wù)首先從緩存中讀取數(shù)據(jù),如果緩存沒有,則從備庫讀取數(shù)據(jù),返回結(jié)果的同時將該數(shù)據(jù)同步到緩存中,以供下次讀取。所述分組包括寫服務(wù)、讀服務(wù)、緩存和數(shù)據(jù)庫;其中,應(yīng)用程序調(diào)用寫服務(wù),TTC數(shù)據(jù)會自動同步到數(shù)據(jù)庫中,調(diào)用讀服務(wù)時,如果TTC緩存中有則直接返回,如果沒有則向數(shù)據(jù)庫查詢,然后將結(jié)果更新到緩存再返回。所述分組包括寫服務(wù)、讀服務(wù)、數(shù)據(jù)庫、至少一個讀接口和與讀接ロ對應(yīng)的緩存;其中,寫操作直接通過左邊的寫接ロ更新到數(shù)據(jù)庫中,寫接ロ同時將寫消息轉(zhuǎn)發(fā)給讀接ロー份,讀接ロ將該寫消息轉(zhuǎn)發(fā)到對應(yīng)的讀服務(wù),以便將該寫消息更新到緩存中,如果寫接ロ向讀接ロ寫失敗,則記錄同步文件,進(jìn)行重做,讀操作側(cè)直接通過讀接ロ到對應(yīng)的讀服務(wù)進(jìn)行信息的讀取。以兩個分組為例,相應(yīng)于圖2,本發(fā)明數(shù)據(jù)讀寫系統(tǒng)的結(jié)構(gòu)如圖5所示,分組接ロI與分組I的讀服務(wù)和寫服務(wù)之間存在鏈接,分組接ロ2與分組2的讀服務(wù)和寫服務(wù)之間存在鏈接,分組接ロI和分組接ロ2也可以分別與分組2和分組I的讀服務(wù)和寫服務(wù)之間存在鏈接,并且,分組I和分組2的寫服務(wù)之間存在鏈接,用于組間同歩。以兩個分組為例,相應(yīng)于圖3,本發(fā)明數(shù)據(jù)讀寫系統(tǒng)的結(jié)構(gòu)如圖6所示,分組接ロ3與分組3的讀服務(wù)和寫服務(wù)之間存在鏈接,分組接ロ4與分組4的讀服務(wù)和寫服務(wù)之間存在鏈接,分組接ロ3和分組接ロ4也可以分別與分組4和分組3的讀服務(wù)和寫服務(wù)之間存在鏈接,并且,分組3和分組4的寫服務(wù)之間存在鏈接,用于組間同歩。以兩個分組為例,相應(yīng)于圖4,本發(fā)明數(shù)據(jù)讀寫系統(tǒng)的結(jié)構(gòu)如圖7所示,分組接ロ5與分組5的讀服務(wù)和寫服務(wù)之間存在鏈接,分組接ロ6與分組6的讀服務(wù)和寫服務(wù)之間存在鏈接,分組接ロ5和分組接ロ6也可以分別與分組6和分組5的讀服務(wù)和寫服務(wù)之間存在鏈接,并且,分組5和分組6的寫服務(wù)之間存在鏈接,用于組間同歩。可以看出,本發(fā)明通過將讀寫服務(wù)按分組模型進(jìn)行了分布式部署,用戶讀寫數(shù)據(jù)時,優(yōu)先就近訪問服務(wù)分組,提高了性能;就近分組不可用時,可以訪問其他分組,提高了服務(wù)質(zhì)量,從而,運用本發(fā)明中提供的技術(shù)實現(xiàn)方案,可以實現(xiàn)高性能、高可靠性的數(shù)據(jù)讀寫服務(wù),并且可以方便擴(kuò)容升級。以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護(hù)范圍。權(quán)利要求1.一種數(shù)據(jù)讀寫方法,其特征在于,劃分多個分組,每個分組均能實現(xiàn)讀服務(wù)和寫服務(wù),該方法包括用戶需要讀寫數(shù)據(jù)時,查找就近分組;判斷查找到的就近分組是否可用,判定查找到的就近分組可用,則訪問所述就近分組,通過相應(yīng)的分組接口進(jìn)行數(shù)據(jù)讀寫;判定查找到的就近分組不可用,則訪問其他分組,通過相應(yīng)的分組接口進(jìn)行數(shù)據(jù)讀寫。2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)讀寫方法,其特征在于,該方法還包括數(shù)據(jù)在分組存儲后,所述分組有選擇性地向所述分組以外的至少一個分組同步所述存儲的數(shù)據(jù)。3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)讀寫方法,其特征在于,該方法還包括在向分組寫入數(shù)據(jù)的過程中,分組接口或接口鏈路發(fā)生故障,則所述分組接口向其他分組接口轉(zhuǎn)發(fā)需要寫入的數(shù)據(jù),或者,切換到其他分組接口寫入數(shù)據(jù)。4.一種數(shù)據(jù)讀寫系統(tǒng),其特征在于,該系統(tǒng)包括控制模塊、多個分組、以及與分組相對應(yīng)的分組接口;其中,所述控制模塊,用于在用戶需要讀寫數(shù)據(jù)時,查找就近分組,并判斷查找到的就近分組是否可用,判定查找到的就近分組可用,則訪問所述就近分組,通過相應(yīng)的分組接口進(jìn)行數(shù)據(jù)讀寫;判定查找到的就近分組不可用,則訪問其他分組,通過相應(yīng)的分組接口進(jìn)行數(shù)據(jù)讀與。5.根據(jù)權(quán)利要求4所述的數(shù)據(jù)讀寫系統(tǒng),其特征在于,所述每個分組至少包括讀服務(wù)和寫服務(wù),該方法還包括數(shù)據(jù)通過寫服務(wù)在分組存儲后,所述分組的寫服務(wù)有選擇性地向所述分組以外的至少一個分組的寫服務(wù)同步所述存儲的數(shù)據(jù)。6.根據(jù)權(quán)利要求4所述的數(shù)據(jù)讀寫系統(tǒng),其特征在于,所述分組接口,還用于在分組接口或接口鏈路發(fā)生故障時,向其他分組接口轉(zhuǎn)發(fā)需要寫入的數(shù)據(jù)。7.根據(jù)權(quán)利要求4所述的數(shù)據(jù)讀寫系統(tǒng),其特征在于,所述控制模塊,還用于在分組寫入數(shù)據(jù)的過程中,分組接口或接口鏈路發(fā)生故障時,控制切換到其他分組接口寫入數(shù)據(jù)。8.根據(jù)權(quán)利要求4至7任一項所述的數(shù)據(jù)讀寫方法,其特征在于,所述分組包括寫服務(wù)、讀服務(wù)、主庫、備庫和緩存;其中,數(shù)據(jù)寫入時,寫服務(wù)向主庫寫入數(shù)據(jù),數(shù)據(jù)寫入后,主庫向備庫同步數(shù)據(jù),數(shù)據(jù)讀取時,讀服務(wù)首先從緩存中讀取數(shù)據(jù),如果緩存沒有,則從備庫讀取數(shù)據(jù),返回結(jié)果的同時將該數(shù)據(jù)同步到緩存中,以供下次讀取。9.根據(jù)權(quán)利要求4至7任一項所述的數(shù)據(jù)讀寫方法,其特征在于,所述分組包括寫服務(wù)、讀服務(wù)、緩存和數(shù)據(jù)庫;其中,應(yīng)用程序調(diào)用寫服務(wù),TTC數(shù)據(jù)會自動同步到數(shù)據(jù)庫中,調(diào)用讀服務(wù)時,如果TTC緩存中有則直接返回,如果沒有則向數(shù)據(jù)庫查詢,然后將結(jié)果更新到緩存再返回。10.根據(jù)權(quán)利要求4至7任一項所述的數(shù)據(jù)讀寫方法,其特征在于,所述分組包括寫接口、讀接口、數(shù)據(jù)庫、至少一個讀服務(wù)和與讀服務(wù)對應(yīng)的緩存;其中,寫操作直接通過寫接口更新到數(shù)據(jù)庫中,寫接口同時將寫消息轉(zhuǎn)發(fā)給讀接口一份,讀接口將該寫消息轉(zhuǎn)發(fā)到對應(yīng)的讀服務(wù),以便將該寫消息更新到緩存中。全文摘要本發(fā)明公開了一種數(shù)據(jù)讀寫方法,包括劃分多個分組,每個分組均能實現(xiàn)讀服務(wù)和寫服務(wù),用戶需要讀寫數(shù)據(jù)時,查找就近分組;判斷查找到的就近分組是否可用,判定查找到的就近分組可用,則訪問所述就近分組,通過相應(yīng)的分組接口進(jìn)行數(shù)據(jù)讀寫;判定查找到的就近分組不可用,則訪問其他分組,通過相應(yīng)的分組接口進(jìn)行數(shù)據(jù)讀寫。本發(fā)明還相應(yīng)地公開了一種數(shù)據(jù)讀寫系統(tǒng)。本發(fā)明能夠提高數(shù)據(jù)寫服務(wù)的可靠性,提高服務(wù)質(zhì)量及用戶體驗,且便于擴(kuò)容升級。文檔編號G06F11/07GK102999395SQ20111026810公開日2013年3月27日申請日期2011年9月9日優(yōu)先權(quán)日2011年9月9日發(fā)明者閆清嶺,沃英杰,范禹,戴魏巍申請人:騰訊科技(北京)有限公司