本發(fā)明專利技術(shù)公開了一種數(shù)據(jù)寫請求處理方法、裝置及分布式數(shù)據(jù)存儲系統(tǒng)。其中,方法基于調(diào)用端發(fā)送的數(shù)據(jù)寫請求向存儲節(jié)點(diǎn)中寫入數(shù)據(jù),其中數(shù)據(jù)寫請求包含主請求和至少一個子請求,方法包括:對于一個子請求,調(diào)用訪問接口從全局變量中選擇待寫入數(shù)據(jù)的存儲節(jié)點(diǎn)的存儲節(jié)點(diǎn)地址,向存儲節(jié)點(diǎn)發(fā)送子請求,其中將選擇的存儲節(jié)點(diǎn)地址保存至子請求的上下文中;從子請求的上下文中提取出所選擇的存儲節(jié)點(diǎn)地址,并保存至存儲節(jié)點(diǎn)的上下文中;從存儲節(jié)點(diǎn)的上下文中提取出存儲節(jié)點(diǎn)地址,與存儲節(jié)點(diǎn)建立連接,將數(shù)據(jù)寫入到相應(yīng)的存儲節(jié)點(diǎn),能夠滿足調(diào)用端的定制化要求向指定存儲節(jié)點(diǎn)寫入數(shù)據(jù),實(shí)現(xiàn)了定制化的負(fù)載均衡,解決了KV存儲的單點(diǎn)限制。
【技術(shù)實(shí)現(xiàn)步驟摘要】
數(shù)據(jù)寫請求處理方法、裝置及分布式數(shù)據(jù)存儲系統(tǒng)
本專利技術(shù)涉及計(jì)算機(jī)網(wǎng)絡(luò)
,具體涉及一種數(shù)據(jù)寫請求處理方法、裝置及分布式數(shù)據(jù)存儲系統(tǒng)。
技術(shù)介紹
在分布式數(shù)據(jù)存儲系統(tǒng)中,一般會利用分布式組件來將調(diào)用端發(fā)送的數(shù)據(jù)寫請求轉(zhuǎn)發(fā)給存儲引擎,其中,分布式組件為反向代理服務(wù)器,具體地,可以為Nginx服務(wù)器。對于KV存儲來說,Nginx內(nèi)置的負(fù)載均衡的策略,無論是round-robin,還是ip_hash,還是url_hash,都不能實(shí)現(xiàn)根據(jù)key來進(jìn)行負(fù)載均衡的需求,舉例說明,以分布式組件采用的是1Primary-1ReplicaShard的存儲模式為例,這必然涉及到兩次寫存儲的操作,而這兩次的寫入需要是兩臺完全不同的節(jié)點(diǎn),但Nginx內(nèi)置的負(fù)載均衡策略無法滿足這樣高度定制化的需求,其根本原因在于,Nginx的負(fù)載均衡策略將存儲節(jié)點(diǎn)的地址等細(xì)節(jié)完全對外層屏蔽了,在編寫http模塊時不可能通過任何一個內(nèi)置函數(shù)拿到某個存儲節(jié)點(diǎn)的地址,也就是說這些細(xì)節(jié)對于開發(fā)者是透明的,從而限制了定制化的負(fù)載均衡策略的實(shí)現(xiàn)。
技術(shù)實(shí)現(xiàn)思路
鑒于上述問題,提出了本專利技術(shù)以便提供一種克服上述問題或者至少部分地解決上述問題的數(shù)據(jù)寫請求處理方法、數(shù)據(jù)寫請求處理裝置和相應(yīng)的分布式數(shù)據(jù)存儲系統(tǒng)。根據(jù)本專利技術(shù)的一個方面,提供了一種數(shù)據(jù)寫請求處理方法,該方法基于調(diào)用端發(fā)送的數(shù)據(jù)寫請求向存儲節(jié)點(diǎn)中寫入數(shù)據(jù),其中數(shù)據(jù)寫請求包含主請求和至少一個子請求,方法包括:對于每一個子請求,調(diào)用訪問接口從全局變量中選擇待寫入數(shù)據(jù)的存儲節(jié)點(diǎn)的存儲節(jié)點(diǎn)地址,向存儲節(jié)點(diǎn)發(fā)送子請求,其中將選擇的存儲節(jié)點(diǎn)地址保存至子請求的上下文中;從子請求的上下文中提取出所選擇的存儲節(jié)點(diǎn)地址,并保存至存儲節(jié)點(diǎn)的上下文中;從存儲節(jié)點(diǎn)的上下文中提取出存儲節(jié)點(diǎn)地址,與存儲節(jié)點(diǎn)建立連接,將數(shù)據(jù)寫入到相應(yīng)的存儲節(jié)點(diǎn)。根據(jù)本專利技術(shù)的另一方面,提供了一種數(shù)據(jù)寫請求處理裝置,該裝置基于調(diào)用端發(fā)送的數(shù)據(jù)寫請求向存儲節(jié)點(diǎn)中寫入數(shù)據(jù),其中數(shù)據(jù)寫請求包含主請求和至少一個子請求,裝置包括:用于處理子請求的處理器;用于處理子請求的處理器包括:選擇單元,適于對于每一個子請求,調(diào)用訪問接口從全局變量中選擇待寫入數(shù)據(jù)的存儲節(jié)點(diǎn)的存儲節(jié)點(diǎn)地址;子請求處理單元,適于向存儲節(jié)點(diǎn)發(fā)送子請求,其中將選擇的存儲節(jié)點(diǎn)地址保存至子請求的上下文中;提取單元,適于從子請求的上下文中提取出所選擇的存儲節(jié)點(diǎn)地址;上下文寫入單元,適于將提取出的存儲節(jié)點(diǎn)地址保存至存儲節(jié)點(diǎn)的上下文中;連接單元,適于從存儲節(jié)點(diǎn)的上下文中提取出存儲節(jié)點(diǎn)地址,與存儲節(jié)點(diǎn)建立連接;數(shù)據(jù)寫入單元,適于將數(shù)據(jù)寫入到相應(yīng)的存儲節(jié)點(diǎn)。根據(jù)本專利技術(shù)的另一方面,提供了一種分布式數(shù)據(jù)存儲系統(tǒng),包括:調(diào)用端、分布式組件和存儲節(jié)點(diǎn);其中,分布式組件包括上述數(shù)據(jù)寫請求處理裝置。根據(jù)本專利技術(shù)提供的方案,對于每一個子請求,調(diào)用訪問接口從全局變量中選擇待寫入數(shù)據(jù)的存儲節(jié)點(diǎn)的存儲節(jié)點(diǎn)地址,向存儲節(jié)點(diǎn)發(fā)送子請求,其中將選擇的存儲節(jié)點(diǎn)地址保存至子請求的上下文中,從子請求的上下文中提取出所選擇的存儲節(jié)點(diǎn)地址,并保存至存儲節(jié)點(diǎn)的上下文中,從存儲節(jié)點(diǎn)的上下文中提取出存儲節(jié)點(diǎn)地址,與存儲節(jié)點(diǎn)建立連接,將數(shù)據(jù)寫入到相應(yīng)的存儲節(jié)點(diǎn)。在本專利技術(shù)方案中,利用全局變量記錄存儲節(jié)點(diǎn)的存儲節(jié)點(diǎn)地址,而且該全局變量提供有供訪問的訪問接口,通過調(diào)用該訪問接口即可獲取待寫入數(shù)據(jù)的存儲節(jié)點(diǎn)的存儲節(jié)點(diǎn)地址,使存儲節(jié)點(diǎn)地址暴露出來,從而能夠滿足調(diào)用端的定制化要求向指定存儲節(jié)點(diǎn)寫入數(shù)據(jù),實(shí)現(xiàn)了定制化的負(fù)載均衡,解決了KV存儲的單點(diǎn)限制。上述說明僅是本專利技術(shù)技術(shù)方案的概述,為了能夠更清楚了解本專利技術(shù)的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本專利技術(shù)的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本專利技術(shù)的具體實(shí)施方式。附圖說明通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本專利技術(shù)的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:圖1示出了根據(jù)本專利技術(shù)一個實(shí)施例的數(shù)據(jù)寫請求處理方法的流程示意圖;圖2示出了根據(jù)本專利技術(shù)另一個實(shí)施例的數(shù)據(jù)寫請求處理方法的流程示意圖;圖3示出了根據(jù)本專利技術(shù)一個實(shí)施例的數(shù)據(jù)寫請求處理裝置的結(jié)構(gòu)示意圖;圖4示出了根據(jù)本專利技術(shù)另一個實(shí)施例的數(shù)據(jù)寫請求處理裝置的結(jié)構(gòu)示意圖;圖5示出了根據(jù)本專利技術(shù)一個實(shí)施例的分布式數(shù)據(jù)存儲系統(tǒng)的結(jié)構(gòu)示意圖。具體實(shí)施方式下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。本專利技術(shù)提出了一種數(shù)據(jù)寫請求處理方法及裝置,適用于分布式數(shù)據(jù)存儲系統(tǒng),該系統(tǒng)包括:客戶端、Linux虛擬服務(wù)器集群(LVS)、分布式組件(HustDBHA,簡稱HA)和存儲引擎(HustDB)。其中,分布式組件為反向代理服務(wù)器,具體可以是Nginx服務(wù)器。客戶端和LVS可作為調(diào)用端,例如,客戶端和LVS之間由于業(yè)務(wù)交互產(chǎn)生數(shù)據(jù),LVS發(fā)送數(shù)據(jù)寫請求,期望將業(yè)務(wù)相關(guān)數(shù)據(jù)寫入存儲節(jié)點(diǎn)中。另外,在一些特殊業(yè)務(wù)場景中,調(diào)用端可能為其它上層應(yīng)用或調(diào)用程序,例如,分布式組件內(nèi)部的調(diào)用程序。調(diào)用端具體與實(shí)際業(yè)務(wù)情況相關(guān)聯(lián),本專利技術(shù)對此不作限制。在該分布式數(shù)據(jù)存儲系統(tǒng)中,將分布式組件與存儲引擎分離,存儲引擎只負(fù)責(zé)數(shù)據(jù)存儲,以及對外提供http接口,以供分布式組件根據(jù)所提供的http接口向?qū)?yīng)的存儲節(jié)點(diǎn)寫入數(shù)據(jù),其中,存儲引擎包括多個存儲節(jié)點(diǎn),各個存儲節(jié)點(diǎn)是相互獨(dú)立的,存儲節(jié)點(diǎn)彼此之間不會直接進(jìn)行通信,從而降低了存儲引擎的復(fù)雜度。存儲節(jié)點(diǎn)可以為鍵值(Key-Value,以下簡稱:KV)存儲數(shù)據(jù)庫,這是一種NoSQL(非關(guān)系型數(shù)據(jù)庫)模型,其數(shù)據(jù)按照鍵值對的形式進(jìn)行組織、索引和存儲。KV存儲非常適合不涉及過多數(shù)據(jù)關(guān)系業(yè)務(wù)關(guān)系的業(yè)務(wù)數(shù)據(jù),同時能有效減少讀寫磁盤的次數(shù),比SQL數(shù)據(jù)庫存儲擁有更好的讀寫性能。目前在生產(chǎn)環(huán)境,使用較多的K-V存儲有Memcached,Redis,LevelDB等。在通信方面,主要使用專有的二進(jìn)制協(xié)議,這樣做的好處是協(xié)議解析的的性能比較高,不足的地方在于通用性差,需要為不同的語言實(shí)現(xiàn)專門的客戶端,開發(fā)成本高,同時二進(jìn)制協(xié)議的可調(diào)試性差,導(dǎo)致定位問題困難;在架構(gòu)設(shè)計(jì)方面,上述存儲的分布式基本都需要客戶端來實(shí)現(xiàn),Redis從3.0之后開始支持集群,但從生產(chǎn)環(huán)境中的測試情況來看,單點(diǎn)故障導(dǎo)致集群不可用的情況依然存在,且Redis的定位是緩存,對于持久化的支持程度有限。本專利技術(shù)主要是對系統(tǒng)中的分布式組件的功能進(jìn)行的改進(jìn),分布式組件向存儲引擎寫入數(shù)據(jù)時,能夠根據(jù)Key來進(jìn)行負(fù)載均衡,將數(shù)據(jù)寫入指定的存儲節(jié)點(diǎn)。分布式組件作為客戶端與存儲引擎之間的反向代理,對客戶端屏蔽負(fù)載均衡的細(xì)節(jié),保證存儲節(jié)點(diǎn)的http接口的透明性。當(dāng)某一個存儲節(jié)點(diǎn)宕機(jī)時,HA會自動對數(shù)據(jù)寫請求進(jìn)行負(fù)載均衡,保證整個系統(tǒng)依然可用,從而解決KV存儲的單點(diǎn)限制。另外,分布式組件中的每個節(jié)點(diǎn)都是獨(dú)立的,當(dāng)某一HA節(jié)點(diǎn)宕機(jī)時,LVS會自動將數(shù)據(jù)寫請求發(fā)送至分布式組件中的其他可用的本文檔來自技高網(wǎng)...

