ApacheIgniteでCassandraの下で火をつける

Nikita Ivanovは、GridGainSystemsの共同創設者兼CTOです。

Apache Cassandraは、いくつかの理由で人気のあるデータベースです。オープンソースの分散型NoSQLデータベースには単一障害点がないため、高可用性アプリケーションに最適です。マルチデータセンターレプリケーションをサポートしているため、組織は、たとえば、複数のアマゾンウェブサービスのアベイラビリティーゾーンにデータを保存することで、より高い復元力を実現できます。また、大規模で線形のスケーラビリティを提供するため、任意のデータセンターの任意のCassandraクラスターに任意の数のノードを簡単に追加できます。これらの理由から、Netflix、eBay、Expediaなどの企業は、長年にわたってビジネスの主要部分にCassandraを使用してきました。

ただし、時間の経過とともに、ビジネス要件が進化し、Cassandraの展開が拡大するにつれて、多くの組織は、Cassandraの制限のいくつかに制約され、データを使用して実行できることを制限します。インメモリコンピューティングプラットフォームであるApacheIgniteは、これらの組織にCassandraインフラストラクチャにアクセスして管理する新しい方法を提供し、非常に高いパフォーマンスを提供しながら、Cassandraデータを新しいOLTPおよびOLAPユースケースで利用できるようにします。

カサンドラの制限

Cassandraの基本的な制限は、インメモリデータベースではなく、ディスクベースであるということです。つまり、読み取りパフォーマンスは常にI / O仕様によって制限され、最終的にはアプリケーションパフォーマンスが制限され、許容可能なユーザーエクスペリエンスを実現する機能が制限されます。この比較を検討してください。インメモリシステムで1分で処理できるものは、ディスクベースのシステムでは数十年かかります。フラッシュドライブを使用しても、それでも数か月かかります。

Cassandraは非常に高速なデータ書き込みパフォーマンスを提供しますが、最適な読み取りパフォーマンスを実現するには、Cassandraデータをディスクに順次書き込む必要があります。これにより、読み取り時に、ヘッドが場所から場所へホッピングする待ち時間なしに、ディスクヘッドを可能な限り長くスキャンできます。 。これを実現するには、クエリはJOINs、GROUP BYs、または集計のない単純なものである必要があり、データはそれらのクエリ用にモデル化する必要があります。したがって、CassandraはアドホックまたはSQLクエリ機能をまったく提供しません。

Apache Cassandraの商用版を開発およびサポートする会社であるDataStaxは、分析をサポートするためにCassandraをApacheSparkおよびApacheSolrに接続する機能を追加しました。ただし、コネクタの使用はデータのサブセットにアクセスするための非常に費用のかかる方法であるため、この戦略によるメリットは限られています。それでもデータを順番に配置する必要があります。そうしないと、Cassandraが全表スキャンを実行する必要があるため、パフォーマンスが低下します。これは、大量のディスク遅延を伴う分散/収集アプローチです。

Cassandraのもう1つの潜在的に重要な制限は、結果整合性のみをサポートすることです。ACIDに完全に準拠していないため、お金を移動したり、リアルタイムの在庫情報を必要とするアプリケーションには使用できません。

これらの制限の結果として、Cassandraに保存したデータを新しいビジネスイニシアチブに使用したい組織は、その方法に苦労することがよくあります。

ApacheIgniteを入力してください

Apache Igniteは、コネクタアプローチのオーバーヘッドコストを回避しながら、Cassandraのこれらの制限を克服するのに役立つインメモリコンピューティングプラットフォームです。 Apache Igniteは、Apache Cassandraと既存のアプリケーション層の間に挿入できます。Cassandraデータを変更せず、アプリケーションに最小限の変更を加えるだけです。 CassandraデータはIgniteインメモリクラスターにロードされ、アプリケーションはディスクからではなくRAMからデータに透過的にアクセスし、パフォーマンスを少なくとも1,000倍高速化します。アプリケーションによって書き込まれたデータは、最初にIgniteクラスターに書き込まれ、すぐに継続的に使用されます。次に、同期書き込みまたは非同期書き込みのいずれかで永続的に保存するために、Cassandraのディスクに書き込まれます。

