xConnectのサーキット ブレーカーの構成

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

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

サーキット ブレーカーの設計パターンは、誤動作しているサービスやアプリケーションが、未回答の要求の壊滅的なバックログを蓄積するのを防ぎます。サーキット ブレーカーが構成されている場合、サービスは現在使用不可であることを通知でき、サーキット ブレーカーはすべての要求に対して最新の既知のエラー メッセージで一時的に応答します。

先端

サーキットブレーカーの概念は電気工学から来ています:電気回路では、openサーキットブレーカーが電気の流れを止めます。ブレーカーがclosedると、電気が自由に流れることができます。

ソフトウェア サーキット ブレーカーは、次の状態になります。

  • Closed - サービスが利用可能であり、期待どおりにリクエストに応答します。

  • Open - サービスが利用できず、サーキットブレーカーは各リクエストにエラーメッセージで応答します。

  • Half-open - サーキットブレーカーは、サービスが利用可能かどうかを確認するために、サービスへのリクエストを制限しています。

サーキットブレーカーを集合的または個別に構成するには、次のCircuitBreakerTypeを指定します。

CircuitBreakerType

クライアント構成済み

General

CollectionSearch、およびConfigurationクライアントをまとめて設定しますが、個々のクライアント サーキット ブレーカー設定によって上書きされます。

Collection

CollectionWebApiClientのみを設定します。

Search

SearchWebApiClientのみを設定します。

Configuration

ConfigurationWebApiClientのみを設定します。

SitecoreはPolly Circuit Breakerライブラリを使用し、Sitecore.Xdb.Common.Web.CommonWebApiClient<TRoutes> クラスにPolly.IAsyncPolicy<HttpResponseMessage> タイプ フィールドを追加しました。これにより、Polly.IAsyncPolicyの実装であるPolly.CircuitBreakerクラスの依存関係の挿入を行うことができます。

サーキットブレーカーには、次の設定オプションがあります。

  • handledEventsAllowedBeforeBreaking- サーキット ブレーカーがオープン状態に移行するまでに許容されるサービス障害の最大数。

  • durationOfBreak- サーキット ブレーカーがオープン状態のままで、ハーフ オープン状態に移行する秒数。

サーキット ブレーカーには、次の状態変更ハンドラーがあります。

  • onBreak()- サーキットブレーカーがオープン状態に移行したときに呼び出されます。

  • onReset()- サーキットブレーカーが閉じた状態に移行したときに呼び出されます。

サーキットブレーカーは、次の方法で有効にできます。

サーキットブレーカーを無効にするには、対応する設定セクションを削除またはコメントアウトするだけです。

パッチファイルによるCircuitBreaker構成の有効化

CircuitBreaker構成を使用して、Content ManagementロールからのxConnect要求を管理します。CircuitBreaker構成によってサーキット ブレーカーを有効にするためのカスタム コードを記述する必要はありませんが、状態変更ハンドラーを指定することもできません。

CircuitBreaker設定を作成するには:

  1. Sitecoreインスタンスの <wwwroot>/App_Config/Include/ フォルダに移動します。

  2. たとえば、CircuitBreakerCommon.configという名前のパッチ ファイルを作成し、次の内容を含めます。

    <CircuitBreaker
      name="CircuitBreakerCommon"
      type="Sitecore.XConnect.Client.WebApi.Policies.CircuitBreakerInfo, Sitecore.XConnect.Client" >
        <param desc="Key">General</param>
        <param desc="handledEventsAllowedBeforeBreaking">2</param>
        <param desc="durationOfBreak">15</param>
    </CircuitBreaker>  
  3. パッチ・ファイルを保存します。

パッチファイルによるCircuitBreakerInfos構成の有効化

CircuitBreakerInfos構成を使用して、マーケティング オートメーションなどのContent Management以外のロールからのxConnectリクエストを管理します。CircuitBreakerInfos構成によってサーキット ブレーカーを有効にするためのカスタム コードを記述する必要はありませんが、状態変更ハンドラーを指定することもできません。

