Couchbase Server 2.0は、サーバのウォームアップの性能を改善しました。これはデータを提供できるようになる前に、再起動されたサーバが実行しなければならない処理です。このプロセス中の間、サーバはディスク上に永続化されたアイテムをRAMにロードします。データをロードするための一つのアプローチは、ディスクからRAMにアイテムの順次読み込みを行うことです。しかし、サーバはアイテムが頻繁に使用されているかどうかを考慮しないので、必ずしも効果的なプロセスではありません。Couchbase Server 2.0では、ウォームアップ処理の間、データをより迅速に利用できるように、そしてアクセスログから頻繁に使用するアイテムの優先順位を高くするように、最適化処理を追加しています。サーバは、最も頻繁にアクセスされるキーのリストを事前にフェッチし、ディスクから他のアイテムをフェッチする前に、それらのドキュメントをフェッチします。
また、サーバはどのキーが最も頻繁に使用されるかを判定する、変更可能なスキャナのプロセスを実行します。初期化時間とプロセス間隔の変更は、Couchbase Serverのコマンドラインツールから行えます。アプリケーションにピークタイムがあり、その時間帯に使用されるキーを、サーバの再起動後に速やかに利用できるようにしたい場合などに有効でしょう。詳細については、「アクセスログ設定の変更」を参照して下さい。
サーバーは、すべてのドキュメントのキーがRAMにロードされる前にreadyモードに切り替わることができ、データの提供を開始できます。サーバーのウォームアッププロセスを早く終わらせるために設定可能な項目の一つです。
以下に、Couchbase Server 2.0用の新しい初期ウォームアップフェーズについて説明します。これらの最初のフェーズでは、サーバーは、ディスクからすべてのキーとメタデータの取得を開始します。 次に、サーバは最も頻繁に使用されるキーを取得するため、アクセスログ情報を取得します。
Initialize. このフェーズでは、サーバは、提供できるデータを何も持っていません。サーバは、ディスクに保存されている各vBucketの状態を読み込み、すべてのvBucketのリスト取得を始めます。
Key Dump. 次の段階では、サーバーはvBucketリストの項目に基づき、ディスクからすべてのキーとメタデータのプリフェッチを始めます。
Check Access Logs. その後、サーバーは、どのキーが頻繁にアクセスされるかを示す単一のキャッシュ・アクセス・ログを読み取ります。サーバは、このログを定期的に生成・維持します。これは設定変更が可能です。このログが存在する場合は、ログに基づき優先的にアイテムをロードします。
Couchbase Serverが、キーに関する情報を得て、アクセスログ情報を読み込めたら、続いてドキュメントのロードを始めます。
Loading based on Access LogsCouchbase Serverはアクセスログで識別した頻繁に使用するアイテムに基づいて、ドキュメントをメモリにロードします。
Loading Data. アクセスログが空であるか、または無効になっている場合、サーバはvBucketのリストに基づく各キーに対応して、シーケンシャルにドキュメントをロードします。
Couchbase Serverは、次の条件のいずれかがウォームアップ中に満たされたときにRAMから情報を提供することができます:
アクセスログに記載されているすべてのキーに対応するドキュメントの読み込みが完了している
すべてのvBucketのディスクに保存されているすべてのキーに対応するドキュメントの読み込みが完了している
メモリにロードされたドキュメントの総数が、ep_warmup_min_items_threshold
で設定した値以上になっている
ドキュメントが占めるRAMの割合がep_warmup_min_memory_threshold
で設定した値以上になっている
ノードにおけるRAMの使用率がmem_low_wat
で設定した値以上になっている
サーバがこれらの状態のひとつに達するとき、これをrun levelとよびます。Couchbase Serverがこのポイントに達するとき、残りのキーのドキュメントのロードをすぐに停止します。その後、CouchbaseServerはバックグラウンドで残りのドキュメントをRAM上へ読み込みます。
ウォームアッププロセスをコントロールするために、CouchbaseServer2.0においてアクセスログとスキャンプロセスを理解することも大切です。最初に読み込むべきドキュメントを決定するため、サーバはどのドキュメントが頻繁に使われているかをアクセスログから判断します。
サーバはRAM内のすべてのキーを定期的にスキャンし、それらをaccess.log
と名付けられたログに収集し、およびaccess.old
と名付けられたアクセスログのバックアップを同様に管理します。最新のアクセスログが破損している場合、サーバはウォームアップ中にこのバックアップファイルを使用することができます。デフォルトでは、このプロセスでは、GMT2:00に最初に実行され、その後24時間毎に自動的に実行されます。最初に実行する時間と、その後の間隔については変更することができます。
クライアントがウォームアップ中にCouchbase Serverにリクエストした場合、ENGINE_TMPFAIL (0x0d)
というエラーコードを返します。このエラーは、ウォームアップがまだ完了していないため、データアクセスがまだ利用可能でないことを示しています。独自Couchbase SDKを作成している人は、ライブラリでこのエラーをハンドリングする必要があります。これは、クライアントが待機して再試行すること、もしくはクライアントがリクエストのバックオフを実行すること、もしくはエラーを生成して、リクエストを再試行しないこと意味します。Couchbase SDKを使用してアプリケーションを構築している人は、このエラーがどのように配信され、ハンドリングされるかは、個々のSDKに依存していることに注意してください。詳細については、選択したCouchbase SDKの言語リファレンスを参照してください。