分散アーキテクチャ distributed-architectures

原則 principle

スケーラビリティをサポートし、24 時間 265 日のサービスをインバウンドチャネルに提供するために、インタラクションを分散アーキテクチャと組み合わせて使用できます。このタイプのアーキテクチャは、Message Center で既に使用されており、複数のインスタンスで構成されます。

  • アウトバウンドチャネル専用で、マーケティングおよび環境のデザインベースを含む、1 つまたは複数のコントロールインスタンス
  • インバウンドチャネル専用の、1 つまたは複数の実行インスタンス

NOTE
コントロールインスタンスは、インバウンドチャネル専用で、カタログのオンラインバージョンを含みます。各実行インスタンスは独立しており、1 つの連絡先セグメント専用です(例:国ごとに 1 つの実行インスタンス)。オファーエンジンの呼び出しは、実行時に直接おこなわれる必要があります(実行インスタンスごとに 1 つの専用 URL)。インスタンス間の同期は自動ではないので、同じコンタクト先のインタラクションは、同じインスタンスを使用して送信される必要があります。

提案の同期 proposition-synchronization

オファーの同期は、パッケージで実行されます。実行インスタンスでは、すべてのカタログオブジェクトに、外部アカウント名のプレフィックスが付加されます。これは、同じ実行インスタンスで複数のコントロールインスタンス(例:開発用インスタンスと本番用インスタンス)をサポートできることを意味します。

IMPORTANT
内部名には、短くて明示的な名前を使用することをお勧めします。

オファーは、自動的にデプロイされてから、実行インスタンスおよびコントロールインスタンスにパブリッシュされます。

デザイン環境で削除されたオファーは、すべてのオンラインインスタンスで無効化されます。不要になった提案やオファーは、パージ期間(各インスタンスのデプロイメントウィザードで指定)およびスライド期間(受信提案のタイポロジルールで指定)の後、自動的に削除されます。

提案の同期用に、各環境および外部アカウントごとにワークフローが作成されます。同期の頻度は、環境ごと、外部アカウントごとに調整できます。

制限事項 limitations

  • 匿名環境から識別された環境へのフォールバック機能を使用する場合、それら 2 つの環境が同じ実行インスタンス上にある必要があります。
  • 複数の実行インスタンス間の同期は、リアルタイムでは実行されません。同じコンタクト先のインタラクションは、同じインスタンスに送信される必要があります。コントロールインスタンスは、アウトバウンドチャネル(リアルタイムではない)専用である必要があります。
  • マーケティングデータベースは、自動的には同期されません。重み付けや実施要件ルールで使用されるマーケティングデータは、実行インスタンスで複製される必要があります。このプロセスは標準では用意されていないので、統合期間中に開発する必要があります。
  • 提案の同期は、FDA 接続によって排他的に実行されます。
  • インタラクションと Message Center を同じインスタンス上で使用する場合は、どちらについても、同期は FDA プロトコルを使用しておこなわれます。

パッケージ設定 packages-configuration

インタラクション ​に直接リンクされているスキーマ拡張(オファー、提案、受信者など)は、実行インスタンスにデプロイする必要があります。

インタラクションパッケージは、すべてのインスタンス(コントロールおよび実行)上にインストールする必要があります。追加パッケージが 2 つ用意されています。1 つはコントロールインスタンスにインストールするパッケージで、もう 1 つは各実行インスタンスにインストールするパッケージです。

NOTE
パッケージをインストールする際、nms:proposition テーブルに含まれる long タイプのフィールド(提案 ID など)は、int64 タイプのフィールドになります。このタイプのデータについて詳しくは、この節を参照してください。

データ保持期間は、(デプロイウィザードの​ データパージ ​ウィンドウから)インスタンスごとに設定する必要があります。実行インスタンスでは、この期間が、タイポロジルールに必要な履歴深度(スライド期間)および計算される実施要件ルールに対応している必要があります。

