特徴
柔軟なインストール
CHMPXは、あなたのOSに応じて、柔軟にインストールが可能です。あなたのOSが、Ubuntu、CentOS、Fedora、Debianなら、packagecloud.ioからソースコードをビルドすることなく、簡単にインストールできます。それ以外のOSであっても、自身でビルドして使うことができます。
構成
CHMPXは、サーバーノードとスレーブノードの2つのタイプが存在します。
サーバーノードは主に、データ/サービス/機能などのリソース提供するサーバープログラムの動作するホスト上で動作させます。
スレーブノードは、サーバープログラムからリソースを提供されるクライアントプログラムの動作するホスト上で動作させます。
CHMPXのサーバーノードとスレーブノードは以下のように接続されます。
クラスタ
構成の図のように、サーバーノードは複数のサーバーノードによりConsistent Hashingを使い疑似的RINGを構成し、クラスタを構成します。
RING上のサーバーノード同士は、互いを認知しており、RINGに参加する/退出するサーバーノードも認識します。
スレーブノードは、RING上の複数のサーバーノードで構成されたクラスタと常時接続している状態となっています。
クラスタタイプ
CHMPXのクラスタには、以下の2種類があり、スレーブノードからのデータ送信に違いがあります。
- random
サーバーノードのRINGの中の1台に対してデータ送信を行います。 - hash
Consistent Hashingをベースに計算したHashを使い、サーバーノードのRINGの中の特定の1台に対してデータ送信を行います。
サーバーノードからスレーブノードへのデータ送信(返信)は、スレーブノードを指定して行われます。
上記いずれのタイプで構成されていても、ブロードキャストとしてクラスタ内の全サーバーノードに対してデータ送信を行うことが可能です。
サーバーノード多重化
hashタイプのクラスタの場合、Consistent Hashingをベースに計算された1つのサーバーノードへの通信を行います。
特定されたサーバーノードが障害などで通信できない場合、CHMPXの設定により補助的なサーバーノードと通信します。
これにより、クラスタ内のサーバーノードに障害が発生してもサービスを提供維持できます。
補助サーバーの設定は、0~設定することができ、2と設定している場合には、2台まで障害が発生してもサービスを維持できます。
クラスタのスケール
サーバーノードは、任意のタイミングでクラスタへ参加/退出ができる設計となっています。
クラスタのスケールアウトを行う場合が高負荷となった場合などに、任意のタイミングでサーバーノードの追加ができます。
スケールを行う場合の処理を自動化し、オートスケールとして動作させることができます。
サーバープログラムがもつリソースのスケールが必要な場合でも、CHMPXのオートスケールと同時にデータマージの処理を自動で補助する機能を提供していますので、サーバープログラムでこの機能をインプリメントすることでオートデータマージが実現できます。
通信データ
通信するデータの形式は自由であり、バイナリデータの通信を行うことができます。
通信するデータの上限は、CHMPXとしては制限していません。よって大容量のデータ(~数十MB程度)の送受信をサポートします。
この制限は、システム依存(および K2HASH ライブラリ依存)となっています。
通信暗号化
SSLでの通信をサポートしています。
通信多重化・同時並列処理
サーバー/クライアントプログラムとCHMPX、CHMPX間の通信は全て多重化が可能となっています。
1つのデータを送受信中であっても、他のデータの送受信も可能です。
また、送受信におけるスレッド数を設定することもでき、同時並列処理を可能とします。
通信データのキューイング
送受信データのキューイングがなされていますので、ある程度の送受信遅延、高負荷にも対応できます。
ただし、設定できるキューイングの状態には制限もあり、長期間のキューイングできない場合があります。
この場合にはサーバーおよびクライアントプログラムでの処理が必要です。
マルチプロセス・マルチスレッドプログラム
サーバー/クライアントプログラムは、マルチプロセス、マルチスレッドでCHMPXへの接続が可能です。
サーバー/クライアントプログラムは、他のプロセス、スレッドを意識せずCHMPXを通した通信を行うことができます。