ApacheIgniteもApacheCassandraと同じ書き込み戦略を持っているため、Cassandraユーザーにはなじみがあります。Cassandraと同様に、Igniteはオープンソースであり、そのユーザーは大規模でアクティブなコミュニティの恩恵を受けており、多くのコミュニティWebサイトを通じてサポートを利用できます。ただし、インメモリコンピューティングプラットフォームとして、Apache Igniteを使用すると、組織はCassandraデータでより多くのことを実行でき、より高速に実行できます。方法は次のとおりです。

  • その他のデータオプション-ANSISQL-99およびACIDトランザクションの保証

    ANSISQL-99準拠のエンジンを搭載したApacheIgniteは、分散トランザクションに対してACIDトランザクション保証を提供します。そのインメモリSQLグリッドはインメモリデータベース機能を提供し、ODBCおよびJDBCAPIが含まれています。IgniteをApacheCassandraと組み合わせることにより、IgniteにロードされたCassandraデータに対して任意のタイプのOLAPまたは複雑なSQLクエリを書き込むことができます。Igniteは、結果整合性からリアルタイムの完全なACID準拠まで、複数のモードで操作することもできます。これにより、組織はCassandraに保存されている(ただしIgniteに読み込まれる)データを多数の新しいアプリケーションやイニシアチブに使用できます。
  • Cassandraデータのリモデリングはありません

    ApacheIgniteはApacheCassandraおよびその他のNoSQLデータベースから読み取るため、CassandraデータをIgniteに移動するためにデータを変更する必要はありません。データスキーマは、そのままIgniteに直接移行することもできます。
  • データ集約型アプリケーションの高速化

    すべてのApacheCassandraデータをRAMに移動すると、データが常にディスクから読み取られたりディスクに書き込まれたりするわけではないため、パフォーマンスが最速になり、クエリ速度が大幅に向上します。Apache Igniteを使用してCassandraデータのアクティブな部分のみをキャッシュし、大幅な速度向上を実現することもできます。Igniteのインデックスもメモリ内に存在するため、Igniteに移動されたCassandraデータに対して超高速SQLクエリを実行できます。
  • 単純な水平および垂直スケーリング

    Apache Cassandraと同様に、Apache Igniteは、Igniteクラスターにノードを追加することで水平方向に簡単にスケーリングできます。新しいノードは、Cassandraデータをキャッシュするための追加のメモリを即座に提供します。ただし、Igniteは垂直方向にも簡単にスケーリングできます。Igniteは、JVMメモリだけでなく、ノード上のすべてのメモリを利用できます。オブジェクトは、ヒープ上またはヒープ外に存在し、マシン上のすべてのメモリを使用するように定義できます。このように、各ノードのメモリ量を増やすだけで、Igniteクラスターが自動的に垂直方向にスケーリングされます。
  • 可用性の向上

    Apache Cassandraと同様に、ピアツーピアのApacheIgniteコンピューティングプラットフォームは常に利用可能です。ノードに障害が発生しても、アプリケーションは定義されたバックアップノードへの書き込みおよび定義されたバックアップノードからの読み取りを妨げることはありません。Igniteクラスターが大きくなると、データの再配布も自動的に行われます。Igniteは、スプリットブレイン状態の検出や修復など、高度なクラスタリングサポートを提供するため、Cassandra / Igniteを組み合わせたシステムは、スタンドアロンのCassandraシステムよりも利用しやすくなっています。
  • Hadoopよりもシンプルで高速

    Apache CassandraデータにSQLクエリを作成したい多くの組織は、データをHadoopにロードすることを検討しています。このアプローチの欠点は、発生するETLとデータ同期の課題を解決した後でも、Hadoopへのクエリが比較的非常に遅いことです。CassandraとIgniteを組み合わせると、システムとキャッシュが追加されるため、パフォーマンスがわずかに低下しますが、クエリは非常に高速に実行されるため、リアルタイム分析に最適なソリューションになります。また、IgniteとCassandraのデータ間の関係の管理ははるかに簡単です。

