前書き
「変更データキャプチャ」と「プラットフォームイベント」はそれぞれイベント駆動型のインテグレーションを実現するためにSalesforceが提供しているOOTB機能である。
「イベント駆動型のインテグレーション」とは、ソースアプリケーション(event producer)がpublishしたイベントをターゲットアプリケーション(event consumer)がsubscribeする形式(=pub/sub形式)のデータインテグレーションを意味する。
イベント駆動型のインテグレーションは、REST APIのようなソースアプリケーションからターゲットアプリケーションに対してHTTPリクエストを送信してレスポンスを待つような同期的インテグレーションとは異なり、非同期的なインテグレーションである。
イベント駆動型のインテグレーションは、非イベント駆動型のインテグレーションと比較して以下のようなメリットを有する。
- Producer側がConsumer側からのレスポンスを待つ必要がないため、スループットが向上する
- イベントバス(メッセージキュー)によりConsumer側は任意のタイミングで処理を実行できるようになるため、短時間にリクエストが集中して高負荷状態になるリスクがなくなる
- イベントバス(メッセージキュー)内にイベント(メッセージ)が保持されるため、連携失敗時にデータロストしない
- イベントバス(メッセージキュー)内にイベントバス(メッセージ)が保持されるため、Consumer側のシステムが停止してもProducer側は影響を受けず、復旧時にもデータロストなくシームレスに連携が再開される
- 単一のイベント(メッセージ)を複数のシステムからsubscribe可能なため、subscribeするシステムの増減をProducer側のシステムに影響を与えることなく自由に行うことができる。
↓
総じて、「連携を安定化」させつつ「システム間の疎結合化」を実現する仕組みと言える。
変更データキャプチャとは?
「変更データキャプチャ(CDC)」は、指定したオブジェクトのあらゆるレコード操作(=作成・更新・削除・復元)を自動的にイベントとしてイベントバスにpublishした上で、(外部システムがsubscribeできる)channelを公開してくれる機能である。
SF側の設定が数クリックで終わる点が特徴である。
CDCを実装する場合、以下の点に留意する必要がある。
- デルタ(=差分)しか通知されない。従って、subscribe側で「外部キー」の情報が必須な場合、CDCを利用することはできない。
- 場合により、初期データ移行が必要である。
プラットフォームイベントとは?
「プラットフォームイベント」とは、端的に言えばPub/Sub連携を実現するためのイベントバス機能である。
事前に「イベントオブジェクト(Sample__e)」を定義しておくことで、フローやApex経由でにイベント作成(↑の画像を参照)や、外部システム経由でのイベント作成(↓の画像を参照)を行うことが可能となる。
Feature | Change Data Capture Event | Platform Event |
---|---|---|
Define a custom schema as strongly typed fields | N/A | |
Include user-defined payloads | N/A | |
Publish custom events via one or more APIs | N/A | |
Publish events via Apex | N/A | |
Publish declaratively using Process Builder and Flow Builder | N/A | |
Publish to specific users | N/A | |
Subscribe via CometD using JavaScript, Java, and other languages | ||
Subscribe via Apex triggers | ||
Filter subscriptions | ||
Receive auto-published event notifications for Salesforce record changes | N/A | |
Choose the fields to include in event notifications for Salesforce record changes | N/A | |
Receive a versioned event schema | ||
Get field-level security | ||
Get record-sharing support | N/A | |
Encrypt field data with Shield Platform Encryption | ||
Replay retained event notifications | ||
Event retention period | 3 days | 1 day or 3 days* |
推奨リンク
A Refresher on the Four Streaming APIs and a Monitoring Tool