Amazon Keyspaces:它是如何工作的 - Amazon Keyspaces (適用於 Apache Cassandra)

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon Keyspaces:它是如何工作的

Amazon Keyspaces 刪除管理卡桑德拉的管理開銷。要理解為什麼,從 Cassandra 架構開始,然後將其與 Amazon Keyspaces 進行比較是有幫助的。

高級架構:阿帕奇卡桑德拉與 Amazon Keyspaces

傳統的 Apache 卡桑德拉部署在由一個或多個節點組成的集群。您負責管理每個節點,並在叢集擴展時新增和移除節點。

客戶端程序通過連接到節點之一並發出卡桑德拉查詢語言(CQL)語句訪問卡桑德拉。CQL 類似於 SQL,在關係數據庫中使用的流行語言。即使卡桑德拉是不是一個關係數據庫,CQL 提供了查詢和操作卡桑德拉數據熟悉的接口。

下圖顯示了一個簡單的 Apache 卡桑德拉集群,由四個節點。


               包含 4 個節點和客戶端應用程序交互的 Apache 卡桑德拉集群的圖。

生產 Cassandra 部署可能包括數百個節點,在一個或多個物理數據中心的數百台物理計算機上運行。除了安裝、維護和操作軟體之外,還需要佈建、修補和管理伺服器的應用程式開發人員,這可能會造成操作負擔。

使用 Amazon Keyspaces (適用於 Apache Cassandra),您不需要佈建、修補或管理伺服器,因此您可以專注於建置更好的應用程式。Amazon Keyspaces 為讀取和寫入提供兩種輸送量容量模式:隨需和佈建。您可以選擇表格的輸送量容量模式,根據工作負載的可預測性和變化性,將讀取和寫入的價格最佳化。

使用隨選模式時,您只需支付應用程式實際執行的讀取和寫入費用。您不需要事先指定表格的輸送量容量。Amazon Keyspaces 在上升或下降時幾乎可以立即容納您的應用程式流量,使其成為流量不可預測的應用程式的理想選擇。

如果您擁有可預測的應用程式流量,並且可以預先預測表格的容量需求,佈建容量模式可協助您將輸送量價格最佳化。使用佈建的容量模式,您可以指定預期應用程式執行的每秒讀取和寫入次數。您可以啟用自動擴展來自動增加和減少表格的佈建容量。

當您深入瞭解工作負載的流量模式時,您可以每天變更一次資料表的容量模式,或者如果您預期會有大量流量 (例如預期發生的重大事件將會導致大量資料表流量)。如需有關讀取和寫入容量佈建的詳細資訊,請參閱Amazon 密Keyspaces 間中的讀取/寫入容量模

Amazon Keyspaces (適用於 Apache Cassandra) 會在多個可用區域中儲存三份資料副本,以確保持久性和高可用性。此外,您還可以從資料中心和網路架構中獲益,該架構專為滿足對安全性最敏感的組織的需求而打造。當您建立新的 Amazon Keyspaces 表格時,靜態加密會自動啟用,且所有用戶端連線都需要傳輸層安全性 (TLS)。其他 AWS 安全功能包括監控虛擬私有雲端 (VPC) 端點AWS Identity and Access Management如需所有可用安全性功能的概觀,請參閱亞馬遜 Keyspaces 中的安全性(阿帕奇卡桑德拉)

下圖顯示了 Amazon Keyspaces 的體系結構。


               Amazon Keyspaces 與客戶端應用程序交互的圖。

用戶端程式透過連線到預先確定的端點 (主機名稱和連接埠號碼) 並發出 CQL 陳述式來存取 Amazon Keyspaces。如需可用端點的清單,請參閱亞馬遜 Keyspaces 的服務端點

卡桑德拉數據模型

如何為商業案例建立資料模型,對於從 Amazon Keyspace 達到最佳效能至關重要。不良的資料模型可能會大幅降低效能。

即使 CQL 看起來類似於 SQL,卡桑德拉和關係數據庫的後端是非常不同的,必須以不同的方式處理。以下是一些需要考慮的更重要的問題:

儲存

您可以在表中可視化您的 Cassandra 數據,每行代表一條記錄,每列都是該記錄中的字段。

資料表設計:先查詢

CQL 中沒有 JOIN s。因此,您應該根據資料的形式設計資料表格,以及在業務使用案例中存取資料的方式。這可能會導致重複資料的反正規化。您應該專門針對特定的存取模式設計每個表格。

分區

您的數據存儲在磁盤上的分區中。資料儲存在分割區的數目,以及在分割區之間的分佈方式取決於您的分割區索引鍵。如何定義分區索引鍵可能會對查詢的效能產生重大影響。如需最佳實務做法,請參閱「如何在 Amazon 密鑰 Keyspaces 中有效使用分區密鑰」。

主索引鍵

在卡桑德拉,數據被存儲為鍵-值對。為此,每個 Cassandra 表必須有一個主鍵,這是表中每一行的關鍵。主索引鍵是必要的資料分割索引鍵和選擇性叢集資料行的複合。包含主鍵的數據在表中的所有記錄中必須是唯一的。

  • 分割索引鍵 — 需要主索引鍵的分割區索引鍵部分,並決定資料儲存在叢集中的哪個分割區。分區鍵可以是單個列,也可以是由兩個或多個列組成的複合值。如果單一資料行分割索引鍵會導致單一分割區或極少數分割區擁有大部分資料,並因此承載大部分磁碟 I/O 作業,您可以使用複合分割區索引鍵。

  • 叢集資料欄 — 主索引鍵的選用叢集資料行部分決定了資料在每個分割區內的叢集和排序方式。如果您在主索引鍵中包含叢集資料行,叢集資料行可以有一或多個資料行。如果叢集資料行中有多個資料行,排序順序會由叢集資料行中的列出順序 (從左到右) 決定。

如需有關 NoSQL 設計和 Amazon Keyspaces 的詳細資訊,請參閱。適用於 Amazon Keyspaces 的 NoSQL 設計如需 Amazon Keyspaces 和資料建模的詳細資訊,請參閱Amazon Keyspaces 中的數據建模(阿帕奇卡桑德拉)

從應用程式存取 Amazon Keyspaces

Amazon Keyspaces(對於阿帕奇卡桑德拉)實現了 Apache 卡桑德拉查詢語言(CQL)API,所以你可以使用你已經使用 CQL 和卡桑德拉驅動程序。更新應用程式就像將 Cassandra 驅動程式或cqlsh組態更新為指向 Amazon Keyspaces 服務端點一樣簡單。如需所需認證的詳細資訊,請參閱如何創建和配置 Amazon Keyspaces 的 AWS 憑據

注意

為了協助您開始使用,您可以在 Amazon Keyspaces 程式 end-to-end 碼範例儲存庫中使用各種 Cassandra 用戶端驅動程式,找到連接至 Amazon Keyspaces 的程式碼範例程式碼範例。GitHub

考慮下面的 Python 程序,它連接到一個卡桑德拉集群和查詢表。

from cassandra.cluster import Cluster #TLS/SSL configuration goes here ksp = 'MyKeyspace' tbl = 'WeatherData' cluster = Cluster(['NNN.NNN.NNN.NNN'], port=NNNN) session = cluster.connect(ksp) session.execute('USE ' + ksp) rows = session.execute('SELECT * FROM ' + tbl) for row in rows: print(row)

要對 Amazon Keyspaces 運行相同的程序,您需要: