Aerospike NoSQL 數據庫架構

jopen 10年前發布 | 22K 次閱讀 NoSQL數據庫 NOSQL

 

Aerospike 是一個開源的分布式鍵-值NoSQL數據庫。它支持靈活的數據模式,并且支持滿足ACID特性的事務。其 架構 包括如下三層:

  • 客戶端層: 這一層包括帶有Aerospike API的開源客戶端庫和能夠感知數據在Aerospike集群中位置的追蹤節點。
  • 集群和數據分布層: 這一層監控集群通訊并提供一些自動化功能,比如故障轉移、數據復制和跨數據中心同步。
  • 數據存儲層: 這一層負責在DRAM(動態隨機存取存儲器)和Flash(閃存)中存儲數據。

InfoQ采訪了Aerospike的聯合創始人兼CTO Brian Bulkowski,內容包括NoSQL數據庫架構、其優勢以及限制。

InfoQ:現在有不少NoSQL解決方案——Aerospike解決了哪些問題?

Brian:Aerospike為應用開發者們解決了鍵-值存儲問題。當他們想要使用支持分片的鍵-值NoSQL數據庫時就應該考慮Aerospike。它為解決大量的網絡負載而生,在這一點上很多成功的公司已經證明部署Aerospike的重要性。它不是一個只用于分析功能的數據庫,也不是Hadoop 的替代品。

在大規模用戶信息存儲和會話管理方面,Aerospike的表現都極其出色。而且在很多商家使用實時數據在做的個性化項目、安全項目、移動支付和很多其他項目的例子中,Aerospike都是不二之選。

通過發布Aerospike源代碼和最近的一些用戶自定義函數,還有二級索引和統計收集而來的數據集的使用,Aerospike可以被選做可擴展高性能應用的數據庫。

InfoQ:如何比較Aerospike和關系型數據庫?

Brian:Aerospike在一開始就是以擅長做鍵-值存儲的分布式數據庫為目標開發的。關系型數據庫功能完備但是喪失了主鍵使用上的速度和規模優勢。然而,主鍵的使用方面——為了性能而做數據反規范化,是互聯網應用開發者最看重的一個特性。

關系型數據庫是很棒的多功能工具,然而,糟糕的擴展性、緩慢的連接操作(joins)、維護數據關系的復雜性和難以更改的架構降低了應用的性能和開發者的敏捷性。這就是為什么為了打造那些真正令人興奮的應用,緩存和分片已經被應用多年。

SQL尚未適配幾個關鍵的開發需求。多語言使用要側重于列表和圖的抽象和更高級的數據結構,比如文檔。NoSQL數據庫給開發者們提供了想要的東西——列表和圖作為上層數據類型并且允許跨語言訪問。還有一些小的改進,比如可以很容易地保持原子性地更新和讀取記錄(UPDATE和SELECT),這讓開發者的工作變得更輕松。

不同于關系型數據庫的實現,Aerospike利用最新的硬件——多核、多CPU服務器和閃存(PCIe卡和SSD),還有可以向外擴展,處理數十億的對象、TB級的數據和每秒百萬級的事務的分布式無共享架構。當下的公有云都可以配置SSD,只需花費RAM的小部分費用就能獲得內存般的性能。一個關于“高可擴展性”的 博客 列舉了原因。

InfoQ:如何比較它與其他NoSQL數據庫?

Brian:一些流行的NoSQL數據庫提倡高性能,但是仍然需要緩存技術來解決并發讀寫的問題。Aerospike優良的內存性能使應用開發更簡單,同時部署也更便捷。如果你正在使用NoSQL替代MySQL滿足高性能和可擴展性,你需要一個性能很可靠的內存數據庫。

然而,開源的緩存系統比如Memcache和Redis,都不容易擴展。它們性能確實很好,但是它們的持久化模型不成熟,而且需要完全的DRAM。擴容服務器的時候要手動分割數據才能避免低性能。

Aerospike從設計之初就同時支持RAM和閃存(SSDs)。淘汰從RAM到閃存之間的數據交換方案,Aerospike實現了一個混合方式,把已分配的索引和數據或者存儲在RAM或者SSD中。我們發現對于不同的部署環境,有一些數據最好放在RAM中,而有一些最好放在閃存中,這個工作對Aerospike來講很簡單。

其他的NoSQL數據庫只實現了延遲一致性,但是Aerospike默認運行同步復制機制,提供單行ACID屬性。讀提交是最實用的ACID隔離級別,它為程序員提供了寫后讀的實時性,確保返回正確結果。Aerospike實現了包括鎖存器和短期記錄鎖的分布式隔離技術,確保了隔離性。Aerospike 提供的持久化機制包括在RAM和持久化存儲上的多節點復制,另外每次事務更新都會在發送提交成功信號之前寫入集群中的多個位置。更多的細節可以在這篇 超大數據集會議論文 中找到。

