葉彬:彈性可伸縮海量工作流引擎建設(shè)實(shí)踐_第1頁
葉彬:彈性可伸縮海量工作流引擎建設(shè)實(shí)踐_第2頁
葉彬:彈性可伸縮海量工作流引擎建設(shè)實(shí)踐_第3頁
葉彬:彈性可伸縮海量工作流引擎建設(shè)實(shí)踐_第4頁
葉彬:彈性可伸縮海量工作流引擎建設(shè)實(shí)踐_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

彈性可伸縮海量工作流引擎建設(shè)實(shí)踐騰訊架構(gòu)師/葉彬示即工作流程的計(jì)算模型,為完成一個(gè)業(yè)務(wù)目標(biāo),所需要經(jīng)歷的一系列步驟,通常用流程圖來表示示例:服務(wù)器硬件故障自動(dòng)診斷流程,日志下載→規(guī)則庫加載→策略匹配結(jié)束開始結(jié)束非工作流模式下,原始需求:日志下載→規(guī)則庫加載→規(guī)則匹配doLogsLoad();}doRulesLoad();rulesMatchTask.handle();}}新增需求:1)指定機(jī)型派單人工分析;2)命中指定規(guī)則派單至廠商分析voidhandle(){voidhandle(){doManualAnalysis();}新增邏輯塊2}voidhandle(){rulesLoadTask.handle();}}}voidhandle(){doRulesLoad();rulesMatchTask.handle();一}}voidhandle(){doRulesMatch();supplyDiagnoseTask.handle();云使用工作流模式的任務(wù)協(xié)作-分離任務(wù)實(shí)現(xiàn)和任務(wù)協(xié)作關(guān)系日志下載規(guī)則加載規(guī)則匹配開始結(jié)束voidhandle(){}}}voidhandle(){doRulesMatch();」}使用工作流模式,各任務(wù)只實(shí)現(xiàn)自身原子邏輯,協(xié)同關(guān)系使用流程圖表示當(dāng)新的邏輯需要復(fù)用已有任務(wù)節(jié)點(diǎn)時(shí),只需調(diào)整流程圖,無需修改已有代碼doSupplierAnalysis();doManualAnalysisdoSupplierAnalysis();}}}BPMN流程圖規(guī)則加載規(guī)則加載規(guī)則匹配結(jié)束開始結(jié)束doRulesLoad();doLogsLoad();doRulesMatch();}}}}}◆解釋任務(wù)定義◆控制狀態(tài)流轉(zhuǎn)◆維護(hù)內(nèi)部狀態(tài)◆監(jiān)控/管理工作流執(zhí)行◆解釋任務(wù)定義◆控制狀態(tài)流轉(zhuǎn)◆維護(hù)內(nèi)部狀態(tài)◆監(jiān)控/管理工作流執(zhí)行微服務(wù)1微服務(wù)1微服務(wù)架構(gòu)的核心是把復(fù)雜的業(yè)務(wù)系統(tǒng)拆分成高內(nèi)聚的微服務(wù),每個(gè)服務(wù)負(fù)責(zé)相對(duì)獨(dú)立的邏輯。要實(shí)現(xiàn)業(yè)務(wù)價(jià)值,不是看單個(gè)服務(wù)的能力,而是要協(xié)調(diào)所有服務(wù)保證端到端業(yè)務(wù)流的成功微服務(wù)編排是指將多個(gè)微服務(wù)組合成一個(gè)完整的業(yè)務(wù)流程或服務(wù)的過程,該模式下會(huì)有一個(gè)中控引擎:容器3容器2容器1容器3容器2-十萬級(jí)服務(wù)器、單體流程引擎、可調(diào)度原子操作時(shí)鐘狀態(tài)更新邏輯提到“流程引擎”,聯(lián)想到的都是緩慢、低吞吐的使用場(chǎng)景,比如人工審批任務(wù)等,但服務(wù)器運(yùn)營(yíng)領(lǐng)域的大部分開發(fā)起審批功通過結(jié)束主流工作流引擎產(chǎn)品對(duì)比發(fā)現(xiàn),zeebe支持高吞吐、低延時(shí)和橫向擴(kuò)容,能較好地適應(yīng)微服務(wù)架構(gòu)場(chǎng)景。它不依賴外部組件、設(shè)計(jì)之初就考慮了超大規(guī)模的微服務(wù)編排問題性能與吞吐低低中高高高容災(zāi)自愈能力無無配置復(fù)雜配置復(fù)雜配置復(fù)雜天然支持橫向伸縮能力無無配置復(fù)雜配置復(fù)雜配置復(fù)雜天然支持可觀測(cè)性低低低低低天然支持外部依賴DB/MQDB/MQ無BPMNHandler模型BPMNHandler模型DAG(Python)worker模型,適合微服務(wù)架構(gòu)worker模型,BPMNworker模型,適合微服務(wù)架構(gòu)文檔友好度低高高中低中產(chǎn)品化程度高高高中低高社區(qū)活躍度中高低高zeebe工作流引擎頂層設(shè)計(jì)jobjobworkersJavazeebe工作流核心特性新老引擎頂層架構(gòu)對(duì)比舊ActivitiDBActivitiDB任務(wù)Handler新新StreamProcessorRocksDBLogStream-Partition-0LogStream-Partition-1-ReplicaLogStream-Partition-0-ReplicaLogStream-Partition-1StreamProcessorRocksDBJobWorker開機(jī)Task關(guān)機(jī)TaskBroker-0異步隊(duì)列模型,削峰,緩解后端存儲(chǔ)計(jì)算壓力01基于單集群的工作流服務(wù)體系建設(shè)如何將開源組件落地到生產(chǎn)環(huán)境?--關(guān)鍵:量化理解組件能力問題1:同等配置壓測(cè),僅官方benchmark的30%問題2:解決磁盤瓶頸后,吞吐提升,但成功率僅72%20wcnt(個(gè)/秒)wband(MB/s)util(%)SSD盤IOPS120000000—received-18—received-4—received-5—received-6一queue-limit-11一queue-limit-12—queue-limit-16-queue-limit-17-queue-limit-18—queuelimit-4—queue-limit-5一queue-limit-6—inflight-11—infight-12—inflight-16—inflight-17—infight-18—inflight-4—inflight-5—inflight-65000—dropped-1—dropped-19—dropped-2—dropped-20—dropped-21—dropped-23—dropped-37—dropped-38—dropped-39—dropped-48—received-1—received-10—received-11—received-12—received-13—received-14—received-15—received-16—received-17—received-18—received-19—received-2—received-20—received-21logstreamprocess_id2020/12/3010:00:00ReinstallProcess創(chuàng)建中2020/12/3010:00:10ReinstallProcess創(chuàng)建完成2020/12/3010:00:11運(yùn)行中2020/12/3010:05:00ReinstallProcess…2020/12/3010:10:00ReinstallProcess完成logstreamInstanceCreatedInstanceCompleted運(yùn)行時(shí)數(shù)據(jù)cache根據(jù)事件更新狀態(tài)歷史數(shù)據(jù)-不變flush運(yùn)行中/完成優(yōu)點(diǎn):(1)所見即所得的數(shù)據(jù)模型,開發(fā)無需轉(zhuǎn)換,可直接用于統(tǒng)計(jì)分析報(bào)表zeebe-zeebe-workflow-client■多節(jié)點(diǎn)、多分區(qū)并行執(zhí)行33上上報(bào)workflow-kafka高可用MySQL:■對(duì)等網(wǎng)絡(luò)集群,無單點(diǎn)瓶頸workflow-auditESES冷數(shù)據(jù)workflow_record工作流服務(wù)體系快速接入3、加載3、加載sdk編寫各任務(wù)邏輯4、通過控制臺(tái)或api創(chuàng)建流程實(shí)例繪制流程圖2、通過控制臺(tái)發(fā)publicclassSomeJob{@EnhancedJobWorker(type="some-service.SomeJob")publicvoidhandleTask(finalEnhancedJobClientclient,finalActivatedJobjob){//業(yè)務(wù)邏輯//..任務(wù)的原子實(shí)現(xiàn)if(success){pleteJob(job);throwSomeException("失敗原因");}7650545276855987058476660.7058476660.11619287058476032.xship-service-system-installjob.lnitTaskSystemlnstallP02從單集群演進(jìn)到多集群,架構(gòu)彈性可伸縮1、現(xiàn)網(wǎng)問題-任務(wù)未調(diào)度結(jié)束時(shí)間2022-05-3019:20:022022-05-3019:20:022022-05-3019:20:012022-05-3019:20:012022-05-3019:18:042022-05-3019:15:022022-05-3019:15:01狀態(tài)已完成JobType:AJobType:BJobType:X集合分析2022-05-3019:20:022022-05-3019:20:022022-05-3019:20:01獲取pxe狀態(tài)獲取pxe狀態(tài)2022-05-3019:15:012022-05-3019:14:12ayedWorkQueueayedWorkQueueMember)…romansmirnovcommentedMember)…Description:zeebecient.requestimeoutWhenthebrokeractivatesjobsandbeforesendingthembacktothegateway,thegatewaypotentiallycouldcloseitsconnection(e.g,therequesttimedout,networkinterruption,gatewaydied,etc).Asaresult,thejobsbeingmarkedasactivatedremaintobeactivated,andtherebycannotbepickedupagainuntilthespecifiedjobtimeout.Inthecaseofhavinghighjobtimeouts,thismightresultinhighlatencybetweenthetimeajobiscreatedandcompleted.PotentialSolution:Wheneverthebrokercannotsendbacktheactivatedjobstothegateway,theactivatedjobsaremadere-activatablebysubmitingafailcommand:□Getnotifiedifrespondingwiththeactivatedjobstothegatewaywassuccessfulornot□Ifthesendingresponsefailed,makethejobsre-activatablebysubmittingafailjobcommandcomponent/gatewayscope/brokerscope/gatewayNomilestone1、線程池任務(wù)堆積,任務(wù)拉到后遲遲不處理2、broker激活job至activate后,因集群網(wǎng)絡(luò)或超時(shí)等問題未能通知到gateway,進(jìn)而無法同步至client6、執(zhí)行業(yè)務(wù)邏輯Thread-1zeebegateway.cluster1、數(shù)據(jù)存儲(chǔ)如何兼容數(shù)據(jù)格式變化2、與zeebe引擎的交互協(xié)議如何兼容新舊保持不變封裝了zeebeclientsdk,代碼需升級(jí)兼容僅升級(jí)版本業(yè)務(wù)微服務(wù)1業(yè)務(wù)微服務(wù)2問題輪詢?nèi)蝿?wù)和執(zhí)行的線程池問題輪詢?nèi)蝿?wù)和執(zhí)行的線程池任務(wù)輪詢器任務(wù)輪詢器JobPoller任務(wù)輪詢器1、不同微服務(wù)不可能同一時(shí)間點(diǎn)升級(jí)完畢zeebe引擎zeebe1.3.7zeebe0.26.0zeebe0.26.0創(chuàng)建實(shí)例Xzeebe0.26.0zeebe0.26.0zeebe0.26.0zeebezeebe0.26.0zeebe0.26.0zeebe0.26.0zeebe0.26.0zeebe0.26.0行行摒棄當(dāng)前的單點(diǎn)架構(gòu)設(shè)計(jì),設(shè)計(jì)多活模式。支持同一時(shí)間點(diǎn),同一個(gè)業(yè)務(wù)微服務(wù)可同時(shí)與新舊兩個(gè)zeebe引擎交互工作摒棄當(dāng)前的單點(diǎn)架構(gòu)設(shè)計(jì),設(shè)計(jì)多活模式。支持同一時(shí)間點(diǎn),同一個(gè)業(yè)務(wù)微服務(wù)可同時(shí)與新舊兩個(gè)zeebe引擎交互工作zeebesdk重耦合引擎,交互操作只能—對(duì)—zeebebroker-1zeebebroker-18zeebebroker-1zeebebroker-18新的問題L4負(fù)載均衡polljob/completeJob/failJobworkflow-cleintL4負(fù)載均衡zeebeclientcompleteJob/failJob重點(diǎn)問題攻克:集群解耦&流量精準(zhǔn)路由polljob/completeJob/failJob業(yè)務(wù)微服務(wù)人工運(yùn)維多集群架構(gòu)重點(diǎn)問題攻克1-業(yè)務(wù)解耦zeebe集群job拉取→行為簡(jiǎn)單且高頻→保持grpc不變山activatedcompleted/failedactivatedcompleted/failedtimeline!jobTypegrpc2jobsgrpc3/failJob改造集群1集群1broker---broker---createdactivatedcompleted/failedtimelinetimeline3completeJob/failJob3completeJob/failJobclientJobHandlerThreadPoolExecutorJobHandler->timelineiclientJobWorkerJobPollerJobHandlerThreadPoolExecutorJobHandler->timelinei多集群架構(gòu)重點(diǎn)問題攻克2-流量精準(zhǔn)路由新增ActivateJob轉(zhuǎn)發(fā)服務(wù)轉(zhuǎn)發(fā)至多個(gè)Zeebe集群ZeebeGateway工作流微服務(wù)jobTypeAjobTypeBcompleteJob/failJob.問題completeJob等請(qǐng)求如何精準(zhǔn)路由到目標(biāo)集群?//theunique//theuniquejobidentifier,i控制臺(tái)workflow-apiworkflow-apiworkflow-exporterworkflow-exporterID沖突zeebecluster-0zeebecluster-17返回實(shí)例7返回實(shí)例ID:10086workflow-apiworkflow-api服務(wù)分析后51位唯一標(biāo)識(shí)同一個(gè)區(qū)內(nèi)zeebe事件的id創(chuàng)建流程實(shí)例創(chuàng)建流程實(shí)例創(chuàng)建流程實(shí)例創(chuàng)建流程實(shí)例64位標(biāo)識(shí)唯—ID4返回實(shí)例ID:100868返回實(shí)例ID:10086系統(tǒng)重裝流程固件升級(jí)流程思路系統(tǒng)重裝流程固件升級(jí)流程實(shí)例10086是系統(tǒng)重裝流程還是固件升級(jí)流程?修改ID解析邏輯,保證不同集群的實(shí)例/任務(wù)實(shí)例10086是系統(tǒng)重裝流程還是固件升級(jí)流程?修改zeebe原生ID編碼規(guī)則,新增clusterlD解析邏輯實(shí)例ID:6755409618664841中間8位為分區(qū)數(shù)后51位為自增長(zhǎng)數(shù)前5位調(diào)整為集群idPXE安裝任務(wù)id:6755409618664841創(chuàng)建在Zeebe集群A的實(shí)例<前13位分區(qū)→———后51位表示分區(qū)內(nèi)自增ID—→第3號(hào)分區(qū)proxyClusterId=0zeebegateway-1broker-0broker-2par7-rep1-Fbroker-0par4-repl-Fbroker-2jobid:580964361937103210ClusterId=1zeebegateway-2jobtype-Bhttpgrpc業(yè)務(wù)運(yùn)維實(shí)時(shí)數(shù)據(jù)03秒級(jí)自動(dòng)容災(zāi),提升整體高可用全鏈路異地容災(zāi)如果工作流服務(wù)體系沒有完善的全鏈路容災(zāi)機(jī)制,海量服務(wù)器運(yùn)營(yíng)在故障時(shí)很可能會(huì)進(jìn)入災(zāi)難性的死循環(huán)常規(guī)服務(wù)器運(yùn)營(yíng)流程任務(wù)調(diào)度執(zhí)行帶內(nèi)、帶外通道廣州XX區(qū)愈故風(fēng)用可愈故風(fēng)用可可用區(qū)Czeebe引擎集群帶內(nèi)、帶外通道全鏈路容災(zāi)全鏈路容災(zāi)嘗試遠(yuǎn)程快速重啟恢復(fù)服務(wù)器服務(wù)器運(yùn)營(yíng)得益于多集群架構(gòu)落地,實(shí)現(xiàn)全鏈路異地雙活部署異地雙活部署異地雙活部署異地雙活部署異地雙活部署CLB-0CLB-1workflow-poller微服務(wù)異地雙活部署創(chuàng)建流程實(shí)例創(chuàng)建流程實(shí)例GatewayGatewayGatewayZeebeBrokerBrokerBrokerBrokerZeebeBrokerBrokerBrokerBroker可用區(qū)A可用區(qū)B可用區(qū)C雙熱集群秒級(jí)自愈,工作流服務(wù)實(shí)現(xiàn)業(yè)務(wù)零感知高可用雙熱集群部署模式,集群故障時(shí),秒級(jí)自動(dòng)切換,業(yè)務(wù)零感知微服務(wù)JobType-故障流程微服務(wù)JobType-固件升級(jí)微服務(wù)JobType-系統(tǒng)重裝微服務(wù)JobType-診斷流程異地雙活部署workflow-api集群負(fù)載均衡器cluster-0cluster-0cluster-1異常斷開4、故障集群失敗數(shù)+1,命中剔除請(qǐng)求失敗數(shù)處理器+100GatewayGatewayGatewayZeebeBrokerBrokerBroker上海XX區(qū)cluster-1GatewayGatewayGatewayZeebeBrokerBroker峰值10峰值10W+QPS,支撐服務(wù)器數(shù)億級(jí)自動(dòng)化作業(yè)支撐流程類型數(shù)支撐作業(yè)類型已完成流程實(shí)例量已完成服務(wù)器作業(yè)量已完成●運(yùn)行中●已取消●已失敗常態(tài)日處理任務(wù)量100W+5seconds2seconds0seconds多層級(jí)流程實(shí)例嵌套,流程靈活可復(fù)用多層級(jí)流程實(shí)例嵌套,流程靈活可復(fù)用服務(wù)器運(yùn)營(yíng)流程存在多層嵌套金字塔關(guān)系,對(duì)于這類多層嵌套的復(fù)雜流程,流程引擎建設(shè)基于實(shí)例維度的父子關(guān)系,提供了無層級(jí)上限限制的多層嵌套流程調(diào)度能力編輯流程變量流程變量流程實(shí)例信息子實(shí)例信息流程變量流程實(shí)例信息流程實(shí)例ID開始時(shí)間2024-06-0100:流程實(shí)例ID開始時(shí)間2024-06-0100:47:302024-06-0100:2024-05-3121:42:032024-05-3121:30:14結(jié)束時(shí)間2024-06-0223:53:532024-06-0100:47:272024-05-3121:50:182024-05-3121:40:02流程編碼已完成90592974962153已完成93946352619163在服務(wù)器運(yùn)營(yíng)流程中,因硬件、機(jī)房環(huán)境等問題會(huì)導(dǎo)致流程無法自動(dòng)完成,需要人工介入處理,為支持流程中的人工干預(yù),提供服務(wù)器全鏈路可視化控制臺(tái),提供流程運(yùn)營(yíng)操作,方便運(yùn)維人員隨時(shí)處理,大大提升了運(yùn)維效率wcv|發(fā)起四.主流程流程實(shí)例信息流程變量子實(shí)例信息畫主流程2024-06-0114:17:08流程圖刷新CancelInstan

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論