欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

nosql機(jī)制,為什么使用NoSQL

為什么大部分NoSQL不提供分布式事務(wù)

像MongoDB, Cassandra, HBase, DynamoDB, 和

成都創(chuàng)新互聯(lián)2013年開(kāi)創(chuàng)至今,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元尼瀘西做網(wǎng)站,已為上家服務(wù),為尼瀘西各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):18982081108

Riak這些NoSQL缺乏傳統(tǒng)的原子事務(wù)機(jī)制,所謂原子事務(wù)機(jī)制是可以保證一系列寫(xiě)操作要么全部完成,要么全部不會(huì)完成,不會(huì)發(fā)生只完成一系列中一兩個(gè)

寫(xiě)操作;因?yàn)閿?shù)據(jù)庫(kù)不提供這種事務(wù)機(jī)制支持,開(kāi)發(fā)者需要自己編寫(xiě)代碼來(lái)確保一系列寫(xiě)操作的事務(wù)機(jī)制,比較復(fù)雜和測(cè)試。

這些NoSQL數(shù)據(jù)庫(kù)不提供事務(wù)機(jī)制原因在于其分布式特點(diǎn),一系列寫(xiě)操作中訪(fǎng)問(wèn)的數(shù)據(jù)可能位于不同的分區(qū)服務(wù)器,這樣的事務(wù)就變成分布式事務(wù),在分

布式事務(wù)中實(shí)現(xiàn)原子性需要彼此協(xié)調(diào),而協(xié)調(diào)是耗費(fèi)時(shí)間的,每臺(tái)機(jī)器在一個(gè)大事務(wù)過(guò)程中必須依次確認(rèn),這就需要一種協(xié)議確保一個(gè)事務(wù)中沒(méi)有任何一臺(tái)機(jī)器寫(xiě)操

作失敗。

這種協(xié)調(diào)是昂貴的,會(huì)增加延遲時(shí)間,關(guān)鍵問(wèn)題是,當(dāng)協(xié)調(diào)沒(méi)有完成時(shí),其他操作是不能讀取事務(wù)中寫(xiě)操作結(jié)果的,這是因?yàn)槭聞?wù)的all-or-

nothing原理導(dǎo)致,萬(wàn)一協(xié)調(diào)過(guò)程發(fā)現(xiàn)某個(gè)寫(xiě)操作不能完成,那么需要將其他寫(xiě)操作成功的進(jìn)行回滾。針對(duì)分布式事務(wù)的分布式協(xié)調(diào)對(duì)整體數(shù)據(jù)庫(kù)性能有嚴(yán)重

影響,不只是吞吐量還包括延遲時(shí)間,這樣大部分NoSQL數(shù)據(jù)庫(kù)因?yàn)樾阅軉?wèn)題就選擇不提供分布式事務(wù)。

MongoDB, Riak, HBase, 和 Cassandra提供基于單一鍵的事務(wù),這是因?yàn)樗行畔⒍己鸵粋€(gè)鍵key有關(guān),這個(gè)鍵是存儲(chǔ)在單個(gè)服務(wù)器上,這樣基于單鍵的事務(wù)不會(huì)帶來(lái)復(fù)雜的分布式協(xié)調(diào)。

那么看來(lái)擴(kuò)展性性能和分布式事務(wù)是一對(duì)矛盾,總要有取舍?實(shí)際上是不完全是,現(xiàn)在完全有可能提供高擴(kuò)展的性能同時(shí)提供分布式原子事務(wù)。

FIT是這樣一個(gè)在分布式系統(tǒng)提供原子事務(wù)的策略,在fairness公平性, isolation隔離性, 和throughput吞吐量(簡(jiǎn)稱(chēng)FIT)可以權(quán)衡。

一個(gè)支持分布式事務(wù)的可伸縮分布式系統(tǒng)能夠完成這三個(gè)屬性中兩個(gè),公平是事務(wù)之間不會(huì)相互影響造成延遲;隔離性提供一種幻覺(jué)好像整個(gè)數(shù)據(jù)庫(kù)只有它自

