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