kv_config_set_request_limits()

#include <kvstore.h>

kv_error_t 
kv_config_set_request_limits(kv_config_t *config, 
                         kv_int_t max_active_requests, 
                         kv_int_t request_threshold_percent, 
                         kv_int_t node_limit_percent); 

KVStoreのノードに対してクライアントがアクティブにできる最大要求数を構成します。この方法で要求を制限することで、ストア内の1つ以上のノードのサービス時間が長くなった場合に、スレッドのスタベーションが発生する可能性を最小限に抑えることができます。この結果、ノードによってスレッドが保持されるため、他の到達可能で正常なノードへのサービス・リクエストに対してこれらのスレッドが使用できなくなります。

サービス時間が長くなる場合、ノード自体の問題、またはそのノードへのネットワーク・パスの問題である可能性があります。可能であればいつでも、KVS要求ディスパッチャは、要求を処理できる他のノードに要求を再ルーティングすることで、サービス時間が長くなるノードの使用を自動的に最小限に抑えます。したがって、この関数によって提供されるメカニズムでは、要求の再ルーティングが不可能な場合は安全性のための余裕が追加されます。

この関数の要求制限メカニズムがアクティブ化されるのは、アクティブな要求の数が、パラメータrequest_threshold_percentによって指定されたしきい値を超える場合です。この関数に指定するしきい値および制限パラメータは両方とも、max_active_requestsの割合として示されます。

この関数で設定される制限は、クライアントがマルチスレッドである場合のみ適用可能です。

このメカニズムがアクティブである場合、ノードに対するアクティブな要求の数がnode_limit_percentを超えることはできません。この制限を超える新規要求はすべて拒否され、要求元の関数にはエラーが返されます。

たとえば、max_active_requestsが10、request_threshold_percentが80、node_limit_percentが50である構成について考えてみます。8つの要求がすでにクライアントでアクティブであるときに、9番目の要求を受信し、アクティブな要求がすでに5つあるノードにこの要求が送信されると、最新の要求がエラーの原因になります。クライアントでアクティブである要求が7つしかない場合、8番目の要求は、アクティブな要求が5つあるノードに送信されます。その後、この要求は通常どおり処理されます。

パラメータ

  • config

    configパラメータは、要求制限を設定する構成構造を指します。この構造は、最初にkv_create_config()を使用して作成されたものです。

  • max_active_requests

    max_active_requestsパラメータは、KVクライアントで許可されるアクティブな要求の最大数です。通常、この数は、クライアントが要求を処理するために確保したスレッドの最大数から導出されます。デフォルトは100です。KVStoreでは実際にこの最大値が直接適用されないことに注意してください。かわりに、このパラメータは、ノードで強制される要求制限の計算の基礎としてのみ使用されます。

  • request_threshold_percent

    request_threshold_percentパラメータは、要求が制限されるmax_active_requestsの割合として計算されるしきい値です。デフォルトは90です。

  • node_limit_percent

    node_limit_percentパラメータは、要求制限メカニズムがアクティブである場合に、ノードと関連付けることができるアクティブな要求の最大数を決定します。デフォルトは80です。