己一個(gè)事務(wù),隔離性保證當(dāng)任何同時(shí)發(fā)生的事務(wù)發(fā)生沖突時(shí),能夠保證彼此能看到彼此的寫(xiě)操作結(jié)果,因此減輕了程序員為避免事務(wù)讀寫(xiě)沖突的強(qiáng)邏輯推理要求;吞

吐量是指每單元時(shí)間數(shù)據(jù)庫(kù)能夠并發(fā)處理多少事務(wù)。

FIT是如下進(jìn)行權(quán)衡:

保證公平性fairness 和隔離性isolation, 但是犧牲吞吐量

保證公平性fairness和吞吐量, 犧牲隔離性isolation

保證隔離性isolation和吞吐量throughput, 但是犧牲公平性fairness.

犧牲公平性:放棄公平性,數(shù)據(jù)庫(kù)能有更多機(jī)會(huì)降低分布式事務(wù)的成本,主要成本是分布式協(xié)調(diào)帶來(lái)的,也就是說(shuō),不需要在每個(gè)事務(wù)過(guò)程內(nèi)對(duì)每個(gè)機(jī)器都依

次確認(rèn)事務(wù)完成,這樣排隊(duì)式的確認(rèn)commit事務(wù)是很浪費(fèi)時(shí)間的,放棄公平性,意味著可以在事務(wù)外面進(jìn)行協(xié)調(diào),這樣就只是增加了協(xié)調(diào)時(shí)間,不會(huì)增加互相

沖突事務(wù)因?yàn)楸舜藳_突而不能運(yùn)行所耽擱的時(shí)間,當(dāng)系統(tǒng)不需要公平性時(shí),需要根據(jù)事務(wù)的優(yōu)先級(jí)或延遲等標(biāo)準(zhǔn)進(jìn)行指定先后執(zhí)行順序,這樣就能夠獲得很好的吞吐

量。

G-Store是一種放棄公平性的 Isolation-Throughput

的分布式key-value存儲(chǔ),支持多鍵事務(wù)(multi-key transactions),MongoDB 和

HBase在鍵key在同樣分區(qū)上也支持多鍵事務(wù),但是不支持跨分區(qū)的事務(wù)。

總之:傳統(tǒng)分布式事務(wù)性能不佳的原因是確保原子性(分布式協(xié)調(diào))和隔離性同時(shí)重疊,創(chuàng)建一個(gè)高吞吐量分布式事務(wù)的關(guān)鍵是分離這兩種關(guān)注,這種分離原

子性和隔離性的視角將導(dǎo)致兩種類(lèi)型的系統(tǒng),第一種選擇是弱隔離性能讓沖突事務(wù)并行執(zhí)行和確認(rèn)提交;第二個(gè)選擇重新排序原子性和隔離性機(jī)制保證它們不會(huì)某個(gè)

時(shí)間重疊,這是一種放棄公平的事務(wù)執(zhí)行,所謂放棄公平就是不再同時(shí)照顧原子性和隔離性了,有所傾斜,放棄高標(biāo)準(zhǔn)道德要求就會(huì)帶來(lái)高自由高效率。

NoSQL數(shù)據(jù)庫(kù)是否意味著缺乏安全性?

