このパターンは"レガシディスプレイスメントのパターン"の一部です
クリティカルアグリゲーター
業務のさまざまな部分を結合して重要な意思決定をサポートします
2022年1月19日
イアン・カートライト、ロブ・ホーン、およびジェームズ・ルイス
コンテンツ
ビジネスリーダーは、企業全体の幅広い活動の影響を受ける意思決定を行うことがよくあります。たとえば、売上マージンを理解しているメーカーは、原材料のコスト、製造施設の運営コスト、売上レベル、価格に関する情報を必要とする場合があります。地域、市場、組織全体で集計された正しい情報を、理解可能な形式で利用できる必要があります。
クリティカルアグリゲーターは、この情報を抽出するために「訪問」するシステム、検査するファイル/テーブル/API、さまざまなソースからの情報を関連付ける方法、およびこのデータをアグリゲートするために必要なビジネスロジックを知っているソフトウェアコンポーネントです。この情報は、印刷されたテーブル、グラフとテーブルのあるダッシュボード、またはコンシューマーのスプレッドシートにアクセスするデータフィードを通じてビジネスリーダーに提供されます。
本質的に、これらのレポートには、財務データ、販売データ、顧客データなど、ビジネスの多くの異なる部分からデータを収集することが含まれます。カプセル化や関心の分離などの適切な手法を使用して実装する場合、これは特定のアーキテクチャ上の課題を引き起こしません。しかし、特にモノリシックなメインフレームやデータウェアハウスなどのレガシーシステム上にこの要件を導入するときに、特定の問題が発生することがよくあります。
レガシーでは、このパターンの実装は、ほぼ常に、処理中に必要なデータをフェッチするためにサブコンポーネントに直接アクセスできることを利用しています。これにより、特に厄介な結合が発生します。上流システムは、今ではインベイシブクリティカルアグリゲーターを破損するリスクがあるため、データ構造を進化させることができなくなります。ビジネスとそのリーダーを支えるというその重要な役割のために、このような障害の影響は特に大きく、目立つものとなります。