CassandraとIgniteの実装への挑戦

上記のように、ApacheCassandraとApacheIgniteを組み合わせるにはコストがかかります。 (他のソリューションを追加した場合と同様に)2つのネットワークを使用すると、当然、パフォーマンス(およびコストとメンテナンス)が低下します。新しいコモディティサーバーと十分なRAMにはハードウェアコストがかかり、エンタープライズグレードでサポートされているバージョンのApacheIgniteにはサブスクリプションコストがかかる可能性があります。さらに、Igniteの実装と保守には、一部の組織が追加の専門知識を採用する必要がある場合があります。その結果、コスト/利益分析は、パフォーマンスの向上とともに、新しいユースケースの戦略的利益がコストを上回っていることを確認するために保証されます。

この決定を行う際には、以下の考慮事項が重要です。まず、複数の製品を組み合わせる必要があった前世代のインメモリコンピューティングソリューションとは異なり、ApacheIgniteは完全に統合された展開が容易なソリューションです。 IgniteとApacheCassandraの統合は、通常、非常に簡単なプロセスです。 Igniteは、Cassandraと、データにアクセスするApacheKafkaやその他のクライアントなどのアプリケーションとの間をスライドします。 Igniteには、プロセスを簡素化するビルド済みのCassandraコネクタが含まれています。次に、アプリケーションはCassandraではなくIgniteから読み取りと書き込みを行うため、常にディスクではなくメモリからデータにアクセスします。 Igniteは、Cassandraとの間の読み取りと書き込みを自動的に処理します。

第2に、多くの人が依然としてインメモリコンピューティングを法外に高価であると考えていますが、RAMのコストは1960年代から年間約30%減少しています。RAMはSSDよりもはるかに高価ですが、特に大規模でミッションクリティカルなアプリケーションの場合、インメモリコンピューティングクラスターでテラバイトのRAMを利用することによるパフォーマンス上の利点により、インメモリコンピューティングが最も費用効果が高くなる可能性があります。アプローチ。

最後に、Apache Igniteは、成熟したコードベースを備えた安全な方法です。これは2007年にプライベートプロジェクトとして始まり、2014年にApache Software Foundationに寄付され、約1年後にトップレベルプロジェクトに卒業しました。これは、ApacheSparkに次ぐ2番目に速いApacheプロジェクトです。

Apache Cassandraは、多くのデータ戦略の重要な要素となる可能性のある、確かで実績のあるソリューションです。 Apache Igniteを使用すると、Cassandraデータをより便利にすることができます。ApacheIgniteインメモリコンピューティングプラットフォームは、今日のWebスケールアプリケーションの極端なパフォーマンス要求に対応しながら、Cassandraデータを新しいOLTPおよびOLAPのユースケースで利用できるようにする手頃で効果的なソリューションです。 。組み合わせたソリューションは、Cassandraの高可用性と水平方向のスケーラビリティを維持しながら、ANSI SQL-99準拠のクエリ機能、垂直方向のスケーラビリティ、ACIDトランザクション保証とのより堅牢な一貫性などを追加し、ディスクベースの1,000倍のパフォーマンスを提供します。アプローチ。

New Tech Forumは、前例のない深さと幅で新しいエンタープライズテクノロジーを探索して議論する場を提供します。選択は主観的であり、読者にとって重要で最も興味深いと思われるテクノロジーの選択に基づいています。出版用のマーケティング資料を受け入れず、寄稿されたすべてのコンテンツを編集する権利を留保します。すべてのお問い合わせは[email protected]までお送りください。