Herokuといえばそれ自体が便利なPaaSサービスですが、Salesfroceのエコシステム上で構築する際に利用できる様々なソリューションが用意されています。Heroku Connectもそのうちのひとつ。
今回そのHeroku Connectの仕様で色々はまったので、調べたことをまとめます。
状況
直近のプロジェクトでは、Salesforceへ格納したデータをHeroku上に構築したWebアプリケーションで呼び出して表示しています。ざっくり以下のような感じ。
- データ読み取り:
- SFDC → Heroku Postgres (Heroku Connectで同期) → Webアプリ
- データ更新:
- Webアプリ → MuleSoft (Salesfroce社系列のAPIプラットフォームサービス) → SFDC
こうすることで、データ更新の流れが一方通行になって整理される、というアーキテクチャです。
ただ更新データがHeroku Postgresへ反映するのがたまに遅れてしまう事象が発生していました。
仕様を読み解いて問い合わせてとやったところ、結論、データ更新の同期が遅れる事象は、結局製品側では解決する方法がなかった
そもそもHeroku Connectとは
Heroku Conect: SFDCからHeroku上のPostgresに同期してくれるPaaSサービス
同期のモードはふたつあり、オブジェクトごとに設定が可能
- Interval Polling:
- 一定間隔ごとにSFDC側の変更の同期を行う。インターバルは2分~1時間
- Accelerated Polling:
- ほぼリアルタイムで同期を行う。SFDCでデータ更新が入るとSFDC側からAPIでHeroku Connectへ通知が飛ぶ。それをトリガーにHeroku Connectは同期を実行する。
Accelerated Pollingが曲者
- Accelerated Pollingをオンに設定していても、"ベストエフォート"対応のため、時々Interval Pollingへ同期方法が切り替わってしまう。(いつ変わってしまい、いつ戻るのかはよくわからない)
- Herokuに問い合わせたところ、Acceleratedで同期されるのか、Interval で同期されるのかはSFDCで更新が起きた時点の状況による、という回答だった
- Heroku Connect側のリソース状況、問合せ先のSFDC側の状況などを鑑みて、Heroku Connectはその都度選択して同期方法を決定している。
- そのため、この場合はIntervalによる同期になる、という簡単な条件では言えない。
- あるアプリに割り当たっているリソースは限りがあり、Acceleratedで同期すればするほどそのリソースが減っていき、Intervalで同期される確率が高まるようなイメージ。
- Accelerated Pollingを利用する場合は、Heroku ConnectのPrivate 4以上のTierを推奨。(お高い…)
- 問題がありそうなことはわかっているものの、2023/4月時点では調査・改修の優先度は低い。
というわけで、時たまデータ更新がHeroku側へ反映されるのに時間がかかってしまうことがあるというわけです。
Heroku ConnectをSFDCデータの読み取り専用で使う場合、データ更新をリアルタイムで反映させる必要がある処理は別の方法でデータ取得することを考えた方がよさそう。
ワークアラウンド
ワークアラウンドはいたってシンプルで、Interval Pollingに切り替わった際に、Heroku Connectのダッシュボードから再度SFDCの再認証を行う、というもの。
Why has Accelerated Polling stopped working for Heroku Connect?
※ただ、これもAccelerated Pollingに戻る可能性が高まるに過ぎず、なんとも煮え切らない回答なのでした…(完)