要求のスロットル

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

Sitecore.Services.Clientに対するリクエストの数を調整できます。次の操作を行うことができます。

  • 要求の頻度を制限するため。

  • ユーザーの種類 (無料と有料など) に基づいて要求を処理するために異なる戦略を使用する。

  • 高頻度の要求攻撃を防ぐため。

このトピックでは、次の内容について説明します。

スロットル戦略

Sitecore.Services.Clientは、時間間隔あたりのリクエスト数を制限するために使用できるAPIを提供します。デフォルトでは、Sitecore.Services.Clientには2つのスロットル戦略があります。

  • スライディングウィンドウ – 時間間隔と、その間隔で許可されるリクエストの数を指定します。Sitecoreは、それ以上の要求を調整します。

  • コンポジット – 複数の戦略を1つにまとめます。

メモ

ストラテジー自体を含めると循環参照が作成されるため、含めることはできません。

たとえば、さまざまなパラメーターを持つ多数のスライディング ウィンドウ戦略を構成できます。最初のものは短い時間期間(1〜5秒)後にリクエストを拒否し、2番目のものははるかに長い時間(24時間)後にリクエストを拒否します。

手記

スケーリングされた環境では、Sitecoreはインスタンス間でストラテジーの状態を共有しません。ストラテジーには、各インスタンスで独自の状態があります。

スロットルはデフォルトで無効になっています。調整を有効にするには、次の方法でApp_Config\Sitecore\Services.Client Sitecore.Services.Client.configファイルにパッチを適用します。

  • <setting name="Sitecore.Services.IsThrottleEnabled" value="false" /> の値をtrueに変更します。

ストラテジーは、masterデータベースの/sitecore/system/Settings/Services/Throttle Strategiesにあります。

ストラテジーは、Throttle Strategiesのすぐ下に追加することも、サブフォルダー(Strategy Folder)を作成して、そのサブフォルダーにストラテジーを追加することもできます。

ストラテジーの構成

各戦略アイテムのCommon OptionsセクションのTypeフィールドに値を指定する必要があります。値は、ストラテジを実装するクラスのフルネームです (例:Sitecore.Services.Infrastructure.Throttle.Strategies.SlidingWindowThrottleStrategy, Sitecore.Services.Infrastructure)。

ストラテジアイテムには、ストラテジタイプに依存する特定のパラメータセットが含まれています。パラメータは、ストラテジーの動作を指定します。

たとえば、スライディング ウィンドウ戦略の場合、次のようになります。

Set time span for a sliding window

たとえば、複合ストラテジーの場合、次のようになります。

Specify a composite strategy

ストラテジの適用

ストラテジーは、次の3つの方法で適用できます。

  • APIキーを使用します。

  • APIコントローラのメソッド(属性ベースのスロットル)を使用します。

  • APIコントローラを使用します。

これらの方法は、任意の組み合わせで使用できます。Sitecoreは、戦略の成果を組み合わせます。

Sitecoreは、リクエストに2つ以上の戦略を適用するときに、次のルールを使用します。

  • 同じ戦略を複数の方法で指定した場合、Sitecoreはそれを一度だけ適用します。

  • メソッドまたはコントローラーに複数の戦略を指定すると、Sitecoreは戦略を組み合わせます。

同じストラテジを複数回使用すると、ストラテジーは状態を共有します。たとえば、Time Span = 1000 msパラメーターとAllowed Number of Requests = 5 requestsパラメーターを使用してスライディング ウィンドウ戦略を指定し、それを2つのサービスに適用すると、1000ミリ秒のウィンドウで可能な要求は合計で5つだけになります。

Sitecoreがストラテジーを適用したときにエラーが発生した場合、リクエストは内部サーバー エラー (コード500) を受け取ります。

APIキーの使用

APIキーを使用してストラテジーを適用すると、SitecoreはこのAPIキーを使用するすべてのSitecore.Services.Clientリクエストにストラテジーを適用します。APIキーとOData APIキーを使用して戦略を適用できます。

例えば:

[ServicesController]
[RequiredApiKey]
public class SampleController : ApiController
    [Route("api/throttle/datawithkey")]
    public IEnumerable<string> GetData()
    {
        return new[]
        {
            "The Key : " + Guid.NewGuid()
        };
    }
}

この例では、RequiredApiKey属性が定義されており、このコントローラーにアクセスするにはAPIキーが必須です。Sitecoreは、APIキーが有効で、使用できる状態にあるかどうかを確認します。キーが有効な場合、Sitecoreは定義された任意の戦略をリクエストに適用します。

ストラテジーは、APIキーアイテムのDataセクションのThrottle Strategyフィールドで定義します。

APIコントローラー メソッドの使用

APIコントローラー メソッドにストラテジーを適用するには、コントローラーを定義し、アクションに直接ストラテジーを適用します。例えば:

[ServicesController]
public class SampleController : ApiController
{
    [Throttle("Sliding Window")]
    [Route("api/throttle/data")]
    public IEnumerable<string> GetData()
    {
        return new[]
        {
            "The Key : " + Guid.NewGuid()
        };
    }
    [Throttle("Composite")]
    [Route("api/throttle/compositedata")]
    public IEnumerable<string> GetCompositeData()
    {
        return new[]
        {
            "The Key : " + Guid.NewGuid()
        };
    }
}

コントローラーの使用

コントローラーにストラテジーを適用するには、コントローラーを定義してから、コントローラーのクラスにストラテジーを適用します。例えば:

[RequiredApiKey]
[Throttle("07 On Controller")]
public class ThrottledOnControllerController : ApiController
{
        [Route("api/ThrottledOnController/data")]
        public IEnumerable<string> GetData()
        {
            return new[] { "Controller api/ThrottledOnController/data was called: " + DateTime.Now };
        }
}

Sitecoreは、ThrottledOnControllerControllerコントローラーの任意のメソッドに07 On Controllerストラテジーを適用します。

この記事を改善するための提案がある場合は、 お知らせください!