変更データキャプチャとプラットフォームイベントの概要

By | June 30, 2022
https://architect.salesforce.com/design/decision-guides/event-driven

前書き

「変更データキャプチャ」と「プラットフォームイベント」はそれぞれイベント駆動型のインテグレーションを実現するためにSalesforceが提供しているOOTB機能である。

「イベント駆動型のインテグレーション」とは、ソースアプリケーション(event producer)がpublishしたイベントをターゲットアプリケーション(event consumer)がsubscribeする形式(=pub/sub形式)のデータインテグレーションを意味する。

イベント駆動型のインテグレーションは、REST APIのようなソースアプリケーションからターゲットアプリケーションに対してHTTPリクエストを送信してレスポンスを待つような同期的インテグレーションとは異なり、非同期的なインテグレーションである。

イベント駆動型のインテグレーションは、非イベント駆動型のインテグレーションと比較して以下のようなメリットを有する。

  • Producer側がConsumer側からのレスポンスを待つ必要がないため、スループットが向上する
  • イベントバス(メッセージキュー)によりConsumer側は任意のタイミングで処理を実行できるようになるため、短時間にリクエストが集中して高負荷状態になるリスクがなくなる
  • イベントバス(メッセージキュー)内にイベント(メッセージ)が保持されるため、連携失敗時にデータロストしない
  • イベントバス(メッセージキュー)内にイベントバス(メッセージ)が保持されるため、Consumer側のシステムが停止してもProducer側は影響を受けず、復旧時にもデータロストなくシームレスに連携が再開される
  • 単一のイベント(メッセージ)を複数のシステムからsubscribe可能なため、subscribeするシステムの増減をProducer側のシステムに影響を与えることなく自由に行うことができる。

総じて、「連携を安定化」させつつ「システム間の疎結合化」を実現する仕組みと言える。

変更データキャプチャとは?

https://youtu.be/dhro41Fl-JI?t=195

「変更データキャプチャ(CDC)」は、指定したオブジェクトのあらゆるレコード操作(=作成・更新・削除・復元)を自動的にイベントとしてイベントバスにpublishした上で、(外部システムがsubscribeできる)channelを公開してくれる機能である。

SF側の設定が数クリックで終わる点が特徴である。

CDCを実装する場合、以下の点に留意する必要がある。

  • デルタ(=差分)しか通知されない。従って、subscribe側で「外部キー」の情報が必須な場合、CDCを利用することはできない。
  • 場合により、初期データ移行が必要である。

プラットフォームイベントとは?

https://youtu.be/dhro41Fl-JI?t=435

「プラットフォームイベント」とは、端的に言えばPub/Sub連携を実現するためのイベントバス機能である。

事前に「イベントオブジェクト(Sample__e)」を定義しておくことで、フローやApex経由でにイベント作成(↑の画像を参照)や、外部システム経由でのイベント作成(↓の画像を参照)を行うことが可能となる。

https://youtu.be/dhro41Fl-JI?t=1115
FeatureChange Data Capture EventPlatform Event
Define a custom schema as strongly typed fieldsN/AYes
Include user-defined payloadsN/AYes
Publish custom events via one or more APIsN/AYes
Publish events via ApexN/AYes
Publish declaratively using Process Builder and Flow BuilderN/AYes
Publish to specific usersN/ANo
Subscribe via CometD using JavaScript, Java, and other languagesYesYes
Subscribe via Apex triggersYesYes
Filter subscriptionsNoNo
Receive auto-published event notifications for Salesforce record changesYesN/A
Choose the fields to include in event notifications for Salesforce record changesNoN/A
Receive a versioned event schemaYesYes
Get field-level securityYesNo
Get record-sharing supportNoN/A
Encrypt field data with Shield Platform EncryptionYesYes
Replay retained event notificationsYesYes
Event retention period3 days1 day or 3 days*
https://developer.salesforce.com/docs/atlas.en-us.api_streaming.meta/api_streaming/event_comparison.htm

推奨リンク

A Refresher on the Four Streaming APIs and a Monitoring Tool

Salesforce Architects – Event-Driven Architecture