Yellowfinクラスタで高速かつ障害に強いインサイトを
Yellowfin 8では、クラスタリング機能を強化しました
Yellowfinでクラスタ環境を構築した際に従来以上のメリットを享受することができます。
クラスタ環境を構築すべき理由
クラスタとはアプリケーションを実行するために相互接続されたノードグループです。複数のタスクを同時に実行することで並列計算を最適化します。含まれるタスクの種類には、webリクエストやバックグラウンドタスクなどがあります。
単一ノードがアプリケーション全体の管理を担う構成とは異なり、クラスタはロードバランシングを可能にし、高可用性を実現します。ロードバランシングは、ノード間でタスクを分割することによってアプリケーションの高速処理を可能にします。仮にいずれかのノードがオフラインになっても、常にタスクを引き継ぐ別のノードが現れることで、ビジネスに安定した環境を提供します。そのため、継続的にバックグラウンドで解析を実行し、インサイトを提供するYellowfinシグナルのような高度な機能を稼働させる場合は、結果を最速で提供し障害を最小限に抑えるためにYellowfinをクラスタ環境に構築するのが最善です。
Yellowfinクラスタリングの基礎
Yellowfinのクラスタリングでは、考慮すべき主要なコンセプトがいくつかあります。それは、アプリケーションレベルの連携、ロードバランシング、バックグラウンド処理です。それぞれの目的とその実装方法について、以下で詳しく説明していきます。
アプリケーションレベルの連携は各ノードがお互いに通信できるようにすることでクラスタの適切な動作を保証します。ノードがオフラインになったり、新しいノードがクラスタに参加したりするなど、構成が変更されるたびに各ノードへ更新情報が通知されます。これはアプリケーションタスクにも当てはまります。ノードのキャッシュからレポートがクリアされた場合、このレポートはすべてのノードからクリアされる必要があります。また、あるノードのライセンスを更新した場合、他のすべてのノードも同じく更新されます。アプリケーション連携はクラスタ全体を通してデータの一貫性を保ち、最新に更新する責任があります。
この連携機能はクラスタリングモードの実装方法によって異なります。Yellowfinのクラスタリング構成は各ノード間の通信方法が異なる3つの実装モードをサポートします。
- Legacy:ノード間の通信にWebサービスを活用する旧来のYellowfinクラスタ設定です。より高速なDynamicモードとRepositoryモードが存在しますので、このモードの利用は推奨されません。
- Dynamic:このJGroupライブラリ活用モードはUDPプロトコル経由でノードの通信を可能にします。このモードはAWSのようにUDPをブロックする可能性のあるいくつかの環境で制限が発生するかもしれません。
- Repository:Yellowfinの推奨モードであり、Dynamicモードと類似していますが、業界標準のTCP通信プロトコル(TCP/IPからIPを差し引いたもの)を使用します。
ロードバランシングの挙動
その名が表す通り、ロードバランサーの目的は接続されたノードグループ間の負荷分散です。Webサービスと同様に、これらのノードはユーザーにより開始されたWebリクエストを処理します。ここでいうWebリクエストとは、レポートにフィールドをドラッグしたり、Webサービスを使用するなど、ユーザーが実行するあらゆるユーザーインターフェイスタスクを指します。これらのリクエストの他に、アプリケーションが実行するバックグラウンドタスクもありますが、これについては後ほど紹介します。
タスクの割り当てのためにロードバランサーを設定する2つの方法のうち、Yellowfinはスティッキーセッションの実装を推奨します。これは、ひとつのユーザーセッションからのすべてのトラフィックを、それが終了するまで同一のノードが制御する方法です。割り当てられたノードのみがタスクの実行に必要なユーザーのセッションオブジェクトを作成し維持するので、この方法は理想的だと言えます。ここでのリスクは、割り当てられたノードに障害が発生した場合にセッションが終了してしまうので、保存されていない情報が失われる可能性があることです。
一方で、コンテナレベルのセッションレプリケーションという方法があります。このタイプの実装では各リクエストを処理するノードをロードバランサーがランダムに割り当てます。この方法の場合、すべてのノードが全ユーザーセッションオブジェクトを保存しなくてはいけないため、余分なメモリの消費が要求されます。ユーザー情報が更新されるたびにコンテナレベルのセッションレプリケーションは変更が複製され、すべてのノードに同期されることを保証し、これが追加処理を発生させます。
ロードバランサーの実装を省略した場合、すべてのWebリクエストを単一ノードで処理しなくてはいけなくなるので、Yellowfinではこれを推奨しません。なぜなら、特にユーザー数が多い場合に処理が遅くなる可能性があり、単一障害点をつくるからです。指定されたノードに障害が発生したとき、そのタスクを処理する自動置換ノードは存在しないので、Webトラフィックを手動で他のノードにリダイレクトする必要があります。そのため、ロードバランサーの実装は強く推奨されます。これによりwebリクエストの高速処理と可用性の向上が保証され、安心を得ることができます。
クラスタをマスターする
Webリクエストのほかに、クラスタ内で同時に処理される他のタスクがあります。
- バックグラウンドタスク:バックグランド実行が設定されたすべてのYellowfinタスクです。例えば、レポートのブロードキャスト、シグナルの解析、データトランスフォーメーションや、アクセスフィルターの更新などです。
- クラスタメンテナンス:内部キャッシュを最新の状態に保ちます。例えば、ライセンスの再読み込み、キャッシュからのビュー、ダッシュボード、レポートコンテンツのクリア、タスク調整などです。
Yellowfin 8以降、バックグラウンド処理は大幅に再構成されました。これは「マスタ・スレーブ」コンセプトをサポートします(クラスタメンテナンスは含まれていないことに注意してください)。このタイプの実装について簡単に説明すると、ひとつのノードを「マスタ」として選択し、その他すべてのノードを「スレーブ」とします。マスタノードには、2つの役割があります。
- 実行が必要なタスクの割り出し
- マスタ自身も含めて、割り当て可能なノードへのタスクの割り当て
また、クラスタノードを制御するための追加機能も実装しました。システム管理者はYellowfinクラスタ内でマスタとスレーブノードを指定することができます。スレーブノードにタスクを割り当てるときに、選択されたノードはそのタイプのタスクを実行できる容量がなくてはいけません。システム管理者はノードがタスクを処理しないように設定できるようになりました。これにより、マスタは対象のノードにタスクを割り当てることがなくなります。これはマスタに対しても設定できるため、マスタをタスクの実行調整にだけ割り当てることができます。ノードはまた、マスタノードにならないように設定することも可能です。
クラスタは、ある時点で単一のマスタしか持つことができません。そのノードに障害が発生した場合、クラスタは他の割り当て可能なノードをマスタとして選択します。マスタをロードバランサーと混同しないでください。それぞれがクラスタ全体の様々な種類のタスクを管理します。
特定のノードをバックグラウンドタスクのみを処理するように指定することもできます(これをマスタノードに管理させることができます)。他のノードをWebリクエストのみを処理するように指定することも可能です(これをロードバランサーにより管理させることができます)。
この記事で推奨し、共有したヒントをもとに、それぞれの環境に理想的なクラスタリングを構築してください。新しい機能強化ではクラスタパフォーマンスの高速化と障害に強い設定を実装しています。
あなたのビジネスが、Yellowfinの自動データディスカバリー機能を実行するクラスタシステム上で運営されていると想像してみてください。
クラスタリング設定ガイド
Yellowfinのクラスタリング設定について、より詳細な情報は、以下のリンクからYellowfinのwikiを参照してください。