CircuitBreakerInfos設定を作成するには:

  1. Sitecoreインスタンスの <wwwroot>/App_Config/Include/ フォルダに移動します。

  2. たとえば、CircuitBreakerInfos.configという名前のパッチ ファイルを作成し、次の内容を含めます。

    <CircuitBreakerInfos>
      <General>
        <HandledEventsAllowedBeforeBreaking>3</HandledEventsAllowedBeforeBreaking>
        <CircuitBreakerType>General</CircuitBreakerType>
        <DurationOfBreak>15</DurationOfBreak>
      </General>
    
      <Collection>
        <HandledEventsAllowedBeforeBreaking>3</HandledEventsAllowedBeforeBreaking>
        <CircuitBreakerType>Collection</CircuitBreakerType>
        <DurationOfBreak>35</DurationOfBreak>
      </Collection>
    
      <Search>
        <HandledEventsAllowedBeforeBreaking>3</HandledEventsAllowedBeforeBreaking>
        <CircuitBreakerType>Search</CircuitBreakerType>
        <DurationOfBreak>25</DurationOfBreak>
      </Search>
    
      <Configuration>
        <HandledEventsAllowedBeforeBreaking18791275782<11879127578/HandledEventsAllowedBeforeBreaking>
        <CircuitBreakerType>Configuration</CircuitBreakerType>
        <DurationOfBreak>25</DurationOfBreak>
      </Configuration>
    </CircuitBreakerInfos>
  3. パッチ・ファイルを保存します。

コンストラクター パラメーターによるCircuitBreakerファクトリの有効化

コンストラクター パラメーターとして渡されたCircuitBreakerファクトリを使用して、カスタマイズされた要求処理と状態変更ハンドラーを作成します。

XConnectClientConfigurationConfiguratorコンストラクタは、IConfigurationインスタンスとオプションのCircuitBreakerファクトリをパラメータとして受け入れます。

  • IConfigurationインスタンスにはさまざまなパラメーターが含まれており、CircuitBreakerパラメーターを含めることもできます。

  • オプションのCircuitBreakerファクトリはSitecore.Reflection.IFactoryインターフェイスに基づいており、依存関係の挿入によって渡すこともできます。

IConfigurationインスタンスのみを渡す場合、XConnectClientConfigurationConfiguratorIConfigurationインスタンスのCircuitBreakerパラメーターを使用します。

XConnectClientConfigurationConfigurator(<IConfiguration instance>);

IConfigurationインスタンスをCircuitBreakerファクトリand渡す場合は、IConfigurationインスタンスのCircuitBreakerパラメータをXConnectClientConfigurationConfigurator ignoresし、CircuitBreakerファクトリのみを使用します。

XConnectClientConfigurationConfigurator(<IConfiguration instance>, <CircuitBreaker factory>);

コンストラクターパラメーターによるCircuitBreakerファクトリを有効にするには:

  1. Visual Studioの任意のファイルに、次のように入力します。

    IConfiguration config = <define this in code or read it from an XML file>
    
    public class TestCircuitBreakerFactoryCreatorStub : ICircuitBreakerFactoryCreator
    {
      public CircuitBreakerFactoryCreatorStub()
      {
      }
    
      public CircuitBreakerFactory CreateCircuitBreakerConfiguration()
      {
        return CircuitBreakerFactory.DefaultFactory;
      }
    }
    
    var configurator = new XConnectClientConfigurationConfigurator(
      config,
      new TestCircuitBreakerFactoryCreatorStub()
    );
  2. ファクトリをコンパイル、テスト、およびデプロイします。

パッチファイルによるCircuitBreakerファクトリの有効化

パッチファイルによって設定されたCircuitBreakerファクトリを使用すると、ファクトリを再コンパイルせずに設定を変更できるため、柔軟性が向上します。

パッチファイルによるCircuitBreakerファクトリを有効にするには:

  1. Visual Studioで、次の内容でTestCircuitBreakerInfoFactoryStub.csなどの名前の新しいクラス ファイルを作成します。

    public class TestCircuitBreakerInfoFactoryStub : IFactory
    {
      public object GetObject(string identifier)
      {
        switch (identifier)
        {
          case "Collection":
            return new CircuitBreakerInfo(1, 10, CircuitBreakerType.Collection,
              (x, y) => {/*log.Write("OnBreak")*/ },
              () => { /*log.Write("OnReset")*/} );
          case "Search":
            return new CircuitBreakerInfo(2, 20, CircuitBreakerType.Search,
              (x, y) => { }, () => { });
          case "Config":
            return new CircuitBreakerInfo(3, 30, CircuitBreakerType.Configuration,
              (x, y) => { }, () => { });
        }
        return null;
      }
    }
  2. Sitecoreインスタンスの <wwwroot>/App_Config/Include/ フォルダに移動し、次の内容でTestCircuitBreakerInfoFactoryStub.configなどの名前のパッチ ファイルを作成します。

    <CircuitBreaker name="CircuitBreakerCollection" factory="TestCircuitBreakerInfoFactoryStub" ref="Collection"/>

    CircuitBreaker構成は、TestCircuitBreakerInfoFactoryStubファクトリによって作成されたCircuitBreakerCollectionサーキット ブレーカーがCollectionクライアントによって使用されることを宣言します。完全なサンプル サーキット ブレーカー構成に示されているように、常に構成の早い段階で工場を宣言してください。

  3. ファクトリをコンパイル、テスト、およびデプロイします。