NoSQL薄弱的安全性會(huì)給企業(yè)帶來(lái)負(fù)面影響 。Imperva公司創(chuàng)始人兼CTO Amichai Shulman如是說(shuō)。在新的一年中,無(wú)疑會(huì)有更多企業(yè)開(kāi)始或籌劃部署NoSQL。方案落實(shí)后就會(huì)逐漸發(fā)現(xiàn)種種安全問(wèn)題,因此早做準(zhǔn)備才是正確的選擇。 作為傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的替代方案,NoSQL在查詢(xún)中并不使用SQL語(yǔ)言,而且允許用戶(hù)隨時(shí)變更數(shù)據(jù)屬性。此類(lèi)數(shù)據(jù)庫(kù)以擴(kuò)展性良好著稱(chēng),并能夠在需要大量應(yīng)用程序與數(shù)據(jù)庫(kù)本身進(jìn)行實(shí)時(shí)交互的交易處理任務(wù)中發(fā)揮性能優(yōu)勢(shì),Couchbase創(chuàng)始人兼產(chǎn)品部門(mén)高級(jí)副總裁James Phillips解釋稱(chēng):NoSQL以交易業(yè)務(wù)為核心。它更注重實(shí)時(shí)處理能力并且擅長(zhǎng)直接對(duì)數(shù)據(jù)進(jìn)行操作,大幅度促進(jìn)了交互型軟件系統(tǒng)的發(fā)展。Phillips指出。其中最大的優(yōu)勢(shì)之一是能夠隨時(shí)改變(在屬性方面),由于結(jié)構(gòu)性的弱化,修改過(guò)程非常便捷。 NoSQL最大優(yōu)勢(shì)影響其安全性 NoSQL的關(guān)鍵性特色之一是其動(dòng)態(tài)的數(shù)據(jù)模型,Shulman解釋道。我可以在其運(yùn)作過(guò)程中加入新的屬性記錄。因此與這種結(jié)構(gòu)相匹配的安全模型必須具備一定的前瞻性規(guī)劃。也就是說(shuō),它必須能夠了解數(shù)據(jù)庫(kù)引入的新屬性將引發(fā)哪些改變,以及新加入的屬性擁有哪些權(quán)限。然而這個(gè)層面上的安全概念目前尚不存在,根本沒(méi)有這樣的解決方案。 根據(jù)Phillips的說(shuō)法,某些NoSQL開(kāi)發(fā)商已經(jīng)開(kāi)始著手研發(fā)安全機(jī)制,至少在嘗試保護(hù)數(shù)據(jù)的完整性。在關(guān)系型數(shù)據(jù)庫(kù)領(lǐng)域,如果我們的數(shù)據(jù)組成不正確,那么它將無(wú)法與結(jié)構(gòu)并行運(yùn)作,換言之?dāng)?shù)據(jù)插入操作整體將宣告失敗。目前各種驗(yàn)證規(guī)則與完整性檢查已經(jīng)比較完善,而事實(shí)證明這些驗(yàn)證機(jī)制都能在NoSQL中發(fā)揮作用。我們與其他人所推出的解決方案類(lèi)似,都會(huì)在插入一條新記錄或是文檔型規(guī)則時(shí)觸發(fā),并在執(zhí)行過(guò)程中確保插入數(shù)據(jù)的正確性。 Shulman預(yù)計(jì)新用戶(hù)很快將在配置方面捅出大婁子,這并非因?yàn)镮T工作人員的玩忽職守,實(shí)際上主要原因是NoSQL作為一項(xiàng)新技術(shù)導(dǎo)致大多數(shù)人對(duì)其缺乏足夠的知識(shí)基礎(chǔ)。Application Security研發(fā)部門(mén)TeamSHATTER的經(jīng)理Alex Rothacker對(duì)上述觀點(diǎn)表示贊同。他指出,培訓(xùn)的一大問(wèn)題在于,大多數(shù)NoSQL的從業(yè)者往往屬于新生代IT人士,他們對(duì)于技術(shù)了解較多,但往往缺乏足夠的安全管理經(jīng)驗(yàn)。 如果他們從傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)入手,那么由于強(qiáng)制性安全機(jī)制的完備,他們可以在使用中學(xué)習(xí)。但NoSQL,只有行家才能通過(guò)觀察得出正確結(jié)論,并在大量研究工作后找到一套完備的安全解決方案。因此可能有90%的從業(yè)者由于知識(shí)儲(chǔ)備、安全經(jīng)驗(yàn)或是工作時(shí)間的局限而無(wú)法做到這一點(diǎn)。 NoSQL需在安全性方面進(jìn)行優(yōu)化 盡管Phillips認(rèn)同新技術(shù)與舊經(jīng)驗(yàn)之間存在差異,但企業(yè)在推廣NoSQL時(shí)加大對(duì)安全性的關(guān)注會(huì)起到很大程度的積極作用。他認(rèn)為此類(lèi)數(shù)據(jù)存儲(chǔ)機(jī)制與傳統(tǒng)關(guān)系類(lèi)數(shù)據(jù)庫(kù)相比,其中包含著的敏感類(lèi)信息更少,而且與企業(yè)網(wǎng)絡(luò)內(nèi)部其它應(yīng)用程序的接觸機(jī)會(huì)也小得多。 他們并不把這項(xiàng)新技術(shù)完全當(dāng)成數(shù)據(jù)庫(kù)使用,正如我們?cè)谑占泶罅縼?lái)自其它應(yīng)用程序的業(yè)務(wù)類(lèi)數(shù)據(jù)時(shí),往往也會(huì)考慮將其作為企業(yè)數(shù)據(jù)存儲(chǔ)機(jī)制一樣,他補(bǔ)充道。當(dāng)然,如果我打算研發(fā)一套具備某種特定功能的社交網(wǎng)絡(luò)、社交游戲或是某種特殊web應(yīng)用程序,也很可能會(huì)將其部署于防火墻之下。這樣一來(lái)它不僅與應(yīng)用程序緊密結(jié)合,也不會(huì)被企業(yè)中的其它部門(mén)所觸及。 但Rothacker同時(shí)表示,這種過(guò)度依賴(lài)周邊安全機(jī)制的數(shù)據(jù)庫(kù)系統(tǒng)也存在著極其危險(xiǎn)的漏洞。一旦系統(tǒng)完全依附于周邊安全模型,那么驗(yàn)證機(jī)制就必須相對(duì)薄弱,而且缺乏多用戶(hù)管理及數(shù)據(jù)訪(fǎng)問(wèn)方面的安全保護(hù)。只要擁有高權(quán)限賬戶(hù),我們幾乎能訪(fǎng)問(wèn)存儲(chǔ)機(jī)制中的一切數(shù)據(jù)。舉例來(lái)說(shuō),Brian Sullivan就在去年的黑帽大會(huì)上演示了如何在完全不清楚數(shù)據(jù)具體內(nèi)容的情況下,將其信息羅列出來(lái)甚至導(dǎo)出。 而根據(jù)nCircle公司CTO Tim ‘TK’ Keanini的觀點(diǎn),即使是與有限的應(yīng)用程序相關(guān)聯(lián),NoSQL也很有可能被暴露在互聯(lián)網(wǎng)上。在缺少?lài)?yán)密網(wǎng)絡(luò)劃分的情況下,它可能成為攻擊者窺探存儲(chǔ)數(shù)據(jù)的薄弱環(huán)節(jié)。因?yàn)镹oSQL在設(shè)計(jì)上主要用于互聯(lián)網(wǎng)規(guī)模的部署,所以它很可能被直接連接到互聯(lián)網(wǎng)中,進(jìn)而面臨大量攻擊行為。 其中發(fā)生機(jī)率最高的攻擊行為就是注入式攻擊,這也是一直以來(lái)肆虐于關(guān)系類(lèi)數(shù)據(jù)庫(kù)領(lǐng)域的頭號(hào)公敵。盡管NoSQL沒(méi)有將SQL作為查詢(xún)語(yǔ)言,也并不代表它能夠免受注入式攻擊的威脅。雖然不少人宣稱(chēng)SQL注入在NoSQL這邊不起作用,但其中的原理是完全一致的。攻擊者需要做的只是改變自己注入內(nèi)容的語(yǔ)法形式,Rothacker解釋稱(chēng)。也就是說(shuō)雖然SQL注入不會(huì)出現(xiàn),但JavaScript注入或者JSON注入同樣能威脅安全。 此外,攻擊者在籌劃對(duì)這類(lèi)數(shù)據(jù)庫(kù)展開(kāi)侵襲時(shí),也很可能進(jìn)一步優(yōu)化自己的工具。不成熟的安全技術(shù)往往帶來(lái)這樣的窘境:需要花費(fèi)大量時(shí)間學(xué)習(xí)如何保障其安全,但幾乎每個(gè)IT人士都能迅速掌握攻擊活動(dòng)的組織方法。因此我認(rèn)為攻擊者將會(huì)始終走在安全部署的前面,Shulman說(shuō)道。遺憾的是搞破壞總比防范工作更容易,而我們已經(jīng)看到不少NoSQL技術(shù)方面的公開(kāi)漏洞,尤其是目前引起熱議的、以JSON注入為載體的攻擊方式。 NoSQL安全性并非其阻礙 然而,這一切都不應(yīng)該成為企業(yè)使用NoSQL的阻礙,他總結(jié)道。我認(rèn)為歸根結(jié)底,這應(yīng)該算是企業(yè)的一種商業(yè)決策。只要這種選擇能夠帶來(lái)吸引力巨大的商業(yè)機(jī)遇,就要承擔(dān)一定風(fēng)險(xiǎn),Shulman解釋道。但應(yīng)該采取一定措施以盡量弱化這種風(fēng)險(xiǎn)。 舉例來(lái)說(shuō),鑒于數(shù)據(jù)庫(kù)對(duì)外部安全機(jī)制的依賴(lài)性,Rothacker建議企業(yè)積極考慮引入加密方案。他警告稱(chēng),企業(yè)必須對(duì)與NoSQL相對(duì)接的應(yīng)用程序代碼仔細(xì)檢查。換言之,企業(yè)必須嚴(yán)格挑選負(fù)責(zé)此類(lèi)項(xiàng)目部署的人選,確保將最好的人才用于這方面事務(wù),Shulman表示。當(dāng)大家以NoSQL為基礎(chǔ)編寫(xiě)應(yīng)用程序時(shí),必須啟用有經(jīng)驗(yàn)的編程人員,因?yàn)榭蛻?hù)端軟件是抵擋安全問(wèn)題的第一道屏障。切實(shí)為額外緩沖區(qū)的部署留出時(shí)間與預(yù)算,這能夠讓員工有閑暇反思自己的工作內(nèi)容并盡量多顧及安全考量多想一點(diǎn)就是進(jìn)步。綜上所述,這可能與部署傳統(tǒng)的關(guān)系類(lèi)數(shù)據(jù)庫(kù)也沒(méi)什么不同。 具有諷刺意味的是,近年來(lái)數(shù)據(jù)庫(kù)應(yīng)用程序在安全性方面的提升基本都跟數(shù)據(jù)庫(kù)本身沒(méi)什么關(guān)系,nCircle公司安全研究及開(kāi)發(fā)部門(mén)總監(jiān)Oliver Lavery如是說(shuō)。

