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

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

前書き

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

「イベント駆動型のインテグレーション」とは、DBへの変更操作というイベントを起点として当該のイベントの内容を非同期的に(=RESTのようにレスポンスを待つことなく)別システムに通知する種類のインテグレーションを意味する。

SFにおけるイベント駆動型インテグレーションは、①「CometDプロトコル(=HTTPリクエスト後、レスポンスが返ってくるまで接続状態を維持し続けるロングポーリングを実現する仕組みの一つ)を利用する種類の連携」と②「イベントバス内のイベント(※一般的にはメッセージキュー内のメッセージ)を経由してデータのやり取りを行う種類の連携」に大別される。

イベント駆動型のインテグレーションは、非イベント駆動型のインテグレーション(すなわち、イベントやメッセージを介さない同期的インテグレーション)と比較して以下のようなメリットを有する。

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

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

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

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

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

SF側の設定が数クリックで終わるという衝撃の設定工数。

良くも悪くも全変更をイベントとしてpublishするので、SFの任意のオブジェクトを別システム(or別SF組織)内のentityに同期する際に非常に便利。

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

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