図 1: Pervasive Aggregator を使用したレポート
機能
まず、レポートなどを出力するために必要な入力データがどのようなものかを定義します。通常、ソースデータは全体的なアーキテクチャのコンポーネント内にすでに存在しています。その後、ソースデータを「読み込み」て処理して出力を生成する実装を作成します。ここで重要なのは、ソースデータの構造と密結合に陥ったり、既存のコンポーネントのカプセル化を壊して必要なデータを取得したりしないようにすることです。データベースレベルでは、これは ETL(抽出、変換、読み込み)またはサービスレベルの API を使用して実現できます。ETL のアプローチは、ソースの形式または宛先の形式に依存する場合が多いことに注意してください。長期的に見ると、これは変更の障壁になる可能性があります。
処理はレコード単位で行うことができますが、より複雑なシナリオでは、この中間データの準備ができると次の処理ステップがトリガーされる中間状態が必要になる場合があります。したがって、多くの実装では、パイプライン(一連のパイプとフィルター)が使用されます。1 つのステップの出力が次のステップの入力になります。
データの時間軸は重要な考慮事項であり、取引日の終わりなど、適切なタイミングでソースデータを使用する必要があります。これにより、アグリゲーターとソースシステム間にタイミング依存関係が発生する可能性があります。
1 つのアプローチは、特定の時間に対象をトリガーすることです。ただし、このアプローチはソースシステムの遅延に対して脆弱です。たとえば、アグリゲーターを午前 3 時に実行しますが、ソースシステムに遅延があると、集計の結果は古いデータまたは破損したデータに基づいている可能性があります。もう 1 つのより堅牢なアプローチは、ソースシステムがソースデータを準備ができたら送信または公開し、すべてのデータが使用可能になったらアグリゲーターをトリガーすることです。この場合、アグリゲーターの結果は遅延しますが、少なくとも有効な入力データに基づいているはずです。
ソースデータにタイムスタンプも設定できますが、これにはソースシステムがすでに正しい時刻データを使用していたり、変更が容易であったりすることが必要です。これはレガシーシステムには当てはまらない場合があります。タイムスタンプ付きデータが使用可能な場合は、バージョン付きの値などの信頼性が高く有効な結果を保証するために、より高度な処理を適用できます。
使用時期
このパターンは、ビジネス内のさまざまな部分またはドメイン全体を俯瞰する必要がある場合に通常使用されます。通常、異なるドメインのデータを要約ビューまたは意思決定支援に使用される一連のメトリクスに関連付ける必要があります。
レガシーの顕現
過去のネットワーク帯域幅と I/O 速度の制限により、データ処理とデータストレージを同じマシン上に並べて配置することが理にかなうことがよくありました。合理的なアクセス時間で大量のデータを格納するには、多くの場合、特殊なハードウェアが必要でした。これにより、一元的なデータストレージソリューションが生まれました。これら 2 つの要因が合わさって、このパターンの多くのレガシー実装がソースデータ構造と密結合し、データの更新スケジュールとタイミングに依存し、実装が多くの場合データストレージと同じハードウェア上にあることが起こりました。
その結果発生する侵略的クリティカルアグリゲータは、全体的なシステムのさまざまな部分に根を下ろしています。そのため、抽出することが非常に困難です。大まかに言うと、変位には 2 つのアプローチがあります。最初の方法は、クリティカルアグリゲーターの新しい実装を作成することです。これは、フローの逸らしなどの他のパターンと組み合わせて行うことができます。もう 1 つのより一般的であるアプローチは、アグリゲーターをそのままにして、レガシーミミックなどの手法を使用して、変位全体で必要なデータを提供することです。もちろん、新しい実装は最終的には必要になります。
侵略的重要なアグリゲーターにおける課題
重要なアグリゲーターのほとんどのレガシー実装は、ソースデータ周辺におけるカプセル化の欠如により特徴付けられます。ソースデータの構造と形式に直接依存した処理が行われます。また、処理とデータアクセスコードが混在しているため、懸念事項が適切に区別されていません。ほとんどの実装はバッチデータ処理言語で記述されています。
このアンチパターンは、システム内の結合率が高いことで特徴付けられます。特に、実装がカプセル化せずにソースデータに直接アクセスする場合です。そのため、ソースデータ構造に変更があると、処理と出力にすぐに影響が出ます。この問題に対する一般的なアプローチは、ソースデータ形式をフリーズするか、すべてのソースデータに対する変更管理プロセスを追加することです。ソースデータとシステムの大規模な階層が存在する場合、この変更管理プロセスは特に非常に複雑になる可能性があります。
侵略的重要なアグリゲーターは、カプセル化の欠如により最適化や並列処理の導入が困難になるため、データが増えるとスケールアップしにくくなります。実行時間がデータ量に比例して増加する傾向があります。処理とデータアクセス機能が組み合わされているため、システム全体を垂直にスケーリングする必要があります。これは、処理をスケールアップさせる非常に高価な方法であり、カプセル化されたシステムでは、データの保存とは別の一般的なハードウェアを使用して実行できます。
侵略的重要なアグリゲーターは、タイミングの問題を受けやすい傾向があります。ソースデータの更新が遅れると、集約が遅れるか、古いデータで実行される場合があります。統合レポートのクリティカルな性質を考慮すると、これはビジネスに深刻な問題を引き起こす可能性があります。処理中にソースデータに直接アクセスするため、実装には通常、「ソースデータが最新で、安定して変更がない」という定義された「安全な時間枠」があります。これらの時間枠は通常はシステムによって強制されるのではなく、慣習であり、他の場所で文書化されます。
処理時間が長くなると、ソースデータを生成するシステムのタイミング上の制約が生じることがあります。最終出力が一定の時間内に完了する必要がある場合、処理時間が長くなると、ソースデータがその分早く最新かつ安定している必要があります。これらのさまざまなタイミング上の制約により、異なるタイムゾーンからのデータを組み込むことが困難になり、一晩の「安全な時間枠」が世界中の他の場所の通常の勤務時間と重なる場合があります。タイミングとトリガーの問題はこのパターンのエラーとバグの非常に一般的な原因であり、診断が難しい場合があります。
処理とソースデータアクセスの懸念事項が適切に区別されていないため、修正とテストも困難です。時間が経つにつれて、このコードはバグ、ソースデータ形式の変更、新しい機能に対する回避策を組み込むように拡張されます。重要なアグリゲーターのほとんどのレガシー実装は、データの誤りに対するビジネスリスクと並んで、このような課題により「フリーズされた」状態にあることがよくあります。密結合のため、変更の凍結はソースデータ、ひいては対応するソースシステムにまで広がる傾向があります。
アグリゲーターの出力も「肥大化」する傾向があります。上記の課題を考えると、新しいレポートを作成するよりも、既存のレポートを拡張して新しいデータを追加する方が often simpler です。これにより、実装のサイズと複雑さ、および各レポートのビジネスクリティカル性が向上します。また、アグリゲーターの出力の各用途を分析して、ニーズがより単純でよりターゲットを絞った出力で満たされる可能性があるかどうかを調べる必要があるので、置き換えが困難になる可能性もあります。
この(アンチ)パターンを実装しているのは COBOL とアセンブラ言語であることが一般的です。これは置換の難しさと、出力がビジネスにとってどれほど重要であるかをどちらも示しています。
このページは、
レガシー置換のパターン
の一部です。
パターン
重要な改訂
2022年1月19日