Aerospike有力保證讓數據離處理它的進程更近,這是通過運行在服務器而非客戶端的用戶自定義函數實現的。分布式的代碼管理器可以使得模塊安全地上傳至集群,而后高效地執行。這一特性減輕了網絡擁堵。舉例來說,在數據庫中把一個元素添加到列表,列表管理可以寫成一個簡單的UDF(用戶自定義函數),其實就是用自定義操作擴展數據庫功能。

其他的NoSQL數據庫要求手動分片、手動故障轉移、維護窗口等。MongoDB和HBase提供了自動分片,但是MongoDB需要一個區分數據的分片鍵值作為參數,而HBase要涉及到從原則集里選擇一個RegionSplitPolicy(域分配原則)。然而Aerospike是可以自我復合和自動執行一些功能的,包括故障轉移和數據再平衡,這極大地減少了維護的工作量。在Aerospike部署中,維護窗口的存在是不必要的——備份和升級的操作會在數據庫集群還在響應請求服務的同時就完成了。

InfoQ:Aerospike作為解決方案一部分的最佳用例或者最佳應用是什么?

Brian:Aerospike是一個可以滿足廣告優化和廣告個性化這些低延遲應用的數據庫選擇。實時競價廣告系統——運行著大量互聯網上常見的競價廣告,很依賴服務器上最近的cookie數據變化,還要加上海量的Hadoop分析而來的更深層用戶數據。這種類型的大數據應用要求REST API請求響應在毫秒級,而且要把最近行為寫到上層數據庫。Aerospike被平臺用作用戶信息存儲、服務端cookie存儲、實時上下文存儲、設備 ID存儲和ID映射,可以預見,這些平臺必須在1毫秒之內存儲和讀寫幾十億條數據。此外,Aerospike提供金融交易必需的單行ACID特性。

Aerospike還被商家用于在用戶瀏覽商品時生成動態內容——報價和交易信息,并給出相關產品的最佳推薦。以Snapdeal公司舉例來說,過去一直使用運行于RAM的MongoDB作為緩存,后來發現性能欠佳。現在他們使用Aerospike,滿足了開發人員單頁面更多的數據庫調用,由此實現了視覺更豐富、利益更大化的網絡體驗。

我們發現緩存正在變成歷史。很多社交媒體公司——從Pinterest到推ter,都在使用持久化的內存鍵值存儲作為數據基礎架構的核心——無緩存化。

如今每家平臺都需要全天候的服務才能保證優質的用戶體驗、達成服務水平協議,還要通過維護和備份做到始終可用。許多Aerospike客戶剛開始使用較小的集群。當他們的產品不僅僅是增長,而是爆炸式增長的時候,他們發現很容易就可以通過增加服務器而擴展服務。根本沒有必要重啟現現有節點、客戶端,或是計劃停機時間等等。

InfoQ:Aerospike架構里是否有持久化的后臺數據庫或者完全的內存數據庫?

Brian:Aerospike在使用RAM的時候是持久化的,標準配置會寫入磁盤。由于不通過磁盤讀取數據,因此沒什么性能影響。當使用閃存或SSD時,數據會同步寫入主備機。在數據塊寫入到磁盤是時是隊列維護的,所以所有副本都是持久化的,而且沒有性能影響。

InfoQ:它支持什么類型的監控?

Brian:有很多方式可以用來監控Aerospike。 Aerospike監控控制臺 (AMC)提供了一個很全面的儀表盤來監視集群的活動。它通過vagrant預裝在Aerospike虛擬機中,并注冊了亞馬遜AMI(亞馬遜系統鏡像)。

Aerospike支持 NagiosGraphite 插件——這些Python寫的插件可以作為其他系統的模板。

InfoQ:使用Aerospike有什么限制?

Brian:Aerospike在如下場景可能不是最佳選擇:

  • 工作負載總是只讀的
  • 如果工作負載是批量分析,旋轉介質(HDDs)會更高效

關于受訪者

Brian Bulkowski ,Aerospike 聯合 創始人兼CTO ,在設計、開發和優化網絡系統和高性能網絡規模基礎架構方面有著20多年經驗。他的職業生涯中曾在Novell、Liberate和Aggregate Knowledge多次擔任技術帶頭人。Brian擁有布朗大學的數學和計算機科學學士學位。

查看英文原文: Aerospike NoSQL Database Architecture

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!