如何搞定NoSQL事務(wù)機(jī)制

在SequoiaDB巨杉數(shù)據(jù)庫(kù)聯(lián)合創(chuàng)始人兼CTO王濤看來(lái),目前只有少量的NoSQL數(shù)據(jù)庫(kù)支持事務(wù)機(jī)制,如VoltDB、RavenDB、SequoiaDB、MarkLogic。并且,“NoSQL支持事務(wù)(ACID)是未來(lái)的趨勢(shì),不支持事務(wù)的NoSQL會(huì)大大縮小其應(yīng)用場(chǎng)景。”對(duì)于ACID來(lái)說(shuō),是指數(shù)據(jù)庫(kù)事務(wù)機(jī)制正確執(zhí)行的四大基本要素,包含了:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。

簡(jiǎn)答大數(shù)據(jù)安全的特征?

大數(shù)據(jù)安全面臨著許多挑戰(zhàn),需要通過(guò)研究關(guān)鍵技術(shù)、制定安全管理策略來(lái)應(yīng)對(duì)這些挑戰(zhàn)。當(dāng)前,大數(shù)據(jù)的應(yīng)用和發(fā)展面臨著許多安全問(wèn)題,具體來(lái)說(shuō)有以下幾個(gè)方面。(1)大數(shù)據(jù)成為網(wǎng)絡(luò)攻擊的顯著目標(biāo)在網(wǎng)絡(luò)空間中,大數(shù)據(jù)是更容易被“發(fā)現(xiàn)”的大目標(biāo),承載著越來(lái)越多的關(guān)注度。一方面,大數(shù)據(jù)不僅意味著海量的數(shù)據(jù),也意味著更復(fù)雜、更敏感的數(shù)據(jù),這些數(shù)據(jù)會(huì)吸引更多的潛在攻擊者,成為更具吸引力的目標(biāo);另一方面,數(shù)據(jù)的大量聚集,使黑客一次成功的攻擊能夠獲得更多的數(shù)據(jù),無(wú)形中降低了黑客的進(jìn)攻成本,增加了“收益率”。(2)大數(shù)據(jù)加大隱私泄露風(fēng)險(xiǎn)從基礎(chǔ)技術(shù)角度看,Hadoop對(duì)數(shù)據(jù)的聚合增加了數(shù)據(jù)泄露的風(fēng)險(xiǎn)。作為一個(gè)分布式系統(tǒng)架構(gòu),Hadoop可以用來(lái)應(yīng)對(duì)PB甚至ZB級(jí)的海量數(shù)據(jù)存儲(chǔ);作為一個(gè)云化的平臺(tái),Hadoop自身存在云計(jì)算面臨的安全風(fēng)險(xiǎn),企業(yè)需要實(shí)施安全訪(fǎng)問(wèn)機(jī)制和數(shù)據(jù)保護(hù)機(jī)制。同樣,大數(shù)據(jù)依托的基礎(chǔ)技術(shù)——NoSQL(非關(guān)系型數(shù)據(jù)庫(kù))與當(dāng)前廣泛應(yīng)用的SQL(關(guān)系型數(shù)據(jù)庫(kù))技術(shù)不同,沒(méi)有經(jīng)過(guò)長(zhǎng)期改進(jìn)和完善,在維護(hù)數(shù)據(jù)安全方面也未設(shè)置嚴(yán)格的訪(fǎng)問(wèn)控制和隱私管理機(jī)制。NoSQL技術(shù)還因大數(shù)據(jù)中數(shù)據(jù)來(lái)源和承載方式的多樣性,使企業(yè)很難定位和保護(hù)其中的機(jī)密信息,這是NoSQL內(nèi)在安全機(jī)制的不完善,即缺乏機(jī)密性和完整性。另外,NoSQL對(duì)來(lái)自不同系統(tǒng)、不同應(yīng)用程序及不同活動(dòng)的數(shù)據(jù)進(jìn)行關(guān)聯(lián),也加大了隱私泄露的風(fēng)險(xiǎn)。此外,NoSQL還允許不斷對(duì)數(shù)據(jù)記錄添加屬性,這也對(duì)數(shù)據(jù)庫(kù)管理員的安全性預(yù)見(jiàn)能力提出了更高的要求。從核心價(jià)值角度看,大數(shù)據(jù)的技術(shù)關(guān)鍵在于數(shù)據(jù)分析和利用,但數(shù)據(jù)分析技術(shù)的發(fā)展,勢(shì)必對(duì)用戶(hù)隱私產(chǎn)生極大威脅。

