Blog

バージョン3.11のリリースについて

Author's photo
Aerospike Marketing
May 17, 2017|10 min read

Aerospike 3.11のリリースをアナウンスさせていただきます。このリリースでは、高いスケーラビリティとパフォーマンスを有するキー・バリュー・ストア・データベースをご提供するという弊社の最重要ミッションをさらに押し進めるため、ハイブリッド・メモリ・アーキテクチャに関する改善と、キー認証によるトランスポート暗号化等の企業向けに重要な機能を追加しました。

ハイブリッド・メモリ・アーキテクチャに関する改善

Aerospikeは、最新のIntel CPUと大容量のSSD等、種々のハードウエア上で最高のパフォーマンスを提供します。他のデータベースに比べ、Aerospikeは、高機能マルチコア・サーバによるスケールアップと、運用時のダウンタイム無しにサーバをクラスタに追加可能なスケールアウトの両面から、システムのTCO (Total Cost of Ownership)の大幅な改善が可能です。各ノードが10億件以上のオブジェクトを保持するような場合、これまで以上のパフォーマンス向上のため、新たな最適化を行いました。

バージョン3.11では、サブツリー、あるいは、部分木と呼ばれる機構によるロック粒度の向上を図りました。Aerospikeのパーティション機構における、探索木とハッシュ・テーブルの結合という革新的な組み合わせにより、DRAM使用率の低減と最新のフラッシュ・ストレージに必要とされる高度な並列化の向上を実現しました。ノードの同期化やオブジェクトの有効期限管理等のバックグラウンド処理の影響も低減できました。ロックや部分木についての詳細は、configuration referenceをご参照ください。

上記の変更の結果、DRAM上のインデックス配置が変更となったため、その有効化のためにはクラスタのコールド・スタートが必要です。運用上の詳細については、cold start guideをご参照ください。この変更は、クラスタ間のバージョンについては互換があり、異なるバージョンのクラスタの相互動作に問題はありません。また、クライアントのバージョンアップは必要ありません。

さらに、サード・パーティのライブラリ(JEMalloc)に起因するマルチ・コアのスケーラビリティ問題を見つけました。そのため、最新のバージョンJEMalloc v4.2.1にアップグレードし、その新しい低層のインターフェースを利用することにより、DRAMのパフォーマンスを大きく向上させることができました。あるケースでは、マルチ・コア・システム上で、2倍のパフォーマンスを達成しています。

TLSトランスポート暗号化

Aerospikeはずば抜けた低レイテンシを提供することで知られており、それゆえ、単一のネットワーク・セキュリティ・ドメインにデプロイされることが多いのですが、ある環境ではセキュリティ・ドメインを超えてデプロイする必要があり、トランスポート暗号化が必要となります。この機能は、より高速なリスク解析、不正検出と防止、アカウント管理のためにAerospikeを利用されている金融機関のお客様からリクエストされたものです。

弊社のお客様のご協力もいただき、Aerospikeは、クライアントとサーバの間とデータセンタ間において、TLS 1.2をサポートしました。なお、AerospikeのEnterprise Editionでは、バージョン3.5.2以降、アクセス制御もサポートしています。

証明書に基づくサーバ承認もサポートされました。クライアントは公開キーを設定することができ、Aerospikeクラスタの暗号化確認が可能となります。クラスタの証明書を指定することで、御社のインフラ環境内での攻撃を避けることができます。

弊社の実施したテストによると、IntelのCPU内のAES命令セット(2010年から利用可能)とGCM (Galois Counter Mode)を利用することが非常に重要であることが分かりました。GCMモードのAES-256とCBCモードのAES-256では、パフォーマンスに顕著な違いがありました。ハードウエアに依存しますが、GCMモードでは最小限(20%)のパフォーマンスの低下が見られるのに対し、CBC モードではその5倍の低下が観測されました。Aerospikeのクライアントとサーバは、より高いパフォーマンスの暗号スイートの使用を試みるように設定ができます。ただし、TLSをJavaクライアントでご利用され、かつ、高いパフォーマンスが必要な場合、弊社サポートにご連絡ください。

TLS暗号化をサポートしているクライアントは、Javaクライアント3.3.1、C#クライアント3.3.0、Cクライアント4.1.0、Goクライアント1.24.0です。バージョンアップの際は、クライアントを先に行ってください。他のクライアントに関しても、6ヶ月程度以内にこの機能をサポートしていく予定です。

この機能をサポートしているサーバ・エディションは、Enterprise Editionです。詳細については、feature guidedeployment guide をご参照ください。

クライアントの改善

Kafkaコネクタ: 今回、Kafkaコネクタを更新しました。その結果、Aerospikeや他のデータベース(レポート用のデータベース、既存のデータベース、ホット・スタンバイのAerospikeクラスタ等)に外部データを容易に注入することが可能です。詳細は、Kafka Connect documentationをご参照ください。

Rustクライアント: Rust言語のためのクライアント(ベータ版)をリリースしました。詳細は、github repositoryを参考にしてください。

IPv6: バージョン3.10で導入された機能ですが、今回、Java、C、C#、Go、Node.jsに対応しました。

ソートMap: この機能もバージョン3.10で導入されたものですが、より改善され、正式リリースとなりました。サポートしているクライアントは、Java、C、C#、Go、Node.js、Python、Rubyです。

その他の主要な改善とバグフィックス

バージョン3.11では、以下の改善も為されています:

  • TTLを変更しない更新:更新時のTTLをそのまま変更せずに書き込みたい場合に便利な機能です(バージョン3.10.1から導入)。

  • 競合解消:ジェネレーションを利用した競合解消の際、ジェネレーション・カウントが最大値を超えた場合に、データの再同期の際の不正確な比較が発生する可能性があります。現在、使用しているアルゴリズムは、純粋により大きなものを採用するものです(バージョン3.6以前と同様)。

  • パフォーマンス:あるトランザクションがデータを読み込もうとしものの無い場合、そのデータのコピーを探そうとします。今後は、そのようにすることを明示的に設定した場合のみとなりました。

  • Operations: クラスタ構成の変更後のデータの同期の際に、一台のサーバに対する同時書き込みを行うサーバ台数を制限することができるようになりました。その結果、構成変更後の処理がよりスムースになります。

  • チューニング:トランザクションを処理するスレッド数を、動的に“transaction-threads-per-queue”を変更することで可能になりました。この変更にリスタートは必要ありません。

より詳細な情報は、リリースノートをご参照ください。

次のリリースでは?

次のリリース(3.12)では、いくつかの新しい機能を追加する予定です。下記は予告編としてご覧ください(ただし、コミットではありません)。

  • 大規模クラスタやパブリック・クラウド環境でのより高い安定性のためのPaxosクラスタリング・アルゴリズムの向上

  • ダウンタイム無しのNamespaceの追加や削除

  • 増加分のバックアップとリストア

Aerospike 3.11をダウンロードしたい方は、弊社のダウンロード・ページへ

Aerospikeの改善や拡張のため、皆様のご意見をお待ちしております。フィードバック、アイデア、ご質問は、user forumにお願いします。また、Aerospikeユーザ・コミュニティに貢献したいと考える新しい機能のため、Githubにイシューを登録したり、プル・リクエストを設定してください。