此模式為 "傳統取代模式" 的一部分

關鍵彙總器

結合企業不同部分的資料,以支援關鍵決策

2022 年 1 月 19 日

Ian CartwrightRob HornJames Lewis

企業領導人經常需要做出決策,而這些決策會受到整個企業廣泛活動的影響。例如,了解銷售利潤的製造商可能需要有關原材料成本、製造設施的營運成本、銷售水準和價格的資訊。針對特定區域、市場或整個組織彙總的正確資訊,需要以易於理解的形式提供。

關鍵彙總器是一種軟體元件,它知道要「拜訪」哪些系統以擷取此資訊,要檢查哪些檔案/表格/API,如何關聯來自不同來源的資訊,以及彙總此資料所需的商業邏輯。它透過列印表格、包含圖表和表格的儀表板,或提供給使用者試算表資料饋送的方式,將此資訊提供給企業領導人。

這些報表本質上涉及從企業的許多不同部分擷取資料,例如財務資料、銷售資料、客戶資料等。在使用封裝和關注點分離等良好做法實作時,這不會造成任何特定的架構挑戰。然而,當此需求實作於傳統系統之上,特別是單體式大型主機或資料倉儲時,我們經常會看到具體問題。

在傳統系統中,此模式的實作幾乎總是利用能夠直接深入子元件,以在處理過程中擷取其所需資料。這建立了一個特別糟糕的耦合,因為上游系統無法變更其資料結構,因為有破壞現在 侵入式關鍵彙總器 的風險。由於此類故障在支援企業及其領導人方面扮演著關鍵角色,因此後果特別嚴重且明顯。

圖 1:使用普遍彙總器進行報告

運作方式

首先,我們定義產生輸出(例如報告)所需的輸入資料。通常,原始資料已存在於整體架構的元件中。然後,我們建立一個實作來「載入」原始資料並處理它以建立我們的輸出。此處的重點是確保我們不會對原始資料的結構建立緊密耦合,或破壞現有元件的封裝以取得我們需要的資料。在資料庫層級,這可能透過 ETL(萃取、轉換、載入)或服務層級的 API 來達成。值得注意的是,ETL 方法通常會與來源或目的地格式相結合;從長遠來看,這可能會成為變更的障礙。

處理可以逐筆記錄完成,但對於更複雜的場景,可能需要中間狀態,而處理的下一步會在中間資料準備好後觸發。因此,許多實作會使用管道,也就是一系列 管道和篩選器,其中一個步驟的輸出會成為下一個步驟的輸入。

資料的時效性是關鍵考量,我們需要確保在正確的時間使用原始資料,例如在交易日結束後。這會在彙總器和來源系統之間產生時間相依性。

一種方法是在特定時間觸發事件,儘管此方法容易受到任何來源系統延遲的影響。例如,在凌晨 3 點執行彙總器,但是如果任何來源系統延遲,彙總結果可能會基於過時或損毀的資料。另一種更穩健的方法是讓來源系統在資料準備好後發送或發佈來源資料,並在所有資料可用後觸發彙總器。在這種情況下,彙總結果會延遲,但至少應基於有效的輸入資料。

我們也可以確保來源資料加上時間戳記,儘管這依賴於來源系統已經有正確的時間資料可用或容易變更,這可能不適用於舊有系統。如果時間戳記資料可用,我們可以套用更進階的處理來確保一致且有效的結果,例如 版本化值

何時使用

當我們需要對企業中許多不同的部分或領域取得整體概觀時,通常會使用此模式,通常是在需要將不同領域的資料關聯到摘要檢視或用於決策支援的一組指標時。

傳統表現

由於過去網路頻寬和 I/O 速度的限制,通常會將資料處理與資料儲存在同一台機器上。大量資料儲存加上合理的存取時間通常需要專用硬體,這導致集中式資料儲存解決方案。這兩個因素結合在一起,使得此模式的許多舊有實作緊密結合到來源資料結構,依賴於資料更新排程和時機,實作通常與資料儲存在同一台硬體上。

產生的侵入式關鍵聚合器將其根植於整體系統的許多不同部分 - 因此使其非常難以提取。廣義來說,有兩種置換方法。第一種方法是建立關鍵聚合器的全新實作,這可以透過轉移流程來完成,並結合其他模式,例如還原至來源。另一種更常見的方法是讓聚合器保留在原處,但使用舊有模擬等技術在置換過程中提供所需的資料。顯然最終需要一個新的實作。

侵入式關鍵聚合器的挑戰

關鍵聚合器的多數舊有實作的特徵是缺乏對來源資料的封裝,任何處理都直接依賴於各種來源資料格式的結構和形式。它們也缺乏明確的關注點分離,處理和資料存取程式碼混雜在一起。多數實作都是以批次資料處理語言編寫的。

此反模式的特徵是系統內的高度耦合,特別是當實作直接深入來源資料而沒有任何封裝時。因此,對來源資料結構的任何變更都會立即影響處理和輸出。解決此問題的常見方法是凍結來源資料格式或對所有來源資料新增變更控制程序。此變更控制程序可能會變得非常複雜,特別是在存在大量來源資料和系統的階層時。

侵入式關鍵聚合器也傾向於隨著資料量增加而擴充不良,因為缺乏封裝使得任何最佳化或平行處理的導入都存在問題,我們會看到執行時間傾向於隨著資料量增加而增加。由於處理和資料存取機制是結合在一起的,這可能會導致需要垂直擴充整個系統。這是一種非常昂貴的處理擴充方式,在封裝更好的系統中,這可以用與任何資料儲存分開的商品硬體來完成。

侵入式關鍵聚合器傾向於容易受到時機問題的影響。來源資料的更新延遲可能會延遲聚合或導致其在過期的資料上執行,由於聚合報表的關鍵性質,這可能會對企業造成嚴重的問題。在處理過程中直接存取來源資料表示實作通常有一個定義的「安全時間視窗」,來源資料必須在保持最新且穩定不變的狀態下。這些時間視窗通常不會由系統強制執行,而是通常是一個慣例,在其他地方記錄下來。

隨著處理時間增加,這可能會為產生來源資料的系統建立時機限制。如果我們有一個固定的時間,最後的輸出必須準備就緒,那麼處理時間的任何增加反過來表示任何來源資料都必須在更早的時間更新且穩定。這些不同的時機限制使得納入來自不同時區的資料變得有問題,因為任何隔夜的「安全時間視窗」都可能會與世界其他地方的正常工作時間重疊。時機和觸發問題是此模式非常常見的錯誤和臭蟲來源,這些問題可能很難診斷。

由於處理與原始資料存取之間的關注點分離不佳,修改和測試也具有挑戰性。隨著時間推移,此程式碼會逐漸增加,以納入錯誤解決方法、原始資料格式變更,以及任何新功能。我們通常發現,由於這些挑戰以及資料錯誤的業務風險,大多數關鍵彙總器的舊實作都處於「凍結」狀態。由於緊密結合,任何變更凍結都傾向於擴展到原始資料,因此也擴展到對應的原始系統。

我們也傾向於看到彙總器的「膨脹」輸出,因為根據上述問題,擴充現有報告以新增資料片段通常比建立全新報告來得簡單。這會增加實作大小和複雜度,以及每個報告的業務關鍵性質。它也可能使替換變得更加困難,因為我們首先需要分解彙總器輸出的每個用途,以找出是否有單獨的使用者群組,其需求可以用更簡單、更具針對性的輸出滿足。

在 COBOL 和組合語言中看到此(反)模式的實作很常見,這說明了替換的難度,但也說明了輸出對企業有多麼重要。

重大修訂

2022 年 1 月 19 日