cockroach官方文檔翻譯---2.1 架構概要

2. 架構

2.1 概要

cockroachDB是一種開源數據庫,開發者希望去使用:一方面是因爲可伸縮和一致性。開發者一般會有疑問我們如何達到這樣,本篇指導將解釋cockroach進程的內部實現細節。

不過,cockroachDB的使用者你不必理解潛在的架構,

本頁爲重要的用戶及數據庫的熱衷者提供了高級框架,解釋在hood下發生了什麼。


**使用指南

本指南將詳細解析cockroachDB的每一層,希望你能按順序閱讀每一層,從概要開始,然後是sql層。

如果你尋找對cockroachDB的更深層理解,你可以簡單的閱讀每一層的概要,對於更多的技術細節,例如你有興趣作爲項目的貢獻者,你可以閱讀組件部分


注意:本指導,只是解釋cochroachDB的內部襲擊日,不能解釋如何去構建cockroachDB副本,請查閱讀安裝文檔


**cockroach的目標

cockroach設計目標如下:

1)爲了人類的生活更容易。這意味着對於管理者的低接觸,高自動化,對於開發者更容易去查找原因

2)提供工業級一致性,即使在大規模的部署中。這意味着啓動分發事務,同時解決最終一致性和讀取陳舊數據的痛點。

3)創建不間斷的數據庫,在所有節點的讀寫不發生矛盾

4)靈活的部署在任意平臺上,不捆綁任何的平臺或者供應商

5)支持關係型數據使用的相同組件


--最終一致性:允許事務提交一段時間後,數據保持一致

綜上,我們希望cockroachDB使團隊容易的建立全球的,大規模的,有彈性的雲服務。


**語彙表

集羣:cockroachDb部署,表現爲涵蓋一個或多個數據庫的單一邏輯複製

節點:一個單機器(唯一的ip:port)運行cockroachDb。多節點形成集羣

range:你的集羣中一個排序的鄰近的數據

副本:你的range的一個複製集,保證至少有3個節點存儲數據,確保數據的容忍能力。


**概念

cockroach嚴重依賴下列概念,將有利於理解我們的架構實現:

一致性:cockroachDB使用一致性表達ACIDCAP理論,即數據無異常。CAP理論:一致性(Consistency)/可用性(Availability)/分區容錯性(PartitionTolerance)滿足兩個以上。一致性,每個讀請求接收最近的寫請求或者報錯(每個節點讀取的數據一致)。可用性,每個請求都會收到應答,不管最近的寫是成功或者失敗。分區容錯性,在網絡中斷,消息丟失或者延遲,系統可以繼續工作。


consensus:當一個range接受一個寫,投票節點包括range的副本收到寫。這意味着數據安全的存儲,同時多數節點同意這個數據庫狀態,即使一些節點是下線的。當一個寫沒達到consensus,進程停止,保證集羣的一致性狀態。


**複製

同步複製提交之前,需要所有的寫操作寫入所有指定節點的數據副本,爲了保證數據的一致性,這種複製是cockroachDB使用的。

異步複製只要求提交前單一節點接受到寫操作,提交後再寫入其他的數據副本。這種方式幾乎等同於最終一致性,在NoSQL數據庫中很流行,這種方式會導致異常和數據丟失。

**事務

一系列數據操作,滿足ACID(原子性/Atomic,一致性/Consistency,隔離性/Isolation,持久性/Durability)。這是一個一致的的系統的關鍵特性,確保開發者可以信任數據庫數據。

**多活可用性

基於一致性的高可用,使集羣的每個節點可以讀寫部分存儲數據(per-range)。相比於其他複製方式,例如:主-被動複製,活躍節點接受100%的請求高峯。主-主複製,所有的節點接收請求,但不能同時保證讀的數據最新的和快速的。

2.1.5 概要

CockroachDB在機器上運行使用兩條命令

1)cockroachstart—join參數,集羣中所有初始化節點,這樣進程知道所有可以被連接的其他機器

2)cockroach init對集羣執行一次初始化

一旦cockroach進程運行,開發者通過SQL API連接cockroachDB,在PostgresSQL上進行模型化,由於所有節點的對稱行爲,你可以發送請求到任意一個節點,使cockroach很容易的做到負載均衡。

  接收SQL RPCs,節點將其轉化爲操作,工作在我們分發的key-value存儲中。RPCs開始填充集羣數據,cockroachDB算法開始在節點間分發你的數據,將數據打散爲64M的chunk,我們把它叫做range。爲了保證耐受性,每個range至少被3個節點複製。這樣,如果某個節點停止工作,仍然存在數據的副本,可以用於讀寫,並複製數據到其他節點。

  如果一個節點可以接受讀寫請求但不能直接提供服務,它可以發現可以處理請求的節點並聯系它,這樣不必知道數據在哪裏,cockroachDB會跟蹤,爲每個節點激活對稱行爲。

  對於range數據的任何更改,依賴於一致性算法,保證多數副本同意提交更改,業界領先的隔離機制保證提供複製一致性讀,不管你連接的是哪一個節點。

  最後,使用高效的存儲引擎進行數據寫入或者磁盤讀取,保證數據時間戳可以被跟蹤,這樣有利於支持SQL標準,AS OF SYSTEMTIME,可以獲得一段時間的歷史數據。

  不過,這只是一個高級概要描述cockroachDB如何運行,想知道cockroach進程的具體細節,需要對架構有更深的瞭解。

2.1.6 層

在最高層,cockroachDB將客戶端的SQL語句轉化key-value(KV)形式數據,在節點間分發,並寫入磁盤。我們的架構,進程通過多層結構進行實現,對應用是不透明的。

下面描述了每層函數,忽略其他層的細節。這些函數對本層,對其他層是黑箱的API組件。層間的互動沒有明確描述,爲了理解整個進程,需要理解每層的函數。

 

順序

目的

SQL

1

將客戶端SQL語句轉化成KV形式

事務

2

允許多KV實體更改的原子性

分發

3

提出將KV range作爲一個單實體

複製

4

多節點間複製KV ranges滿足一致性和同步性,本層通過租約提供一致性讀

引擎

5

在磁盤中讀寫KV數據

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章