亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

有坑勿踩(一):MongoDB PSS vs PSA

Freelander / 1103人閱讀

摘要:注意記住的作用始終是把集群中具有投票權(quán)的節(jié)點總數(shù)湊成奇數(shù)用,防止腦裂。其代表的意義是集群中必須有大多數(shù)節(jié)點收到并確認了一個寫操作,這個寫操作才算成功。無論源或者目標片中不能夠滿足大多數(shù)時,遷移都會失敗。在有可能的情況下,應(yīng)盡量使用代替。

前言

在技術(shù)社區(qū)混了這么長時間,因為一些常見的技術(shù)問題反復(fù)被問到,總是想寫寫文章把它們講清楚。無奈很多時候看似基礎(chǔ)的技術(shù)問題背后都隱藏著很深的原因,想要一次性說清楚太花時間,而平時又沒有很多時間能花在上面(主要是懶),所以產(chǎn)生了寫一系列文章的想法,講講我或我的客戶使用MongoDB過程中經(jīng)常遇到的各種“坑”。話雖如此,難者不會會者不難,希望看了這些講解你就不再認為這些是“坑”了。

在講解這些問題前,我會假設(shè)讀者已經(jīng)對MongoDB有了最基礎(chǔ)的了解,因此一些基本名詞和概念就不做過多的解釋,請自己查閱相關(guān)資料。

PSS vs PSA 什么是PSS/PSA?

在MongoDB復(fù)制集中,存在三種類型的角色:

PRIMARY: 主節(jié)點(P)

SECONDARY: 從節(jié)點(S)

ARBITER: 仲裁節(jié)點(A)

構(gòu)建一個復(fù)制集至少需要3個節(jié)點,所以用戶就有了兩種選擇,即PSS和PSA。
注意:記住A的作用始終是把集群中具有投票權(quán)的節(jié)點總數(shù)湊成奇數(shù)用,防止“腦裂”。因此諸如PAA,PSSAA之類的配置是沒有存在的意義的,極端情況下還會擾亂集群的正常工作。

PSA有什么好處?

最直接的好處:省錢啊!隨便找臺機器,不消耗什么資源就可以運行一個A,比一個S的成本小多了。

PSA有什么問題? 讀寫失效

最直接的問題來自于MongoDB中的一個配置選項{w: "majority"},這個配置決定了一次成功的寫入操作需要到達多少個節(jié)點才算真正的成功,w可以定義為1,2,...n(n<=集群節(jié)點總數(shù))或majority。而majority是保證在集群故障時不丟失數(shù)據(jù)的必要配置(關(guān)于majorityw以后再專門寫文章討論)。其代表的意義是:集群中必須有大多數(shù)節(jié)點收到并確認了一個寫操作,這個寫操作才算成功。
在三個節(jié)點的集群中,{w: "majority"} == {w: 2}。因此如果集群配置是PSA,由于A是不存數(shù)據(jù)的,所以集群中能夠確認寫操作的節(jié)點只有P和S,剛好是2。到這里可能有人已經(jīng)看出問題了:在PSA中如果有一個數(shù)據(jù)節(jié)點宕機,則再也不能滿足{w: "majority"},所有使用這種配置的寫操作都會失敗。因此可以說,PSA在一定程度上丟失了高可用性,因為任何一個數(shù)據(jù)節(jié)點的失效都會導(dǎo)致{w: "majority"}類型寫入的失敗。
引申一下,ReadConcern同樣有可選值majority,因此同樣可能因為一個數(shù)據(jù)節(jié)點的失效而失效。

集群部分功能失效

可能你會覺得:什么{w: "majority"}沒聽說過啊,我也不在乎丟失數(shù)據(jù),那用PSA是不是就沒有問題了?當然不是!在很多你沒注意到的場景都存在著{w: "majority"}。比如:

分片集群數(shù)據(jù)遷移。無論源或者目標片中不能夠滿足大多數(shù)時,遷移都會失敗。

分片集群管理。包括但不限于以下這些操作實際上都隱含著{w: "majority"}。一旦不能滿足,這些操作都會失?。?/p>

db.dropDatabase()

db.collection.drop()

db.collection.dropIndex({...})

sh.shardCollection(...)

db.createUser(...)

結(jié)論