完全なサンプル・サーキット・ブレーカ構成

コンテキストをよりよく理解するために、このサンプル サーキット ブレーカー構成パッチ ファイルは、サーキット ブレーカーを構成するさまざまな方法を示しています。

<factories>

  <!-- Factory for CircuitBreakerInfo -->
  <factory id="TestCircuitBreakerInfoFactoryStub" type="Sitecore.XConnect.Client.Configuration.IntegrationTests.Infrastructure.CircuitBreakerInfoFactoryStub, Sitecore.XConnect.Client.Configuration.IntegrationTests" />
</factories>

<xconnect>
  <runtime type="Sitecore.XConnect.Client.Configuration.RuntimeModelConfiguration, Sitecore.XConnect.Client.Configuration">
    <schemas hint="list:AddModelConfiguration">
      <schema name="collectionmodel" type="Sitecore.XConnect.Client.Configuration.StaticModelConfiguration, Sitecore.XConnect.Client.Configuration">
        <param desc="modeltype">Sitecore.XConnect.Collection.Model.CollectionModel, Sitecore.XConnect.Collection.Model</param>
      </schema>
    </schemas>
  </runtime>

  <CircuitBreakersConfiguration type="Sitecore.XConnect.Client.WebApi.Policies.CircuitBreakerFactory, Sitecore.XConnect.Client">
    <CircuitBreakers hint="list:AddCircuitBreakerSetting">

      <!-- The General circuit breaker configuration -->
      <CircuitBreaker name="CircuitBreakerCommon"  type="Sitecore.XConnect.Client.WebApi.Policies.CircuitBreakerInfo, Sitecore.XConnect.Client" >
        <param desc="handledEventsAllowedBeforeBreaking">2</param>
        <param desc="durationOfBreak">15</param>
        <param desc="Key">General</param>
      </CircuitBreaker>

      <!--  Individual circuit breakers implemented by factories -->
      <CircuitBreaker name="CircuitBreakerCollection"  factory="TestCircuitBreakerInfoFactoryStub" ref="Collection"/> 
      <CircuitBreaker name="CircuitBreakerSearch"  factory="TestCircuitBreakerInfoFactoryStub" ref="Search"/>
      <CircuitBreaker name="CircuitBreakerConfig"  factory="TestCircuitBreakerInfoFactoryStub" ref="Config"/>
    </CircuitBreakers>
  </CircuitBreakersConfiguration>

  <clientconfig name="collectionsearch" type="Sitecore.XConnect.Client.Configuration.IntegrationTests.Infrastructure.InstanceControlledTestSitecoreXConnectClientConfiguration, Sitecore.XConnect.Client.Configuration.IntegrationTests" singleInstance="true" role:require="Standalone or ContentManagement">
    <param desc="clientModel" ref="xconnect/runtime" />
    <param desc="collectionConnectionStringName">xconnect.collection</param>
    <param desc="searchConnectionStringName">xconnect.collection</param>
    <param desc="configurationConnectionStringName">xconnect.collection</param>

    <!-- Send CircuitBreakerFactory to Configuration -->
    <param desc="CircuitBreakerFactory" ref="xconnect/CircuitBreakersConfiguration"/>
  </clientconfig>

   <!-- Collection only XConnect Client configuration for Content Delivery, Processing, or Reporting but not Content Management or Standalone -->
  <clientconfig name="collectiononly" type="Sitecore.XConnect.Client.Configuration.IntegrationTests.Infrastructure.InstanceControlledTestSitecoreXConnectClientConfiguration, Sitecore.XConnect.Client.Configuration.IntegrationTests" singleInstance="true" role:require="ContentDelivery or Processing or Reporting and !ContentManagement and !Standalone">
    <param desc="clientModel" ref="xconnect/runtime" />
    <param desc="collectionConnectionStringName">xconnect.collection</param>
    <param desc="configurationConnectionStringName">xconnect.collection</param>

    <!--Send CircuitBreakerFactory to Configuration -->
    <param desc="CircuitBreakerFactory" ref="xconnect/CircuitBreakersConfiguration"/>
  </clientconfig>
</xconnect>
この記事を改善するための提案がある場合は、 お知らせください!