NoSQL-HDFS-基本概念

Hadoop

文件系統(tǒng):文件系統(tǒng)是用來(lái)存儲(chǔ)和管理文件,并且提供文件的查詢(xún)、增加、刪除等操作。

直觀上的體驗(yàn):在shell窗口輸入 ls 命令,就可以看到當(dāng)前目錄下的文件夾、文件。

文件存儲(chǔ)在哪里?硬盤(pán)

一臺(tái)只有250G硬盤(pán)的電腦,如果需要存儲(chǔ)500G的文件可以怎么辦?先將電腦硬盤(pán)擴(kuò)容至少250G,再將文件分割成多塊,放到多塊硬盤(pán)上儲(chǔ)存。

通過(guò) hdfs dfs -ls 命令可以查看分布式文件系統(tǒng)中的文件,就像本地的ls命令一樣。

HDFS在客戶(hù)端上提供了查詢(xún)、新增和刪除的指令,可以實(shí)現(xiàn)將分布在多臺(tái)機(jī)器上的文件系統(tǒng)進(jìn)行統(tǒng)一的管理。

在分布式文件系統(tǒng)中,一個(gè)大文件會(huì)被切分成塊,分別存儲(chǔ)到幾臺(tái)機(jī)器上。結(jié)合上文中提到的那個(gè)存儲(chǔ)500G大文件的那個(gè)例子,這500G的文件會(huì)按照一定的大小被切分成若干塊,然后分別存儲(chǔ)在若干臺(tái)機(jī)器上,然后提供統(tǒng)一的操作接口。

