DataStax Proxy for DynamoDB™ and Apache Cassandra® – プレビュー版
先ごろ ApacheCon で、皆さんにおなじみの Patrick McFadin が、開発者の皆さんの AWS DynamoDB ワークロードを Apache Cassandra® 上で実行することを可能にするオープンソースツールの公開プレビュー版を発表しました。この DataStax Proxy for DynamoDB and Cassandra を使って、DynamoDB のワークロードをオンプレミスで実行することで、開発者は Cassandra のハイブリッド、マルチモデル、スケーラビリティの利点を享受することができます。
概要
Amazon DynamoDB は、エラスティックで完全マネージド型のクラウド体験を開発者に提供する key-value およびドキュメントデータベースです。しかし、クラウドでの利用に最適な AWS との密な統合は、オンプレミスでそれを使いたい利用者にとっては障壁となります。
Cassandra は以前からずっと key-value およびテーブル型のデータセットをサポートしているので、DataStax のお客様にとってみれば、DynamoDB のワークロードをサポートするということは、単に既存のストレージエンジンへの変換レイヤーが必要だということでした。
本日、DynamoDB SDK との互換性を提供するプロキシをプレビュー版として公開します。既存のアプリケーションは、コードを変更することなく DataStax Enterprise(DSE)または Cassandra との間でデータの読み書きができます。また、DynamoDB のユーザーに対して、Cassandra の利点であるハイブリッド、マルチモデル、スケーラビリティをもたらします。
とりあえずコードを見たいという方は、DataStax Labs および GitHub でご覧になれます:
https://github.com/datastax/dynamo-cassandra-proxy/
考えられるシナリオ
アプリケーションのライフサイクル管理: 多くのお客様はオンプレミスで開発を行い、本番運用のためにクラウドにデプロイをします。本プロキシにより、お客様の既存の DynamoDB アプリケーションをオンプレミスの Cassandra クラスターで実行することが可能になります。
ハイブリッドのデプロイ: ハイブリッドなワークロードの管理と、DynamoDB のクラウドデプロイからプロキシ経由でのオンプレミスの Cassandra デプロイへの移行の実現には DynamoDB Streams が利用できます。これは現行の実装でサポートされており、DynamoDB Global Tables と同様に DynamoDB Streams を使用してデータを移動します。DynamoDB へのハイブリッドの転送については、そのために活用できる Cassandra CDC の改善点を確認し、Change Data Capture(CDC)の機能の更新については、DataStax ブログに注目してください。
このプロキシが提供するもの
このプロキシは、DynamoDB アプリケーションのデータを Cassandra に格納できるようにするものです。この新しいツールを活用していただくとともに、花開いてもらうために、これをオープンソースの Apache 2 ライセンスのプロジェクトとして公開するのが最善と我々は判断しました。
このコードは、DynamoDB アプリケーションとデータベースとの間に座るスケーラブルなプロキシレイヤーを構成します。DynamoDB SDK との互換性を提供することで、既存の DynamoDB アプリケーションに変更を加えずに、Cassandra との間でデータの読み書きができるようにします。
仕組み
このプロキシを設計するにあたり、いくつかの設計上の意思決定をしました。これらの決定は、Cassandra および当社の DataStax Enterprise 製品を対象とした開発の際に我々がいつも紹介する設計原則に沿ったものとなります。
別のプロセスにする理由
これを基本プロセスの一部として動作する Cassandra のプラグインとして実装することもできたとは思いますが、以下の理由から、別のプロセスとして実装することにしました。
- Cassandra とは独立にプロキシをスケールできるようにする
- Kubernetes やクラウドネイティブなツール類を活用できるようにする
- 開発者の利便性とコントリビュータへの訴求 - 開発者が Cassandra の内部実装について限定的な知識しかなくても、当プロジェクトに参加できるように
- Apache Cassandra のプロジェクトに縛られない独自のリリースサイクルを保てるように
- AWS とのインテグレーションに馴染むステートレスなアプリを考慮して(CloudWatch アラーム、オートスケーリング、など)
プラガブルなパーシステンスにする理由
ざっと見たところ、DynamoDB にデータモデルは比較的シンプルです。ハッシュキー、ソートキー、そしてアイテムと呼ばれる JSON 部分からなります。DynamoDB のデータモデルは、目的に応じて、Cassandra Query Language(CQL)にいくつかの方法でパーシストできます。実験的な実装やプラガブルな実装を可能とするために、変換レイヤーをプラガブルな形で用意し、様々な Translator を実装できるようにしました。この足場から、様々なデータモデルをテストしてみて、以下のそれぞれについてどうれが最適なのかを決めていければと思います。
- 異なるワークロード
- 一貫性やリニアライズの要件に応じた実装
- SLA に応じたパフォーマンスの様々なトレードオフ
おわりに
DynamoDB のワークロードを Cassandra で動かすことに少しでも興味があれば、ぜひプロジェクトをのぞいて見てください。始めるのは簡単ですし、説明は readme と DynamoDB に関わる文書に記載してあります。このプロキシがサポートする機能は早いペースで増えていますが、コントリビューションももちろん歓迎します。
https://github.com/datastax/dynamo-cassandra-proxy/
製品及び企業の名称は、それぞれの所有者の商標または登録商標です。これら商標の使用は、当該商標の所有者との提携やその所有者による支持を暗黙に示すものではありません。
1 DynamoDB のドキュメントでは、これはしばしば「パーティションキー」と呼ばれていますが、DynamoDB のパーティションとは必ずしも1対1で対応するものでないため、ここでは代わりにハッシュキーという言葉を使います。