Couchbase Serverのアーキテクチャ

Couchbase Serverは分散型のNoSQLデータベースです。クラウドや汎用的なハードウェアを用いてスケールアウトします。Couchbaseは柔軟なデータモデルを持ち、高いパフォーマンスを24時間365日発揮します。

高度なデータベースのアーキテクチャ

Couchbaseのクラスタ内に格納されている全てのノードは同じ機能を持っており、データ管理とクラスタ管理の2つの役割を担っています。その他の重要な機能として、インクリメンタルMapReduceによるインデックス作成とクエリの実行や、地理的に離れているデータセンター間でのレプリケーションを行うクロスデータセンタレプリケーション(XDCR)があります。 .

アプリケーションはCouchbaseの提供するSDKを使って、Couchbase Serverのクラスタと連携することが可能です。 SDKはJava, .NET, PHP, Ruby, C,またC++などメジャーな開発言語に対応しています。

CouchbaseのSDKはクラス構成を把握しており、自動的に適切なサーバにリクエストを送信します。

サーバ障害が生じた際、Couchbase Serverは異常を検出し、レプリカのデータをアクティブに切り替えます。それと同時に、新しいクラスタ構成でクラスタマップを更新します。アプリケーションサーバ上のCouchbaseクライアントは自動的に新しいクラスタマップを検知し、アプリケーションの変更やダウンタイムを生じさせずに正常なサーバへリクエストを送信します。

データはクライアント上で、コンシステントハッシュ法に基づいてシャードに割り振られ、全てのサーバのノードに均等分散されます。クラスタマップはどのノードが何のデータを持っているか監視し、かつノードが追加された場合やレプリカに移行された場合、また障害時などのノードの動きも把握しています。

サーバのアーキテクチャ

Couchbase クラスタ内の全てのサーバは同じ機能を持っており、クラスタ管理とデータ管理の2つの役割を担っています。このサーバ構造は単一障害点を生じさせること無く水平方向にスケールが可能です。アプリケーションのダウンタイムを生じさせずにワンクリックでクラスタの増減が可能です。Couchbase Serverは1ミリ秒以下のレイテンシと高スループットを実現したハイパフォーマンスなNoSQLデータベースです。数台のサーバでも、アプリケーションに同時アクセスするユーザに快適な環境でサービスの提供をすることができます。

クラスタマネージャ

クラスタマネージャはクラスタ内の全サーバの設定情報と動向を監視しています。また、レプリカやリバランスなどノード間の構成や動向の監視を行ったり、クラスタの統計情報収集や統合機能、REST APIによる管理機能を提供します。クラスタマネージャはErlang/OTP上に形成され、障害にも耐えうる負荷分散システムです。

サーバに障害が発生すると、クラスタマネージャはノードの異常を察知し、レプリカをアクティブに設定します。そして、クラスタマップを再構築し、クライアントのアプリケーションにダウンタイムが生じないようにします。新しいサーバがクラスタに追加される場合、または既存のサーバが削除された場合には、データとI/Oが全てのノードに均一に分散配置されるようにデータのリバランスを行います。

データマネージャ

データマネージャはデータのストレージとアクセスの役割を担っています。各ノードにはデータマネージャが配置されており、各ドキュメントは最大で3つまでレプリカをクラスタ上に作成することが可能です。シャード単位で、アクティブとレプリカのデータを管理します。1024個のシャードがクラスタ内の複数のノードに均一に分散配置されます。JSONドキュメントは論理的に構成されたバケットと呼ばれる入れ物に分散されます。クライアントはシャードと連携したノードと直接やり取りをすることによって、バケットに格納されたドキュメントにアクセスします。

データマネージャはキャッシュを内蔵しており、データの負荷やサイズに関わらず、1ミリ秒以下の速さで書き込み/読み込み処理を行います。書込み/読込みの処理はまずメモリ内キャッシュで処理されます。仮にこのキャッシュに読込み対象のドキュメントがない場合、ディスクより読込まれます。ドキュメントの更新はまずメモリ内キャッシュで行われ、非同期的にディスクに永続化されます。少ないサーバで数百万ユーザに対応する為に、ドキュメント単位の粒度の細かいロックを行う事でリクエスト処理性能を向上させます。

データマネージャは2つのmemcapableポートを持ち、1つはCouchbaseのクライアントをサポートし、もう1つはプロキシ経由でmemcachedのクライアントライブラリをサポートします。この2つのポートによって、 memcachedは簡単にCouchbase Serverへ置き換える事ができます。スキーマレスなデータは追記専用のストレージに格納され、インデックス作成とクエリの実行はクラスタを跨って行われます。データマネージャの大半はCまたはC++によってコーディングされています。

インデックス作成とクエリ実行

Javascriptで記述されたインクリメンタルMapReduceを使うことによって、データの一部を対象としたシンプルかつリアルタイムでの分析が可能です。インデックス作成とクエリは分散形式で実行されます。クエリのリクエストはCouchbaseのサーバを跨って分散され、集計結果がクライアントに戻されます。

クロスデータセンタレプリケーション(XDCR)のアーキテクチャ

Couchbase Serverは、異なるクラスタ間でのデータ複製が簡単にできます。データは複数のデータセンタ間で複製され、災害からの復旧や、ユーザにとって身近なデータセンタにデータを複製することによってデータへの高速アクセスを実現します。XDCRとクラスタ内のレプリケーションは同時に行われます。下記の図の通り、レプリケーションはデータセンタ1とデータセンタ2のクラスタ内でそれぞれ行われ、XDCRが実行されると以降は自動的にこれら2つのデータセンタ間でもレプリケーションが行われます。どちらのデータセンタもアプリケーションからの書込み/読込みのリクエストに応えます。