看到這里,不少人可能會(huì)覺(jué)得,分布式文件系統(tǒng)不過(guò)如此,很簡(jiǎn)單嘛。事實(shí)真的是這樣的么?

潛在問(wèn)題

假如我有一個(gè)1000臺(tái)機(jī)器組成的分布式系統(tǒng),一臺(tái)機(jī)器每天出現(xiàn)故障的概率是0.1%,那么整個(gè)系統(tǒng)每天出現(xiàn)故障的概率是多大呢?答案是(1-0.1%)^1000=63%,因此需要提供一個(gè)容錯(cuò)機(jī)制來(lái)保證發(fā)生差錯(cuò)時(shí)文件依然可以讀出,這里暫時(shí)先不展開(kāi)介紹。

如果要存儲(chǔ)PB級(jí)或者EB級(jí)的數(shù)據(jù),成千上萬(wàn)臺(tái)機(jī)器組成的集群是很常見(jiàn)的,所以說(shuō)分布式系統(tǒng)比單機(jī)系統(tǒng)要復(fù)雜得多呀。

這是一張HDFS的架構(gòu)簡(jiǎn)圖:

client通過(guò)nameNode了解數(shù)據(jù)在哪些DataNode上,從而發(fā)起查詢(xún)。此外,不僅是查詢(xún)文件,寫(xiě)入文件的時(shí)候也是先去請(qǐng)教N(yùn)ameNode,看看應(yīng)該往哪個(gè)DateNode中去寫(xiě)。

