Aerospike-Architecture系列之系統概述(System Overview),aerospike
系統概述(System Overview)
Aerospike是一個分布式可擴充的NoSql資料庫,為一下三個主要目標而構建:
- 建立一個滿足當今網路平台應用的彈性,可擴充平台
- 提供與傳統資料庫一樣的魯棒性和可靠性(例如,ACID)
- 提供操作效率(最小人工參與)
最早發佈於Proceedings of VLDB (Very Large Databases) in 2011,Aerospike架構包括三層:
- 叢集可感知用戶端層(Client Layer )包括實現Aerospike API的開源用戶端函數庫,追蹤節點並感知資料在叢集中的所在位置
- 自管理叢集( Clustering)與資料分布層( Data Distribution Layer)監控叢集通訊與自動容錯移轉,資料複製,跨資料中心同步,智能重新平衡,資料移轉
- flash-optimized資料存放區層(Data Storage)可靠儲存資料於記憶體和快閃記憶體
用戶端層
Aerospike“智能用戶端”為速度而設計。它被實現為一個開源可連結庫用於C、c#、Java、PHP和Python開發,開發人員可用自由按需發布或修改。用戶端包括以下內容
- 實現Aerospike API,通過用戶端-伺服器協議與叢集直連
- 追蹤節點感知資料存放區位置,當節點啟動或停止時立即感知叢集配置變化。
- 為提高效率實現TCP/IP串連池。檢測非叢集節點失敗層級的事務失敗並從新路由事務到資料副本
- 透明地將請求直接發送到資料所在節點並根據需要重試或重新請求,一個例子是在叢集重新設定期間。
這種架構減少了事務延遲,分流叢集工作並消除開發人員工作量。它確保在節點啟停是應用不必重啟。總之,它消除了對於額外叢集管理伺服器或Proxy 伺服器的需要。
分布層
Aerospike “shared nothing”架構被設計目的是可以可靠儲存TB及資料並支援自動容錯、複製、跨資料中心同步。本層實現線性擴充及ACID guarantees。分布層也旨在消除手工操作,實現系統所有叢集管理功能的自動化。它包括3個模組:
Cluster Management Module用於追蹤叢集節點。關鍵演算法是確定哪些節點是叢集的一部分的Paxos-like一致投票過程。Aerospike實現專門的心跳檢測(主動與被動),用於監控節點間的連通性。
當一個節點被添加或移除並且叢集成員被確定,每個節點使用雜湊演算法講主索引空間切分為資料切片並指派其擁有者。Data Migration Module(資料移轉模組)然後智能平衡跨叢集中各節點的資料分布,並按照系統配置的複製因子確保每個資料區塊誇節點和誇資料中心複製。資料分割是純粹演算法,系統擴充無master,從而消除了在共用環境下的其他額外配置。
- Transaction Processing Module(交易處理模組) 用於讀寫資料請求並保障一致性與隔離性,該模組負責
Clustering
一旦啟動叢集,你可以在其他資料中心安裝配置cross data-center replication的其他叢集,如果叢集崩潰,遠端叢集可以承接負載。
資料存放區層
Aerospike以無模式資料模型儲存鍵值對。組織資料的容器稱作命名空間(namespaces),相當於RDBMS系統中庫(databases
)的概念。在namespace中資料被細分為各個集合(set)(類似資料庫中的表)和記錄(records
)(類似資料庫中的行)。在set中每個record有一個唯一的索引key以及一個或多個bin(類似資料庫中的列)與之相關聯。
- set和bin不需要預先定義,可以再運行時添加。
- bin中的值是強型別,包括任何被支援的資料類型。bin本身不是類型,所以相同的bin名可以是不同類型的資料。
為了快速存取,索引( primary keys 和 secondary keys)儲存於記憶體,資料可以儲存於記憶體或SSD硬碟。每個namespace可以分別配置,這樣小的namespace可以儲存在記憶體而大的namespace可以儲存在SSD上。
資料層特別為提高速度同時減少硬體成本而設計。它可以作為緩衝層所有操作在記憶體中進行或者利用最佳化過的flash儲存,後者資料不會丟失。
- 1億個keys只佔用6.4GB空間。雖然key沒有大小限制,每個key的有效儲存也只有64bytes
- 原生,多線程,多核Flash I/O以及Aerospike日誌結構檔案系統利用低水平的SSD讀寫入模式。此外,寫盤執行塊寫操作以減少延遲。這種方式繞過標準檔案系統最佳化傳統磁碟。
- 內Smart Defragmenter(建智能磁碟重組)和 Intelligent Evictor(智能清除程式)。這些進程協同工作確保記憶體中的資料不丟失並安全的寫入磁碟
-
- 磁碟重組程式跟蹤活動記錄在每一塊並回收那些低於最低使用率的塊
- 清除程式移除到期的記錄並在系統達到高水位線時回收記憶體。到期時間配置在每個namespace中,record存活期從最後一次修改的時間開始計算,應用可以越過預設的資料生命週期重新指定到期時間,可以設定資料永不到期。
操作Aerospike
在傳統(非分布式)資料庫系統中,安裝完軟體你需要設定schema、建立資料庫和表。這與Aerospike資料庫有很大不同。
在分散式資料庫中,資料分布在叢集中的各個伺服器上。這意味著你不能在一台伺服器上訪問到所有資料。
使用Aerospike 資料庫,將按如下步驟建立和管理資料庫:
通過配置初始化資料庫設定。按Aerospike的術語,當安裝系統時一個庫被稱作一個namespace,叢集中的每個節點必須指明每個namespace如何建立及副本數量。資料庫講在你重啟服務的時候被建立
通過應用程式執行資料庫操作。當應用程式第一次引用set和bin的時候資料庫schema被建立,應用程式簡單地將資料存放區於指定的bin。在Aerospike資料庫中,任務通常由DBA通過命令列程式執行。
根據需要修改設定檔。要更新namespace的配置參數,你需要動態修改或使用新的設定檔重啟服務。
為滿足效能和冗餘需求,Aerospike需要規劃和配置具體的節點數量,具體細節請參考 Capacity Planning
可以通過management utilities 和 monitoring tools管理和監控急群眾的節點。當添加節點或因升級維護需要宕機時叢集會自動設定。當節點發生故障叢集會重新平衡負載,以便達到對終端使用者影響最小的目的。
構建應用程式
一旦建立namespace,Aerospike提供了工具,允許您驗證資料庫儲存資料正確性。在生產資料庫,資料分佈於叢集當中。為了操作資料庫你需要在應用程式中執行個體化智能用戶端。智能終端是位置感知的,知道如何在叢集中儲存/檢索資料而不影響效能。
Aerospike提供多種語言的API用於構建大資料應用程式。詳情參考用戶端手冊
編譯應用程式時,API函數庫隨智能終端被包含。為了在任何給定的時間確定資料位元置,智能終端持續監控叢集狀態。智能用戶端的位置感知技術確保在大多數情況下,可以再一跳之內檢索到需要的資料。
當涉及到大資料應用時,例如基於web 的應用程式,情形如下:
智能用戶端允許應用程式忽略資料分布細節。具體細節請參閱architecture guide
此文檔中,我們將使用術語API及client interchangeably-整合Aerospike API的應用程式會同時整合智能終端。
原文連結: <http://www.aerospike.com/docs/architecture/>