majority比你想象的更重要,PSA不能夠提供足夠的可用數(shù)據(jù)節(jié)點來保證majority,因此在很多場景下會引發(fā)隱藏的錯誤。在有可能的情況下,應(yīng)盡量使用PSS代替PSA。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/19415.html

相關(guān)文章

  • 有坑勿踩(三)——關(guān)于數(shù)據(jù)更新

    摘要:前言數(shù)據(jù)更新,中的,對任何數(shù)據(jù)庫而言都是最基本的操作。你并不能保證數(shù)據(jù)在被你讀出來到寫回去期間是否有別人已經(jīng)改了數(shù)據(jù)庫中的記錄,這就是第一個風(fēng)險,操作存在潛在的可能性會覆蓋掉別人更新過的數(shù)據(jù)。 前言 數(shù)據(jù)更新,CRUD中的U,對任何數(shù)據(jù)庫而言都是最基本的操作??此坪唵蔚母虏僮髦袝刂男┛??今天聊一聊這個話題。 在寫這個系列文章時,我會假設(shè)讀者已經(jīng)對MongoDB有了最基礎(chǔ)的了解,因...

    mengera88 評論0 收藏0
  • 有坑勿踩(二)——關(guān)于游標

    摘要:本質(zhì)上所有查詢的數(shù)據(jù)都是從游標來的。的作用是從游標中提取一批數(shù)據(jù),具體提取多少則是由決定。同時注意我們已經(jīng)有了一個游標。為了便于理解,我們下面還是稱之為游標超時。 前言 聊一聊一個最基本的問題,游標的使用??赡苣銖膩頉]有注意過它,但其實它在MongoDB的使用中是普遍存在的,也存在一些常見的坑需要引起我們的注意。 在寫這個系列文章時,我會假設(shè)讀者已經(jīng)對MongoDB有了最基礎(chǔ)的了解,因...

    bawn 評論0 收藏0
  • Head First JNA

    摘要:與動態(tài)鏈接庫配套的,會有相應(yīng)的頭文件,來聲明動態(tài)鏈接庫中對外暴露的方法。結(jié)構(gòu)體映射結(jié)構(gòu)體映射類編寫類,繼承,表示這個一個結(jié)構(gòu)體。聲明字段與,并且設(shè)置訪問屬性為。計算機狀態(tài)結(jié)構(gòu)體結(jié)構(gòu)體指針結(jié)構(gòu)體具體的值至此,功能完成。 問題描述 虛擬化項目,需要用到Java調(diào)用原生代碼的技術(shù),我們使用的是開源庫JNA(Java Native Access)。 Native(C/C++)代碼,編譯生成動態(tài)...

    YPHP 評論0 收藏0
  • MongoDB Change Stream初體驗

    摘要:可以發(fā)現(xiàn),整個同步過程是依賴于來進行的。不考慮導(dǎo)致的問題,正常的應(yīng)用升級也會導(dǎo)致應(yīng)用中斷運行。注意事項為了避免被回滾的更新被發(fā)布出去,選擇只在一個變更到達大多數(shù)節(jié)點不可能被回滾時,才會將這些變更發(fā)布到應(yīng)用。 Change Stream是MongoDB從3.6開始支持的新特性。這個新特性有哪些奇妙之處,會給我們帶來什么便利?本次的文章將就這個主題進行初步討論。 Change Stream...

    1fe1se 評論0 收藏0
  • SaaS化實踐——如何用個微信公眾號登錄多個不同的域名

    摘要:微信登錄的核心代碼依然采用這個庫。核心概念表結(jié)構(gòu)中控機中控機為同一引導(dǎo)用戶登錄的微信登錄服務(wù)器,其中此機器做的為截圖部分的,引導(dǎo)用戶授權(quán),微信回調(diào)到此中控機,拿到。微信回調(diào)到后,拿著,跳轉(zhuǎn)到對應(yīng)的客戶域名。 背景 SaaS 作為一種服務(wù),需要為不同的客戶定制不同的域名以滿足客戶定制化的需求。而微信登錄時需要填寫一個回調(diào)地址,單一的回調(diào)地址是難以處理多客戶域名的業(yè)務(wù)需求的,經(jīng)過不同的 S...

    alanoddsoff 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<