為了某一份數(shù)據(jù)只寫(xiě)入到一個(gè)Datanode中,而這個(gè)Datanode因?yàn)槟承┰虺鲥e(cuò)無(wú)法讀取的問(wèn)題,需要通過(guò)冗余備份的方式來(lái)進(jìn)行容錯(cuò)處理。因此,HDFS在寫(xiě)入一個(gè)數(shù)據(jù)塊的時(shí)候,不會(huì)僅僅寫(xiě)入一個(gè)DataNode,而是會(huì)寫(xiě)入到多個(gè)DataNode中,這樣,如果其中一個(gè)DataNode壞了,還可以從其余的DataNode中拿到數(shù)據(jù),保證了數(shù)據(jù)不丟失。

實(shí)際上,每個(gè)數(shù)據(jù)塊在HDFS上都會(huì)保存多份,保存在不同的DataNode上。這種是犧牲一定存儲(chǔ)空間換取可靠性的做法。

接下來(lái)我們來(lái)看一下完整的文件寫(xiě)入的流程:

大文件要寫(xiě)入HDFS,client端根據(jù)配置將大文件分成固定大小的塊,然后再上傳到HDFS。

讀取文件的流程:

1、client詢(xún)問(wèn)NameNode,我要讀取某個(gè)路徑下的文件,麻煩告訴我這個(gè)文件都在哪些DataNode上?

2、NameNode回復(fù)client,這個(gè)路徑下的文件被切成了3塊,分別在DataNode1、DataNode3和DataNode4上

3、client去找DataNode1、DataNode3和DataNode4,拿到3個(gè)文件塊,通過(guò)stream讀取并且整合起來(lái)

文件寫(xiě)入的流程:

1、client先將文件分塊,然后詢(xún)問(wèn)NameNode,我要寫(xiě)入一個(gè)文件到某個(gè)路徑下,文件有3塊,應(yīng)該怎么寫(xiě)?

2、NameNode回復(fù)client,可以分別寫(xiě)到DataNode1、DataNode2、DataNode3、DataNode4上,記住,每個(gè)塊重復(fù)寫(xiě)3份,總共是9份

3、client找到DataNode1、DataNode2、DataNode3、DataNode4,把數(shù)據(jù)寫(xiě)到他們上面

