在現(xiàn)代 IT 架構(gòu)中,實時處理連續(xù)的業(yè)務(wù)數(shù)據(jù)和事件流變得越來越重要。這種類型的架構(gòu),其中事件正在構(gòu)建數(shù)據(jù)處理的中心,也稱為響應(yīng)式流架構(gòu)。在下文中,我將展示如何借助工作流技術(shù)解決一些相關(guān)挑戰(zhàn)。
讓我們先仔細(xì)看看這種類型的架構(gòu)。基本上,基于事件的數(shù)據(jù)處理并不新鮮,實際上已經(jīng)在各個專業(yè)領(lǐng)域(例如金融部門)中發(fā)展了數(shù)十年。但是,自過去幾年以來,出現(xiàn)了處理數(shù)據(jù)流的新標(biāo)準(zhǔn)。像 Apache Kafka, Storm, Flink, or Spark 的日益普及,推動了新的炒作。
從工業(yè)生產(chǎn)系統(tǒng)到多人電腦游戲,越來越頻繁地使用所謂的流式架構(gòu),以便能夠?qū)崟r處理大數(shù)據(jù)。流媒體架構(gòu)已經(jīng)發(fā)展成為現(xiàn)代科技公司的核心架構(gòu)元素。在許多公司中,實時流已成為其架構(gòu)中的核心系統(tǒng)。
目標(biāo)是能夠更快地集成新的系統(tǒng)解決方案并連接任何類型的數(shù)據(jù)流。流媒體架構(gòu)不僅存在于 eBay、Netflix 或亞馬遜等技術(shù)巨頭中,而且在今天,每一家致力于業(yè)務(wù)流程數(shù)字化的現(xiàn)代科技公司都可以使用流媒體架構(gòu)。那么,構(gòu)建這樣一個架構(gòu)的主要挑戰(zhàn)是什么?
處理數(shù)據(jù)流
在事件流的早期,數(shù)據(jù)流被記錄并隨后進(jìn)行分析(批處理),實際業(yè)務(wù)邏輯完全不受影響。但是,隨著業(yè)務(wù)邏輯變得更加復(fù)雜,處理數(shù)據(jù)變得更加困難。因此,處理數(shù)據(jù)流的一般任務(wù)提出了許多不同的挑戰(zhàn)。
來自不同來源(Producer)的數(shù)據(jù)需要進(jìn)行排序、分類并分派到不同的目標(biāo)(Consumer)。生產(chǎn)者可以生成不同類型的事件,而消費者通常只對可能由不同消費者創(chuàng)建的特定事件感興趣。系統(tǒng)必須能夠以協(xié)調(diào)的方式對數(shù)據(jù)進(jìn)行分區(qū)、結(jié)構(gòu)化和分發(fā)。
為了保證高數(shù)據(jù)吞吐量,此類系統(tǒng)必須水平擴展。與此同時,Apache Kafka已成為此類技術(shù)的事實上的標(biāo)準(zhǔn)。它提供了很大的靈活性,并且可以以多種不同的方式集成到其他系統(tǒng)中。
流分析和業(yè)務(wù)處理
但是,捕獲數(shù)據(jù)流只是挑戰(zhàn)的一部分。某些數(shù)據(jù)處理必須與傳入數(shù)據(jù)同時進(jìn)行,以便能夠迅速將結(jié)果用于決策。例如,購物車系統(tǒng)中的產(chǎn)品選擇可以觸發(fā)推薦系統(tǒng)并行執(zhí)行。這種類型的需求在流架構(gòu)中創(chuàng)建了另一個構(gòu)建塊——稱為流分析。
有時,來自數(shù)據(jù)流的單個事件足以觸發(fā)預(yù)定義的業(yè)務(wù)邏輯。但是,通常需要能夠識別不同事件之間的聯(lián)系,以便運行能夠產(chǎn)生實際業(yè)務(wù)價值的高級業(yè)務(wù)流程。通過在給定的時間段內(nèi)累積它們,可以在時移的相似事件之間建立這種聯(lián)系。例如,在線商店系統(tǒng)中對某種產(chǎn)品的短期需求增加可能會觸發(fā)額外生產(chǎn)線的啟動。在其他情況下,可能需要關(guān)聯(lián)某些不同類型的事件并合并數(shù)據(jù)以觸發(fā)相應(yīng)的業(yè)務(wù)流程。這些方法也稱為Windowing和 Joining。
在所有這些情況下,都會實施所謂的微批次來運行流分析模塊內(nèi)的業(yè)務(wù)邏輯。Apache Kafka Streams是Kafka-Stack 中的一個擴展,提供了許多這些功能。它允許使用不同的編程語言(如 Java 或 Scala)開發(fā)微批次。在JavaSpektrum 雜志2021/03版本中之前,來自 Siemens AG 的 George Mamaladze 用更廣泛的方法描述了這個概念。
然而,微批處理帶來了新的挑戰(zhàn)。業(yè)務(wù)邏輯不能再用簡單的功能來描述了。例如,需要有狀態(tài)算法來保持一段時間內(nèi)的數(shù)據(jù)聚合。另一個要求是這些算法的并行執(zhí)行與相應(yīng)的狀態(tài)管理。因此,有必要保留這些狀態(tài),并在出現(xiàn)錯誤時在上次中斷的點恢復(fù)業(yè)務(wù)流程。這種業(yè)務(wù)邏輯的實現(xiàn)很復(fù)雜,而且通常很耗時。
為了能夠管理更復(fù)雜的長期運行的業(yè)務(wù)流程,工作流引擎成為實現(xiàn)數(shù)據(jù)流和業(yè)務(wù)邏輯分離的重要構(gòu)建塊。工作流引擎在處理復(fù)雜業(yè)務(wù)邏輯和長期保持業(yè)務(wù)狀態(tài)方面進(jìn)行了優(yōu)化。主要區(qū)別在于所有正在運行的微批次的狀態(tài)管理。工作流引擎的模型驅(qū)動架構(gòu)允許快速適應(yīng)不斷變化的需求和技術(shù)。
基于新的傳入事件(由 Micro-Batch 創(chuàng)建),工作流引擎可以啟動新的業(yè)務(wù)流程或繼續(xù)已啟動的流程實例。工作流引擎將自動持久化業(yè)務(wù)流程的狀態(tài),并可以從不同的生產(chǎn)者收集事件。然而,單個處理步驟的結(jié)果或業(yè)務(wù)流程的完成也可能產(chǎn)生新事件。
所以,一個內(nèi)無流架構(gòu),將工作流引擎需要的角色消費者和生產(chǎn)者控制業(yè)務(wù)流程的整個生命周期。
使用 Imixs-Workflow 進(jìn)行流分析
Imixs-Workflow是一個開源工作流引擎,提供廣泛的功能來控制復(fù)雜的業(yè)務(wù)流程?;谑录墓ぷ髁饕婵梢宰鳛槲⒎?wù)運行,并且可以通過其微內(nèi)核架構(gòu)進(jìn)行擴展。Imixs-Workflow 已經(jīng)帶有一個 Apache Kafka 適配器,它可以很容易地從響應(yīng)式流媒體平臺開始處理事件。
所述 Imixs-Kafka Adapter 充當(dāng)卡夫卡堆棧內(nèi)產(chǎn)生的事件的一個消費者。憑借其 Autowire 功能,Imixs-Workflow 還可以在處理生命周期中自動發(fā)送工作流消息。這允許在分布式微服務(wù)架構(gòu)中構(gòu)建更復(fù)雜的業(yè)務(wù)流程。
模型驅(qū)動的業(yè)務(wù)邏輯
業(yè)務(wù)流程建模符號 (BPMN)——當(dāng)今業(yè)務(wù)流程建模的標(biāo)準(zhǔn)——可以幫助以模型驅(qū)動的方式構(gòu)建靈活的架構(gòu)。BPMN 2.0 是一種基于 XML 的可擴展建模標(biāo)準(zhǔn),允許對復(fù)雜的業(yè)務(wù)流程進(jìn)行建模、分析和執(zhí)行。
在像 Imixs-Workflow 這樣的基于事件的工作流引擎中,業(yè)務(wù)流程的不同狀態(tài)被描述為Tasks。從一種狀態(tài)到下一種狀態(tài)的轉(zhuǎn)換由事件元素描述。事件可以通過使用 Kafka 流事件觸發(fā),也可以由外部服務(wù)或人類參與者觸發(fā)。通過將任務(wù)和事件與網(wǎng)關(guān)元素相結(jié)合,可以對業(yè)務(wù)規(guī)則進(jìn)行建模,以根據(jù)收集到的數(shù)據(jù)做出決策并對不同情況做出反應(yīng)。
聚合流事件
使用工作流引擎使用事件流的優(yōu)點是能夠在特定上下文中長時間聚合數(shù)據(jù)。數(shù)據(jù)可以從不同來源聚合和轉(zhuǎn)換,并與現(xiàn)有業(yè)務(wù)數(shù)據(jù)相結(jié)合。
例如,在購物系統(tǒng)中,新客戶的注冊可以觸發(fā) VIP 會員流程。工作流引擎首先僅對新客戶注冊做出反應(yīng),以啟動 VIP 會員業(yè)務(wù)流程。從這一刻起,工作流引擎會對購物系統(tǒng)中啟用 VIP 會員資格的某些事件做出反應(yīng)。例如,這可以是購買某些產(chǎn)品或訂閱。
更改業(yè)務(wù)邏輯不需要對代碼庫進(jìn)行任何更改或?qū)崿F(xiàn)新的微批次。此外,可以在運行時調(diào)整新的附加業(yè)務(wù)工作流,而無需更改架構(gòu)。
人工智能
基于 Imixs 微內(nèi)核架構(gòu),可以使用提供附加功能的各種適配器或插件模塊來擴展業(yè)務(wù)流程。例如,Imixs-ML 適配器提供了一個通用 API 來集成各種 ML 框架,如 spaCy 或 Apache mxnet。借助這種適配器技術(shù),可以通過人工智能豐富業(yè)務(wù)處理。
Imixs-ML 的核心概念基于自然語言處理 (NLP),它是機器學(xué)習(xí)的一個子領(lǐng)域。使用命名實體識別 (NER),可以分析給定的文本流,并且可以從任何類型的流事件中提取文本實體,例如人員、地點,甚至發(fā)票數(shù)據(jù)(例如日期和發(fā)票總額)。這種機器學(xué)習(xí)過程的結(jié)果可用于對更復(fù)雜的業(yè)務(wù)邏輯進(jìn)行建模,并基于各種訓(xùn)練模型進(jìn)行業(yè)務(wù)討論。
持續(xù)學(xué)習(xí)
持續(xù)學(xué)習(xí)是 ML 訓(xùn)練模型從數(shù)據(jù)流中持續(xù)學(xué)習(xí)的能力。在實踐中,這意味著支持模型在新數(shù)據(jù)進(jìn)入時自主學(xué)習(xí)和適應(yīng)生產(chǎn)的能力。通過 Imixs-ML 適配器,這個概念被集成到業(yè)務(wù)流程的實時周期中。Imixs-Workflow 引擎可以根據(jù)業(yè)務(wù)流程的結(jié)果自動優(yōu)化 ML 訓(xùn)練模型。通過這種方式,來自事件流平臺的數(shù)據(jù)可用于生成新的訓(xùn)練模型以供未來處理。但人工操作員做出的決定也可用于改進(jìn)現(xiàn)有的 ML 訓(xùn)練模型。
結(jié)論
通過將反應(yīng)式流架構(gòu)與現(xiàn)代業(yè)務(wù)流程管理的概念相結(jié)合,可以在很短的時間內(nèi)實現(xiàn)高度復(fù)雜的業(yè)務(wù)流程。得益于基于現(xiàn)代 BPMN 2.0 的工作流技術(shù)的模型驅(qū)動方法,即使是復(fù)雜的業(yè)務(wù)流程也可以在不改變整體架構(gòu)的情況下設(shè)計和執(zhí)行。這種類型的架構(gòu)為處理連續(xù)數(shù)據(jù)流開辟了全新的可能性。