コントロールインスタンス上で、次の手順を実行します。

  1. 実行インスタンスごとに外部アカウントを作成します。

    • ラベルを入力し、短くて明示的な内部名を追加します。

    • 実行インスタンス」を選択します。

    • 有効」オプションをオンにします。

    • その実行インスタンス用の接続パラメーターを入力します。

    • すべての実行インスタンスは、ID にリンクされている必要があります。この ID は、「接続を初期化」ボタンをクリックすると割り当てられます。

    • 使用するアプリケーションのタイプとして、「Message Center」と「インタラクション」のどちらか、または両方を選択します。

    • 使用する FDA アカウントを入力します。オペレーターは、実行インスタンスで作成し、次のように、該当するインスタンスのデータベースの読み取り権限と書き込み権限を付与する必要があります。

      code language-none
      grant SELECT ON nmspropositionrcp, nmsoffer, nmsofferspace, xtkoption, xtkfolder TO user;
      grant DELETE, INSERT, UPDATE ON nmspropositionrcp TO user;
      
    note note
    NOTE
    コントロールインスタンスの IP アドレスは、実行インスタンスで承認されている必要があります。
  2. 次のように環境を設定します。

    • 実行インスタンスのリストを追加します。

    • インスタンスごとに、同期期間とフィルター条件(例:国ごと)を指定します。

      note note
      NOTE
      エラーが発生した場合は、同期ワークフローおよびオファー通知を確認してください。これらはアプリケーションのテクニカルワークフローにあります。

最適化のために、実行インスタンスでマーケティングデータベースの一部のみを複製する場合、その実行インスタンスで利用できるデータのみをユーザーに使用させるよう、環境にリンクした制約付きスキーマを指定できます。オファーの作成には、実行インスタンスでは利用できないデータも使用できます。それには、このルールをアウトバウンドチャネルのみに制限することで、他のチャネルに対しては無効にする必要があります(「次の場合に考慮」フィールド)。

メンテナンスオプション maintenance-options

次に、コントロールインスタンスで使用できるメンテナンスオプションのリストを示します。

IMPORTANT
これらのオプションは、特定のメンテナンス事例にのみ使用できます。
  • NmsInteraction_LastOfferEnvSynch_<offerEnvId>_<executionInstanceId>:特定のインスタンスで環境が同期された直近の日付。
  • NmsInteraction_LastPropositionSynch_<propositionSchema>_<executionInstanceIdSource>_<executionInstanceIdTarget>:特定のスキーマの提案があるインスタンスから別のインスタンスに同期された直近の日付。
  • NmsInteraction_MapWorkflowId:生成されるすべての同期ワークフローのリストを含むオプション。

次のオプションは、実行インスタンスで使用できます。

NmsExecutionInstanceId:インスタンス ID を含むオプション。

パッケージのインストール packages-installation

インタラクションパッケージをインストールしたことがないインスタンスの場合、移行は必要ありません。デフォルトでは、パッケージがインストールされると、提案テーブルは 64 ビットになります。

IMPORTANT
インスタンスの既存の提案の量によっては、この作業に時間がかかることがあります。
  • インスタンスに提案がない、または非常に少ない場合、提案テーブルを手作業で修正する必要はありません。パッケージをインストールすると、修正が実行されます。
  • インスタンスに多数の提案がある場合、コントロールパッケージをインストールして実行する前に提案テーブルの構造を変更しておくと、より確実です。アクティビティが少ない期間にクエリを実行することをお勧めします。
NOTE
提案テーブルで特定の設定が実行されている場合、その状況に応じてクエリを変更してください。

PostgreSQL postgresql

次の 2 つの方法があります。第 1 の方法(ワークテーブルを使用)のほうが若干高速です。

ワークテーブル

CREATE TABLE NmsPropositionRcp_tmp AS SELECT * FROM nmspropositionrcp WHERE 0=1;
ALTER TABLE nmspropositionrcp_tmp
  ALTER COLUMN ipropositionid TYPE bigint,
  ALTER COLUMN iinteractionid TYPE bigint;