【技術(shù)保護(hù)點(diǎn)】
一種數(shù)據(jù)寫請求處理方法,所述方法基于調(diào)用端發(fā)送的數(shù)據(jù)寫請求向存儲節(jié)點(diǎn)中寫入數(shù)據(jù),其中數(shù)據(jù)寫請求包含主請求和至少一個子請求,所述方法包括:對于每一個子請求,調(diào)用訪問接口從全局變量中選擇待寫入數(shù)據(jù)的存儲節(jié)點(diǎn)的存儲節(jié)點(diǎn)地址,向所述存儲節(jié)點(diǎn)發(fā)送子請求,其中將選擇的存儲節(jié)點(diǎn)地址保存至子請求的上下文中;從子請求的上下文中提取出所選擇的存儲節(jié)點(diǎn)地址,并保存至所述存儲節(jié)點(diǎn)的上下文中;從所述存儲節(jié)點(diǎn)的上下文中提取出存儲節(jié)點(diǎn)地址,與存儲節(jié)點(diǎn)建立連接,將數(shù)據(jù)寫入到相應(yīng)的存儲節(jié)點(diǎn)。
【技術(shù)特征摘要】
1.一種數(shù)據(jù)寫請求處理方法,所述方法基于調(diào)用端發(fā)送的數(shù)據(jù)寫請求向存儲節(jié)點(diǎn)中寫入數(shù)據(jù),其中數(shù)據(jù)寫請求包含主請求和至少一個子請求,所述方法包括:對于每一個子請求,調(diào)用訪問接口從全局變量中選擇待寫入數(shù)據(jù)的存儲節(jié)點(diǎn)的存儲節(jié)點(diǎn)地址,向所述存儲節(jié)點(diǎn)發(fā)送子請求,其中將選擇的存儲節(jié)點(diǎn)地址保存至子請求的上下文中;從子請求的上下文中提取出所選擇的存儲節(jié)點(diǎn)地址,并保存至所述存儲節(jié)點(diǎn)的上下文中;從所述存儲節(jié)點(diǎn)的上下文中提取出存儲節(jié)點(diǎn)地址,與存儲節(jié)點(diǎn)建立連接,將數(shù)據(jù)寫入到相應(yīng)的存儲節(jié)點(diǎn)。2.根據(jù)權(quán)利要求1所述的方法,其中,在發(fā)送子請求之前,所述方法還包括:加載配置文件,獲取存儲節(jié)點(diǎn)地址列表相關(guān)的配置信息;將存儲節(jié)點(diǎn)地址列表保存到所述全局變量中,生成所述全局變量的訪問接口。3.根據(jù)權(quán)利要求1或2所述的方法,其中,在發(fā)送子請求之前,所述方法還包括:獲取主請求的上下文;判斷所述主請求的上下文是否已創(chuàng)建;若所述主請求的上下文未創(chuàng)建,創(chuàng)建所述主請求的上下文,并將所述主請求的上下文與主請求關(guān)聯(lián)。4.根據(jù)權(quán)利要求3所述的方法,其中,在發(fā)送子請求之前,所述方法還包括:若所述主請求的上下文已創(chuàng)建,判斷待寫入數(shù)據(jù)的存儲節(jié)點(diǎn)是否為空;若是,則向發(fā)送數(shù)據(jù)寫請求的調(diào)用端返回響應(yīng)結(jié)果;若否,則執(zhí)行發(fā)送子請求的步驟。5.根據(jù)權(quán)利要求1-4中任一項(xiàng)所述的方法,其中,在將數(shù)據(jù)寫入到相應(yīng)的存儲節(jié)點(diǎn)之后,所述方法還包括:調(diào)用子請求完成回調(diào)函數(shù),回到主循環(huán)過程中;在主循環(huán)過程中,調(diào)用用于處理子請求的處理器的入口函數(shù),利用所述用于處理子請求的處理器處理下一個子...
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:徐銳波,程卓,
申請(專利權(quán))人:北京奇虎科技有限公司,
類型:發(fā)明
國別省市:北京,11
還沒有人留言評論。發(fā)表了對其他瀏覽者有用的留言會獲得科技券。