Aerospike-Architecture系列之系統概述

Aerospike-Architecture系列之系統概述(System Overview)

Aerospike是一個分佈式可擴展的NoSql數據庫,爲一下三個主要目標而構建:

  • 創建一個滿足當今網絡平臺應用的彈性,可擴展平臺

  • 提供與傳統數據庫一樣的魯棒性和可靠性(例如,ACID)

  • 提供操作效率(最小人工參與)

最早發佈於Proceedings of VLDB (Very Large Databases) in 2011,Aerospike架構包括三層:


  1. 集羣可感知客戶端層(Client Layer )包括實現Aerospike API的開源客戶端函數庫,追蹤節點並感知數據在集羣中的所在位置

  2. 自管理集羣( Clustering)與數據分佈層( Data Distribution Layer)監控集羣通訊與自動故障轉移,數據複製,跨數據中心同步,智能再平衡,數據遷移

  3. flash-optimized數據存儲層(Data Storage)可靠存儲數據於內存和閃存

客戶端層

Aerospike“智能客戶端”爲速度而設計。它被實現爲一個開源可鏈接庫用於C、c#、Java、PHP和Python開發,開發者可用自由按需發佈或修改。客戶端包括以下內容

  • 實現Aerospike API,通過客戶端-服務器協議與集羣直連

  • 追蹤節點感知數據存儲位置,當節點啓動或停止時立即感知集羣配置變化。

  • 爲提高效率實現TCP/IP連接池。檢測非集羣節點失敗級別的事務失敗並從新路由事務到數據副本

  • 透明地將請求直接發送到節點的數據並根據需要重試或重新請求,一個例子是在集羣重新配置期間。

這種架構減少了事務延遲,分流集羣工作並消除開發者工作量。它確保在節點啓停是應用不必重啓。總之,它消除了對於額外集羣管理服務器或代理服務器的需要。

分佈層

Aerospike “shared nothing”架構被設計目的是可以可靠存儲TB及數據並支持自動容錯、複製、跨數據中心同步。本層實現線性擴展及ACID guarantees。分佈層也旨在消除手工操作,實現系統所有集羣管理功能的自動化。它包括3個模塊:

  • Cluster Management Module用於追蹤集羣節點。關鍵算法是確定哪些節點是集羣的一部分的Paxos-like一致投票過程。Aerospike實現專門的心跳檢測(主動與被動),用於監控節點間的連通性。

  • 當一個節點被添加或移除並且集羣成員被確定,每個節點使用哈希算法講主索引空間切分爲數據切片並指派其擁有者。Data Migration Module(數據遷移模塊)然後智能平衡跨集羣中各節點的數據分佈,並按照系統配置的複製因子確保每個數據塊誇節點和誇數據中心複製。數據分割是純粹算法,系統擴展無master,從而消除了在共享環境下的其他額外配置。

  • Transaction Processing Module(事務處理模塊) 用於讀寫數據請求並保障一致性與隔離性,該模塊負責
     

    • 自動,以數據最晚的時間戳爲標準

    • 用戶驅動,爲判定數據等級,所有數據副本返回應用。

  1. Sync/Async Replication(同步/異步複製):爲保證寫一致性,在提交數據之前向所有副本傳播更新並將結果返回客戶端。

  2. Proxy (代理):集羣重配置期間客戶端可能出現短暫過期,透明代理請求到其他節點。

  3. Duplicate Resolution(副本解析):當集羣從活動分區恢復時,解決不同數據副本之間的衝突。
     

    wKiom1Uk_KCBrhFXAAJ3h2d_4Lc597.jpg


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 的應用程序,情形如下:

spacer.gifwKiom1Uk_NTiEg0HAACe6liBVjg443.jpg

智能客戶端允許應用程序忽略數據分佈細節。具體細節請參閱architecture guide

此文檔中,我們將使用術語API及client interchangeably-集成Aerospike API的應用程序會同時集成智能終端。


原文鏈接: <http://www.aerospike.com/docs/architecture/>

 


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