出于容錯(cuò)的考慮,每個(gè)數(shù)據(jù)塊有3個(gè)備份,但是3個(gè)備份快都直接由client端直接寫(xiě)入勢(shì)必會(huì)帶來(lái)client端過(guò)重的寫(xiě)入壓力,這個(gè)點(diǎn)是否有更好的解決方案呢?回憶一下mysql主備之間是通過(guò)binlog文件進(jìn)行同步的,HDFS當(dāng)然也可以借鑒這個(gè)思想,數(shù)據(jù)其實(shí)只需要寫(xiě)入到一個(gè)datanode上,然后由datanode之間相互進(jìn)行備份同步,減少了client端的寫(xiě)入壓力,那么至于是一個(gè)datanode寫(xiě)入成功即成功,還是需要所有的參與備份的datanode返回寫(xiě)入成功才算成功,是可靠性配置的策略,當(dāng)然這個(gè)設(shè)置會(huì)影響到數(shù)據(jù)寫(xiě)入的吞吐率,我們可以看到可靠性和效率永遠(yuǎn)是“魚(yú)和熊掌不可兼得”的。

潛在問(wèn)題

NameNode確實(shí)會(huì)回放editlog,但是不是每次都從頭回放,它會(huì)先加載一個(gè)fsimage,這個(gè)文件是之前某一個(gè)時(shí)刻整個(gè)NameNode的文件元數(shù)據(jù)的內(nèi)存快照,然后再在這個(gè)基礎(chǔ)上回放editlog,完成后,會(huì)清空editlog,再把當(dāng)前文件元數(shù)據(jù)的內(nèi)存狀態(tài)寫(xiě)入fsimage,方便下一次加載。

這樣,全量回放就變成了增量回放,但是如果NameNode長(zhǎng)時(shí)間未重啟過(guò),editlog依然會(huì)比較大,恢復(fù)的時(shí)間依然比較長(zhǎng),這個(gè)問(wèn)題怎么解呢?

SecondNameNode是一個(gè)NameNode內(nèi)的定時(shí)任務(wù)線(xiàn)程,它會(huì)定期地將editlog寫(xiě)入fsimage,然后情況原來(lái)的editlog,從而保證editlog的文件大小維持在一定大小。

NameNode掛了, SecondNameNode并不能替代NameNode,所以如果集群中只有一個(gè)NameNode,它掛了,整個(gè)系統(tǒng)就掛了。hadoop2.x之前,整個(gè)集群只能有一個(gè)NameNode,是有可能發(fā)生單點(diǎn)故障的,所以hadoop1.x有本身的不穩(wěn)定性。但是hadoop2.x之后,我們可以在集群中配置多個(gè)NameNode,就不會(huì)有這個(gè)問(wèn)題了,但是配置多個(gè)NameNode,需要注意的地方就更多了,系統(tǒng)就更加復(fù)雜了。

俗話(huà)說(shuō)“一山不容二虎”,兩個(gè)NameNode只能有一個(gè)是活躍狀態(tài)active,另一個(gè)是備份狀態(tài)standby,我們看一下兩個(gè)NameNode的架構(gòu)圖。

兩個(gè)NameNode通過(guò)JournalNode實(shí)現(xiàn)同步editlog,保持狀態(tài)一致可以相互替換。

因?yàn)閍ctive的NameNode掛了之后,standby的NameNode要馬上接替它,所以它們的數(shù)據(jù)要時(shí)刻保持一致,在寫(xiě)入數(shù)據(jù)的時(shí)候,兩個(gè)NameNode內(nèi)存中都要記錄數(shù)據(jù)的元信息,并保持一致。這個(gè)JournalNode就是用來(lái)在兩個(gè)NameNode中同步數(shù)據(jù)的,并且standby NameNode實(shí)現(xiàn)了SecondNameNode的功能。

進(jìn)行數(shù)據(jù)同步操作的過(guò)程如下:

active NameNode有操作之后,它的editlog會(huì)被記錄到JournalNode中,standby NameNode會(huì)從JournalNode中讀取到變化并進(jìn)行同步,同時(shí)standby NameNode會(huì)監(jiān)聽(tīng)記錄的變化。這樣做的話(huà)就是實(shí)時(shí)同步了,并且standby NameNode就實(shí)現(xiàn)了SecondNameNode的功能。

優(yōu)點(diǎn):

缺點(diǎn):

文章題目:nosql機(jī)制,為什么使用NoSQL
標(biāo)題路徑:http://chinadenli.net/article31/dsigosd.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站網(wǎng)站導(dǎo)航網(wǎng)頁(yè)設(shè)計(jì)公司網(wǎng)站制作品牌網(wǎng)站建設(shè)定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化