【第3回】外部システム連携「ECSパターン」完全ガイド|OutSystems Architecture Specialist 合格対策

ArchitectureSpecialist(O11)

OutSystemsでエンタープライズアプリケーションを構築する際、避けて通れないのが「外部システム(ERP、CRMなど)との連携」です。OutSystems自体がデータの正本(System of Records)を持たず、外部にあるデータを扱う設計パターンをECS(External Core Service)パターンと呼びます。

試験では「大量のデータがあるが検索を高速にしたい」「更新の順序を保証したい」といったシナリオに対し、どのECSバリエーションを適用すべきかが頻繁に問われます。今回は、これら全パターンを詳細に解説します。



1. ECSパターンの基本構造

ECSパターンの核心は、「Core Service(_CS)」が利用者に提供するインターフェースを変えずに、背後の取得ロジックを隠蔽することにあります。

モジュール 役割
Integration Service(_is 外部APIをラップし、OutSystems内のデータ構造(正規化)に変換します。
Core Service(_CS 利用側にはこのモジュールがサービスを提供します。ここにキャッシュ用のエンティティを持つかどうかが、バリエーションの分かれ目です。



2. ECSパターンの主要バリエーション一覧

パターン名 データの持ち方 特徴・メリット 適したユースケース
Direct Integration キャッシュなし 常に最新データ。外部への負荷・遅延は高い データが秒単位で変化し、複製が許されない場合
Cold Cache(Summary) 概要のみ保存 検索・一覧表示を高速化。詳細は都度取得 全データは膨大だが、詳細は特定時のみ必要な場合
Batch Sync 全件同期 定期的な一括更新。OutSystemsの全機能を利用可能 データ更新頻度が低く、高い検索性が必要な場合
Lazy Load 参照時に保存 必要な時だけ取得してキャッシュ(Read-through) データの特定範囲のみが頻繁に参照される場合
Real-time Sync 即時同期 外部からのコールバックで即座に更新 常に最新の概要(車両位置など)を一覧したい場合
Transparency Service 複数ソース 複数システムの差異を統合APIで隠蔽 国内・海外などデータソースが分散している場合

以下では各パターンの詳細を解説します。

① Direct Integration(直接統合)

キャッシュを一切持たず、データが必要な時に都度外部APIを呼び出します。

メリット データが常に最新
デメリット 外部システムへの負荷が高く、検索やマッシュアップ(結合)が困難
使い所 データが秒単位で激しく変化し、複製が許されない場合

② Cold Cache Summary Data(サマリーデータのキャッシュ)

検索や一覧表示に必要な項目(名前、区分など)のみをOutSystems側のエンティティに保存(キャッシュ)します。

ポイント 詳細データはキャッシュせず、1件表示の時にのみ外部へ直接取りに行きます。
使い所 全データが膨大だが、実際に詳細まで見られるのはその10%程度という場合

③ Cold Cache with Batch Sync(バッチ同期)

タイマーを使用して、定期的に外部からデータを一括取得してキャッシュを更新します。

重要ルール 更新時はまず外部システムを同期的に更新し、成功してからキャッシュを更新する「Write-throughポリシー」を適用します。
使い所 データ変更頻度が低く、OutSystems側で高速な検索・ソートを行いたい場合

④ Lazy Load Details(詳細データの遅延読み込み)

「詳細データ」が必要になったタイミングでキャッシュを確認し、なければ外部から取得して保存します(Read-through caching)。

運用 キャッシュに有効期限を設定したり、外部の最終更新日時を比較してリフレッシュを判断します。



3. 【難関】リアルタイム同期と特殊パターン

⑤ Real-Time Sync(リアルタイム同期)

外部システム側からOutSystemsへ「変更があった」ことを通知(コールバック)させ、即座にキャッシュを更新します。

Queued Real-time Sync 大量の変更がある場合、インバウンドキューに入れて並行処理させます。
Ordered Real-time Sync 順序が重要な場合、Light BPTとシーケンス制御を用いて到着順序を保証します。

⑥ Transparency Service(透明性サービス)

複数の外部システム(例:国内顧客はERP1、海外顧客はERP2)にデータが分散している場合、上位の _IS が適切なドライバ(_DRV)を呼び分けるパターンです。

メリット 利用側はデータがどこにあるかを意識せずに済みます。

⑦ Hot Cache(ホットキャッシュ)

単なる複製ではなく、複数のテーブルの結合結果や複雑な計算結果を「事前に処理(Digest)した状態」で保存する、超高速アクセス専用のパターンです。



4. 試験対策:パターンの覚え方「3つの軸」

試験問題で迷ったら、以下の3つのキーワードで絞り込んでください。

# キーワード 選ぶべきパターン
1 データの鮮度 常に最新が必要なら「Direct」または「Real-Time Sync」
2 データ量と検索性 検索を速くしたいなら「Cold Cache Summary」
3 更新の順序 順序保証が必要なら「Ordered Real-time Sync」

📝 頻出ポイント

同期ロジックが複雑な場合は _Sync モジュールを分離することが「コードの独立性」の観点から強く推奨される、という点も試験頻出です。



第3回のまとめ

✅ この回のポイント

  • Write-throughポリシー:同期パターンでの更新時は、まず外部システムを更新し、成功後にローカルキャッシュを更新します。
  • Ordered Real-time Sync:並行処理による順序逆転を防ぐには、インバウンドキューとLight BPTを活用します。
  • _Sync モジュールの分離:同期ロジックを独立させることで、コアサービスのライフサイクルを守ります。



復習問題:合格への最終チェック!

▶ 問1:外部ERPのデータをOutSystemsのAggregateで検索・フィルタリングしたい場合、最低限採用すべき構成はどれですか?
A. Direct Integration  B. Cold Cache Summary Data  C. Transparency Service  D. _APIモジュールの作成

正解:B(Cold Cache Summary Data)

AggregateはOutSystemsの物理エンティティに対してのみ実行できます。外部APIのデータをそのまま検索することはできないため、最低限サマリーデータをキャッシュとしてエンティティに保存する構成が必要です。

▶ 問2:キャッシュを更新する際、データの不整合を防ぐための正しい手順はどれですか?
A. ローカルエンティティを更新し、バックグラウンドで外部へ送る  B. 外部APIを呼び出し、成功を確認してからローカルキャッシュを更新する  C. 外部とローカルを同時に更新し、失敗したら両方ロールバックする  D. キャッシュは更新せず、常に外部システムを直接参照する

正解:B(外部APIを呼び出し、成功を確認してからローカルキャッシュを更新する)

これが「Write-throughポリシー」です。外部システムが正本(System of Records)であるため、まず外部の更新を確定させ、その成功を確認してからローカルキャッシュを更新することでデータの整合性を保ちます。

▶ 問3:大量の更新リクエストが外部システムから同時に送られてくる環境で、データの処理順序を正しく保ちたい場合に最適なパターンは?
A. Batch Sync  B. Lazy Load  C. Ordered Real-time Sync  D. Hot Cache

正解:C(Ordered Real-time Sync)

マルチスレッドによる順序逆転を防ぐための専用パターンです。インバウンドキューにリクエストを積み、Light BPTとシーケンス制御を用いて到着順序を厳密に保証します。

▶ 問4:同期ロジックを専用の _Sync モジュールに切り出す主な理由は何ですか?
A. ライセンスの消費を節約するため  B. コアサービスの利用者から同期の詳細を隠蔽し、個別にデプロイ可能にするため  C. キャッシュの容量を増やすため  D. CSSの適用を容易にするため

正解:B(コアサービスの利用者から同期の詳細を隠蔽し、個別にデプロイ可能にするため)

ライフサイクルの独立性とコードの保守性が最大の理由です。同期ロジックを分離することで、同期の仕様変更がコアサービス本体に影響を与えなくなり、それぞれを独立してデプロイ・テストできるようになります。

▶ 問5:複数の異なる外部DB(SQL ServerとOracleなど)にある同一コンセプトのデータを、一つの窓口で提供する設計パターンは?
A. ECS Base Pattern  B. Transparency Service  C. Pub/Sub Variation  D. Cold Cache with Batch Sync

正解:B(Transparency Service)

ドライバ(_DRV)を使用して実装の差異を吸収するパターンです。利用側はデータがどの外部システムに存在するかを意識せず、統一されたインターフェースでアクセスできます。

コメント

タイトルとURLをコピーしました