kv_create_time_consistency()

#include <kvstore.h>

kv_error_t 
kv_create_time_consistency(kv_consistency_t **consistency,
                           kv_timeout_t time_lag,
                           kv_timeout_t timeout_ms) 

レプリカがマスターからの遅延を許容される時間を示す一貫性ポリシーを作成します。アプリケーションではこのポリシーを使用して、遅延間隔前にマスターでコミットされたすべてのトランザクションをレプリカ・ノードが確認できるようにします。

一貫性構造に割り当てられたメモリーを解放するには、kv_release_consistency()を使用します。

このポリシーを有効に使用するには、マスターとレプリカのクロックがNTPなどのプロトコルを使用して同期されている必要があります。

パラメータ

  • consistency

    consistencyパラメータは、割り当てられた一貫性ポリシーへのポインタのコピー先であるメモリーを参照します。

  • time_lag

    time_lagパラメータは、レプリカでトランザクションが開始されたとき、マスターに関してレプリカが期限切れとなっても許容される時間間隔をミリ秒単位で指定します。

  • timeout_ms

    timeout_msパラメータは、レプリカで目標とする一貫性の確保を中断せず、待機できる時間を指定します。

    一貫性ポリシーを満たすために、KVStoreクライアント・ドライバは、適切なレプリケーション・グループからノード(通常はレプリカ)を選択し、これに要求を送信することにより、読取り操作を実装します。レプリカが整合性のタイムアウト時間内に目標とする一貫性を保証できない場合は、要求に応答して失敗したことを示します。操作のタイムアウトまでにまだ時間が残っている場合、クライアント・ドライバは別のノードを選択し、要求を再試行します(アプリケーションに対して透過的)。

    一貫性ポリシーを受け入れるKVStore操作は、個別の操作タイムアウトも受け入れます。操作タイムアウトとは、操作が完了するまでアプリケーションが自発的に待機する最大時間であるとみなすことができます。一方、一貫性タイムアウトは実装に対するパフォーマンスに関するヒントのようなものです。これが示唆するのは、通常、正常なレプリカであれば一定時間内に一貫性を確保できることを想定でき、そうでない場合は、要求試行を中止して別のレプリカで再試行するオーバーヘッドを受け入れる価値がある可能性が高いということです。一貫性タイムアウトを意味あるものにするには、操作タイムアウトよりも短くする必要があります。

    操作タイムアウト値の選択は、アプリケーションのニーズによって異なります。適切な一貫性タイムアウト値を見つけられるかどうかは、実際のシステム・パフォーマンスで行われた観察結果に依存する可能性が高くなります。