INSERT INTO nmspropositionrcp_tmp SELECT * FROM nmspropositionrcp;
DROP TABLE nmspropositionrcp;
CREATE INDEX proposition_id ON NmsPropositionRcp (ipropositionid);
CREATE INDEX nmspropositionrcp_deliveryid ON NmsPropositionRcp (ideliveryid);
CREATE INDEX nmspropositionrcp_lastmodified ON NmsPropositionRcp (tslastmodified);
CREATE INDEX nmspropositionrcp_offerid ON NmsPropositionRcp (iofferid);
CREATE INDEX nmspropositionrcp_offerspaceid ON NmsPropositionRcp (iofferspaceid);
CREATE INDEX nmspropositionrcp_recipientidid ON NmsPropositionRcp (irecipientid);
ALTER TABLE nmspropositionrcp_tmp RENAME TO nmspropositionrcp;

テーブルの変更

ALTER TABLE nmspropositionrcp
  ALTER COLUMN ipropositionid TYPE bigint,
  ALTER COLUMN iinteractionid TYPE bigint;

Oracle oracle

Number タイプのサイズを編集しても、値を読み込んだりインデックスを作り直したりしないので、実行はただちに完了します。

実行するクエリは次のとおりです。

ALTER TABLE nmspropositionrcp MODIFY (
ipropositionid NUMBER(19, 0),
iinteractionid NUMBER(19, 0)
);

MSSQL mssql

実行するクエリは次のとおりです。

SELECT * INTO NmsPropositionRcp_tmp FROM NmsPropositionRcp WHERE 1 = 0;
GO
ALTER TABLE NmsPropositionRcp_tmp ALTER COLUMN ipropositionid BIGINT;
GO
ALTER TABLE NmsPropositionRcp_tmp ALTER COLUMN iinteractionid BIGINT;
GO
INSERT INTO NmsPropositionRcp_tmp SELECT * FROM NmsPropositionRcp;
GO
DROP TABLE NmsPropositionRcp;
GO
sp_rename 'NmsPropositionRcp_tmp', NmsPropositionRcp
GO
ALTER TABLE NmsPropositionRcp ADD DEFAULT ((0)) FOR dWeight
GO
ALTER TABLE NmsPropositionRcp ADD DEFAULT ((0)) FOR iDeliveryId
GO
ALTER TABLE NmsPropositionRcp ADD DEFAULT ((0)) FOR iEngineType
GO
ALTER TABLE NmsPropositionRcp ADD DEFAULT ((0)) FOR iInteractionId
GO
ALTER TABLE NmsPropositionRcp ADD DEFAULT ((0)) FOR iOfferId
GO
ALTER TABLE NmsPropositionRcp ADD DEFAULT ((0)) FOR iOfferSpaceId
GO
ALTER TABLE NmsPropositionRcp ADD DEFAULT ((0)) FOR iPropositionId
GO
ALTER TABLE NmsPropositionRcp ADD DEFAULT ((0)) FOR iRank
GO
ALTER TABLE NmsPropositionRcp ADD DEFAULT ((0)) FOR iRecipientId
GO
ALTER TABLE NmsPropositionRcp ADD DEFAULT ((0)) FOR iStatus
GO
CREATE NONCLUSTERED INDEX NmsPropositionRcp_deliveryId ON NmsPropositionRcp (iDeliveryId)
GO
CREATE NONCLUSTERED INDEX NmsPropositionRcp_eventDate ON NmsPropositionRcp (tsEvent)
GO
CREATE UNIQUE NONCLUSTERED INDEX NmsPropositionRcp_id ON NmsPropositionRcp (iPropositionId)
GO
CREATE NONCLUSTERED INDEX NmsPropositionRcp_lastModified ON NmsPropositionRcp (tsLastModified)
GO
CREATE NONCLUSTERED INDEX NmsPropositionRcp_offerId ON NmsPropositionRcp (iOfferId)
GO
CREATE NONCLUSTERED INDEX NmsPropositionRcp_offerSpaceI ON NmsPropositionRcp (iOfferSpaceId)
GO
CREATE NONCLUSTERED INDEX NmsPropositionRcp_recipientId ON NmsPropositionRcp (iRecipientId)
GO
recommendation-more-help
601d79c3-e613-4db3-889a-ae959cd9e3e1