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

下載本文檔

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

文檔簡介

彈性可伸縮海量工作流

引擎建設(shè)實踐騰訊架構(gòu)師/葉彬InfoQ極客傳媒極客邦科技2024年會議規(guī)劃促進軟件開發(fā)及相關(guān)領(lǐng)域知識與創(chuàng)新的傳播4月

5月

6月

8月

8月

10月

12月FCon

上海全球金融科技大會暨智能軟件開發(fā)生態(tài)展會議時間:8月16-17日AiCon

北京全球人工智能開發(fā)與應(yīng)用大會

暨大模型應(yīng)用生態(tài)展會議時間:已結(jié)束QCon

上海全球軟件開發(fā)大會暨智能軟件開發(fā)生態(tài)展會議時間:10月18-19日QCon

北京全球軟件開發(fā)大會暨智能軟件開發(fā)生態(tài)展會議時間:已結(jié)束AiCon

上海全球人工智能開發(fā)與應(yīng)用大會

暨大模型應(yīng)用生態(tài)展會議時間:8月18-19日ArchSummit深圳全球架構(gòu)師峰會暨智能軟件開發(fā)生態(tài)展會議時間:6月14-15日ArchSummit

北京全球架構(gòu)師峰會暨智能軟件開發(fā)生態(tài)展會議時間:12月20-21日目錄·背景·工作流引擎技術(shù)選型

·高可用架構(gòu)落地實踐

·落地場景與取得效果

·下一步計劃與思考InfoQ極客傳媒InfoQ

極客傳媒zB示什么是工作流即工作流程的計算模型,為完成一個業(yè)務(wù)目標(biāo),所需要經(jīng)歷的一系列步驟,通常用流程圖來表示

(業(yè)界通常用BPMN流程圖來描述一個工作流)示例:服務(wù)器硬件故障自動診斷流程,日志下載→規(guī)則庫加載→策略匹配日志下載規(guī)則加載規(guī)則匹配開始InfoQ極客傳媒結(jié)束非工作流模式下系統(tǒng)實現(xiàn)非工作流模式下,原始需求:日志下載→規(guī)則庫加載→規(guī)則匹配classRulesLoadTask{void

handle(){doRulesLoad();rulesMatchTask.handle();}classLogsLoadTask

{void

handle(){doLogsLoad();rulesLoadTask.handle();-}classRulesMatchTask{void

handle(){doRulesMatch();}新增需求:1)指定機型派單人工分析;2)命中指定規(guī)則派單至廠商分析InfoQ極客傳媒非工作流模式下的問題耦合高、調(diào)整難、復(fù)用低

class

ManualAnalyTask{

class

SupplyDiagnoseTask

{voidhandle(){

voidhandle(){class

LogsLoadTask{voidhandle(){doLogsLoad();if(isSpecialServer){manualAnalyTask.handle()lelse{rulesLoadTask.handle();}}}新加業(yè)務(wù)場景,要改已有的代碼。

→這不符合開閉原則!InfoQ極客傳媒class

RulesLoadTask{voidhandle(){doRulesLoad();rulesMatchTask.handle();

一}}class

RulesMatchTask{void

handle(){doRulesMatch();if(isSpecialRule){supplyDiagnoseTask.handle();doManualAnalysis();}doSupplierDiagnose();新增邏輯塊2新增邏輯塊1」}云么

T女

FU使用工作流模式的任務(wù)協(xié)作-分離任務(wù)實現(xiàn)和任務(wù)協(xié)作關(guān)系日志下載

規(guī)則加載

規(guī)則匹配開始

結(jié)束classRulesLoadTask{void

handle(){doRulesLoad();rulesMatchTask.handle();}}classLogsLoadTask{void

handle(){doLogsLoad();rulesLoadTask.handle();}classRulesMatchTask{void

handle(){doRulesMatch();」}使用工作流模式,各任務(wù)只實現(xiàn)自身原子邏輯,協(xié)同關(guān)系使用流程圖表示InfoQ

極客傳媒為什么需要工作流當(dāng)新的邏輯需要復(fù)用已有任務(wù)節(jié)點時,只需調(diào)整流程圖,無需修改已有代碼class

ManualAnalysisTask{void

handle(){doManualAnalysis();}BPMN

流程圖人工分析

供應(yīng)商診斷classSupplierAnalysisTask{void

handle(){doSupplierAnalysis();}日志下載開始class

RulesMatchTask{void

handle(){doRulesMatch();}class

RulesLoadTask{void

handle(){

doRulesLoad();}class

LogsLoadTask{void

handle(){

doLogsLoad();}InfoQ

極客傳媒規(guī)則加載

規(guī)則匹配是指定機型?是指定規(guī)則?結(jié)束否否所有涉及業(yè)務(wù)流轉(zhuǎn)按流程完成的場景都可通過工作流引擎作為支撐InfoQ極客傳媒什么是工作流引擎將任務(wù)實現(xiàn)與任務(wù)協(xié)作關(guān)系分離之后,就誕生了專門維護任務(wù)協(xié)作關(guān)系的程序-工作流引擎主要功能◆解釋任務(wù)定義◆控制狀態(tài)流轉(zhuǎn)◆維護內(nèi)部狀態(tài)◆監(jiān)控/管理工作流執(zhí)行工作流引擎任務(wù)1:已完成

任務(wù)2:進行中微服務(wù)1(任務(wù)1邏輯)業(yè)務(wù)邏輯微服務(wù)2

(任務(wù)2邏輯)工作流引擎與微服務(wù)編排微服務(wù)架構(gòu)的核心是把復(fù)雜的業(yè)務(wù)系統(tǒng)拆分成高內(nèi)聚的微服務(wù),每個服務(wù)負責(zé)相對獨立的邏輯。要實現(xiàn)業(yè)務(wù)價

值,不是看單個服務(wù)的能力,而是要協(xié)調(diào)所有服務(wù)保證端到端業(yè)務(wù)流的成功微服務(wù)編排是指將多個微服務(wù)組合成一個完整的業(yè)務(wù)流程或服務(wù)的過程,該模式下會有一個中控引擎:◆按業(yè)務(wù)邏輯的藍圖,編排各微服務(wù)的調(diào)用關(guān)系中控引擎◆監(jiān)控整個業(yè)務(wù)流的狀態(tài)◆提供機制處理單個服務(wù)的失敗,保證整個業(yè)務(wù)流的成功服務(wù)C業(yè)務(wù)邏輯容器3InfoQ極客傳媒服務(wù)B業(yè)務(wù)邏輯容器2工作流引擎很適合作為中控引擎,來編排調(diào)度微服務(wù)服務(wù)A業(yè)務(wù)邏輯容器1當(dāng)前狀態(tài)

下一狀態(tài)時鐘狀態(tài)更新邏輯第四階段:云原生流程引擎階段第二階段:狀態(tài)機流轉(zhuǎn)階段萬級服務(wù)器、狀態(tài)機流轉(zhuǎn)、沉淀腳本工具狀態(tài)機輸入騰訊服務(wù)器運營歷程-第三階段:單體流程引擎階段十萬級服務(wù)器、單體流程引擎、可調(diào)度原子操作第一階段:人力運維階段InfoQ

極客傳媒百萬級服務(wù)器、分布式流程引擎、毫秒級任務(wù)調(diào)度于級服務(wù)器、無引擎、人工駐場狀態(tài)機輸出組合邏輯二

、工作流引擎技術(shù)選型InfoQ極客傳媒服務(wù)器運營領(lǐng)域場景需求提到“流程引擎”,聯(lián)想到的都是緩慢、低吞吐的使用場景,比如人工審批任務(wù)等,但服務(wù)器運營領(lǐng)域的大部分是程序化自動任務(wù),吞吐高,任務(wù)流轉(zhuǎn)快,傳統(tǒng)流程引擎無法適應(yīng)發(fā)起審批駁回修改功審批水杉通過結(jié)束InfoQ

極客傳媒服務(wù)器運營領(lǐng)域工作流業(yè)務(wù)場景復(fù)雜(如:xx

升級流程)公司內(nèi)其他工作流業(yè)務(wù)場景簡單(如:審批流程)開性能與吞吐低低中高高高容災(zāi)自愈能力無無配置復(fù)雜配置復(fù)雜配置復(fù)雜天然支持橫向伸縮能力無無配置復(fù)雜配置復(fù)雜配置復(fù)雜天然支持可觀測性低低低低低天然支持外部依賴DB/MQDB/MQDBDBDB無API友好度BPMNHandler模型

適合單體架構(gòu)BPMNHandler模型

適合單體架構(gòu)DAG(Python)JSON

DSLworker模型,適合微服務(wù)架構(gòu)原生Java/Go代碼

worker模型,適合微服務(wù)架構(gòu)BPMNworker模型,適合微服務(wù)架構(gòu)文檔友好度低高高中低中產(chǎn)品化程度高高高中低高社區(qū)活躍度中高高

低低高工作流引擎調(diào)研主流工作流引擎產(chǎn)品對比發(fā)現(xiàn),zeebe支持高吞吐、低延時和橫向擴容,能較好地適應(yīng)微服務(wù)架構(gòu)場景。它不依賴外部組件、設(shè)計之初就考慮了超大規(guī)模的微服務(wù)編排問題InfoQ極客傳媒zeebeclusterbrokergatewayDistribute

Replicatebrokergatewaybrokerzeebe工作流引擎頂層設(shè)計zeebe

架構(gòu)主要包含4大組件:client,gateway,brokers

以及exportersclients

&job

workersclient

-Java

sdkgrpcclient

-go

sdkInfoQ極客傳媒Data

Lake

&Audit

LogStreaming

Exporterelasticsearch新Zeebe流程引擎StreamProcessor

RocksDBLogStream-Partition-0LogStream-Partition-1-ReplicaLogStream-Partition-0-ReplicaLogStream-Partition-1StreamProcessor

RocksDBBroker-1任務(wù)HandlerJobWorker開機Task吞吐與性能高吞吐:異步隊列模型,削峰,緩解后端存儲計算壓力高性能:無鎖化、內(nèi)存型DB、運行時數(shù)據(jù)歷史數(shù)據(jù)分離容災(zāi)與伸縮分區(qū)(Partition):并行處理能力,橫向伸縮副

本(Replica):容災(zāi)能力,故障自愈API

型pull模式:天然適合微服務(wù)架構(gòu)隊列緩沖:緩解下游系統(tǒng)壓力InfoQ

極客傳媒zeebe工作流核心特性新老引擎頂層架構(gòu)對比任務(wù)Handleribroker/robot(任務(wù)handler)開機Task

關(guān)機Task

修改CMDBTaskPING檢查Task

SSH檢查Task流程引擎1.0HTTP

調(diào)

Activiti流程引擎服務(wù)舊ActivitiDBJobWorker

關(guān)機TaskBroker-0三

、高可用架構(gòu)落地實踐InfoQ極客傳媒01基于單集群的工作流服務(wù)體系建設(shè)InfoQ極客傳媒017:1017:2017:3017:4017:5018:0018:1018:20—received-18

—received-4

—received-5

—received-6一queue-limit-11一queue-limit-12

queue-limit-16-queue-limit-17

-queue-limit-18—

queue

limit-4

—queue-limit-5一queue-limit-6—inflight-11—infight-12—inflight-16—inflight-17—infight-18—inflight-4—inflight-5—inflight-6解決方案:修改算法初始參數(shù),容忍一定范圍延時Command

API

Backpressure2.0K1.5K1.0

K500016:46

16:4816:5016:5216:5416:5616:58—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-21解決方案:使

用SSD

盤wcnt(個/秒)wband(MB/s)

util(%)SSD盤IOPS

12000000000000組建高性能流程引擎集群如何將開源組件落地到生產(chǎn)環(huán)境?

--關(guān)鍵:量化理解組件能力問題2:解決磁盤瓶頸后,吞吐提升,但成功率僅72%分析:默認限流算法(vagas)自適應(yīng)力差,誤殺CommandAPIBackpressure302010問題1:同等配置壓測,僅官方benchmark

的30%分析:Zeebe隊列模型,依賴磁盤性能CBS運營系統(tǒng)

分rcnt

(

/

)

await(毫秒)InfoQ

極客傳媒wcnt

(個/秒)

出wband(MB/s)t口自出

util(%)方案1:通過定時任務(wù)定期匯聚已完成流程實例,運行中流程業(yè)務(wù)自行查最新事件優(yōu)點:實現(xiàn)簡單缺點:(1)部分復(fù)雜度轉(zhuǎn)移給業(yè)務(wù)開發(fā);(2)數(shù)據(jù)延時進一步擴大方案2(采用):實時消費事件,重放成狀態(tài)(EventSourcing),業(yè)務(wù)查詢所見即所得低延時查詢接口、所見即所得的數(shù)據(jù)模型問

:zeebe

采用全新的事件模型(CQRS),

不提供查詢APIzeebe-brokerlogstreamInstanceCreated

InstanceCompletedkafkaexporterkafkaworkflow-exporter問題分析:一個流程運行過程中產(chǎn)生多條不可變的事件zeebe-brokerlogstreamInstanceCreated

InstanceCompletedES

exporter

Elasticsearch優(yōu)點:(1)所見即所得的數(shù)據(jù)模型,開發(fā)無需轉(zhuǎn)換,可直接用于統(tǒng)計分析報表(2)近實時,低時延(100ms)InfoQ

極客傳媒timestampprocess_idinstance_idevent2020/12/3010:00:00ReinstallProcess123456創(chuàng)建中2020/12/3010:00:10ReinstallProcess123456創(chuàng)建完成2020/12/3010:00:11ReinstallProcess123456運行中2020/12/3010:05:00ReinstallProcess123456…2020/12/3010:10:00ReinstallProcess123456完成初衷:只追加寫,無鎖,高性能的關(guān)鍵缺點:(1)開發(fā)理解成本高,統(tǒng)計分析場景下需要自行轉(zhuǎn)換(2)內(nèi)部多次批量寫入buffer,

數(shù)據(jù)延時高(2s)process_idinstance_idstatusstart_timeend_timeReinstallProcess123456運行中/完成2020/12/3010:00:002020/12/3010:10:00運行時數(shù)據(jù)

cache

根據(jù)事件更新狀態(tài)MySQLElasticsearch歷史數(shù)據(jù)-

不變flush創(chuàng)建一個流程實例kafka

高可用流程控制臺

kafkaMySQL:

■對等網(wǎng)絡(luò)集群,無單點瓶頸workflow_meta■數(shù)據(jù)副本機制,分區(qū)失敗自主選主恢復(fù)workflow-exporter工作流數(shù)據(jù)查詢服務(wù)擴展基本能力、封裝工作流服務(wù)結(jié)合業(yè)務(wù)使用場景,擴展新特性(基于實例的父子關(guān)系、基于jobworker的攔截器等),建設(shè)工作流服務(wù)體系zeebe流程引擎高吞吐zeebe-broker■多節(jié)點、多分區(qū)并行執(zhí)行zeebe-kafka-exporter

異步請求處理模型,平滑應(yīng)對流量峰值易用pub-sub

模型,天然適合微服務(wù)編排■流量控制臺,全方位可視化跟蹤流程InfoQ

極客傳媒2

客戶端polljob執(zhí)行業(yè)務(wù)邏輯workflow-api工作流操作API服務(wù)5

exporter服務(wù)對數(shù)據(jù)持久化至DBES

冷數(shù)據(jù)MySQL:workflow_recordworkflow-audit工作流審計服務(wù)workflow-client工作流客戶端任務(wù)、實例狀態(tài)更新詳情寫入kafka3OLAzeebe-gateway熱數(shù)據(jù)上

報3、加載sdk編寫

各任務(wù)邏輯@Component@Slf4jpublicclass

SomeJob

{@EnhancedJobWorker(type="some-service.SomeJob")public

void

handleTask(final

EnhancedJobClient

client,final

ActivatedJob

job){//

業(yè)務(wù)邏輯//..765

05452768559822工作流服務(wù)體系快速接入throw

SomeException("失敗原因");}}//

根據(jù)業(yè)務(wù)邏輯執(zhí)行情況,結(jié)單

if(success){pleteJob(job);

}else

{4、通過控制臺或

api創(chuàng)建流程實例5、通過控制臺跟

蹤實例,處理異常1、根據(jù)業(yè)務(wù)邏輯

繪制流程圖2、通過控制臺發(fā)

布流程圖至引擎InfoQ

極客傳媒service-tpc-job.Pxelship-service-netplate-job.InnerWireCheckxship-service-system-installjob.StartEnterPxeProcessxship-service-tpc-job.PxeStatus11619287058476032.xship-service-system-installjob.lnitTask

SystemlnstallP

02任務(wù)的原子實現(xiàn)161

7058476660.1619211619287058476037..ystem02從單集群演進到多集群,架構(gòu)彈性可伸縮InfoQ極客傳媒1、現(xiàn)網(wǎng)問題-任務(wù)未調(diào)度結(jié)束時間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)已完成已完成已完成已完成已失敗已完成已完成2、問題分析-任務(wù)激活鏈路梳理client向

Zeebe

Gateway請

程JobType:A

JobType:BJobType:XJobTypeSet集合分析1、每個JobType將ActiveJob方法包裝成任務(wù)Task,

交由定時線程池定時執(zhí)行。ScheduledThreadPool任務(wù)名稱

錯誤信息結(jié)束通知[內(nèi)置]上報結(jié)束狀態(tài)固件采集版本與目標(biāo)版…啟動時間2022-05-3019:20:022022-05-3019:20:022022-05-3019:20:01任務(wù)未被引擎調(diào)度,終止任務(wù),觸發(fā)自動重試22-05-3019:18:04任務(wù)未被引擎調(diào)度,終止任務(wù),

.目2022-05-3019:15:032022-05-3019:15:012022-05-3019:14:122、定時線程池中Thread,

一旦空閑便去poll

jobAsaZeebebroker,makeactivatedjobsre-activatablewhichwere

notsendtothegateway#8917·GatewayStub3、調(diào)用存根的接口,與服務(wù)端建立Channel進行通信activateJobsromansmirnov

commented

onMar

15,2022·editedomansmirnovDescription:解決zeebecient.requestimeout4、Gpc

存根通過Channel與Gateway

保持連接When

thebrokeractivates

jobsandbeforesendingthembacktothegateway,thegatewaypotentiallycouldcloseitsconnection

(e.g,the

request

timed

out,network

interruption,gateway

died,etc).Asa

result,thejobsbeing

marked

as

activated

remain

to

be

activated,andtherebycannotbepicked

upagain

untilthe

specifiedjobtimeout.Inthe

case

of

having

highjobtimeouts,thismight

result

in

high

latency

between

the

timeajob

is

createdand

completed.Potential

Solution:Wheneverthebrokercannotsendbacktheactivatedjobsto

thegateway,the

activatedjobs

are

made

re-activatable

by

submiting

afail

command:□Get

notified

if

responding

with

the

activated

jobsto

the

gateway

was

successful

or

not□

Ifthesendingresponsefailed,makethejobsre-activatable

bysubmitting

a

failjob

commandLabelscomponent/gatewayscope/brokerscope/gatewayProjectsNoneyetMilestoneNo

milestoneZeebeGateway6、執(zhí)行業(yè)務(wù)邏輯Thread-15、當(dāng)監(jiān)聽到Channel有任務(wù)需要執(zhí)行時,返回Job

給定時

線程池去執(zhí)行多集群架構(gòu)演進背景3、官方技術(shù)交流,推動解決→版本升級1、線程池任務(wù)堆積,任務(wù)拉到后遲遲不處理2、broker激活job至activate后,因集群網(wǎng)絡(luò)或超時

等問題未能通知到gateway,

進而無法同步至clientInfoQ

極客傳媒主機固件信息采集主機固件信息采集獲取pxe狀態(tài)主機帶外可用性檢查Oclosed民2tasksromansminovopenedthisisueon

Mar

15,2022

2commentszeebegateway.cluster.requestimeoutZeebe

Gateway響應(yīng)過程可能導(dǎo)致未調(diào)度Zeebe

GatewayayedWorkQue

ueZeebe

BrokerMember)

…gneesIntermediateThefollowingsectionsexplainwhichadjustments

must

be

madeto

migrate

from

Camunda

Cloud

0.26.x

to

1.0.0for

each

component

ofthe

system.A

CAUTIONBe

aware

that

the

majorversion

updatefrom

0.26

to

1.0

is

not

backwards

compatible.Therefore,data

cannot

be

migratedfrom

0.26to

1.0andclient

applications

must

be

adjustedto

the

new

API

versions.JobWorker

1執(zhí)行任務(wù)的容器JobPoller任務(wù)輪詢器JobHandler業(yè)務(wù)邏輯單元JobWorker2執(zhí)行任務(wù)的容器JobPoller任務(wù)輪詢器JobHandler業(yè)務(wù)邏輯單元JobWorker

n執(zhí)行任務(wù)的容器JobPoller任務(wù)輪詢器JobHandler業(yè)務(wù)邏輯單元1、不同微服務(wù)不可能同一時間點升級完畢zeebe引擎2、無法保證每個微服務(wù)在升級新版本的時候,

老版本中的實例全部已結(jié)束了版本升級面臨問題1、大版本未向下兼容:zeebe引擎1.x版本未向下兼容0.x

版本,非簡單原地升級版本2、原生zeebeclient限制:不同業(yè)務(wù)微服務(wù)通過sdk僅能連接一個工作流引擎集群保持不變封裝了zeebe

client

sdk,代碼需升級兼容僅升級版本問題1、數(shù)據(jù)存儲如何兼容數(shù)據(jù)格式變化2、與zeebe引擎的交互協(xié)議如何兼容新舊業(yè)務(wù)微服務(wù)1業(yè)務(wù)微服務(wù)2業(yè)務(wù)微服務(wù)nInfoQ

極客傳媒gatewayStub與Zeebe

集群gRpc

信ExecutorService輪詢?nèi)蝿?wù)和執(zhí)行的線程池問題ZeebeClient解決思路核心原則:升級過程中,需保證“老集群中存量運行中的實例”能正常走完余下流程,同時不影響新創(chuàng)建實例解決思路

多集群架構(gòu)設(shè)計,支持業(yè)務(wù)無縫升級InfoQ

極客傳媒摒棄當(dāng)前的單點架構(gòu)設(shè)計,設(shè)計多活模式。支持同一時間點,同一個業(yè)務(wù)微服務(wù)可同時與新舊兩個zeebe

引擎交互工作A服務(wù)升級,任務(wù)B正在執(zhí)4

、A

、B服務(wù)完成升級,此時5

、ABC服務(wù)完成升級,實例6、實例X

仍卡住,7、實例Y

發(fā)布至新zeebe中

待中

,B、C

服務(wù)準(zhǔn)備升級

老zeebe中實例X

卡在B任務(wù)X

仍卡在老zeebe中B步驟實例Y創(chuàng)建運行,實例X仍卡單serviceAservice

Bservice

CserviceA

service

B

service

Czeebe

1.3.7service

A

service

B

service

C

service

A

service

B

service

CserviceAserviceB

service

C

service

Aservice

BserviceCservice

AserviceBserviceCserviceAservice

Bservice

C創(chuàng)建實例X實例X:8、實例Y執(zhí)行完畢,實例X

永遠無法結(jié)束流程2、實例x在老zeebe中執(zhí)行

完A

任務(wù),B、C待執(zhí)行zeebe

0.26.0zeebe0.26.0zeebe0.26.01、升級前創(chuàng)建了實例X推導(dǎo)zeebe0.26.0zeebe0.26.0zeebe0.26.0zeebe0.26.0zeebe0.26.0zeebe

1.3.7zeebe

1.3.7zeebe

1.3.7zeebe

1.3.7zeebe

1.3.7創(chuàng)建實例Y:3、

行多集群實現(xiàn)難點zeebe

sdk重耦合引擎,交互操作只能—對—workflow-api服務(wù)思路completeJob/failJob重點問題攻克:集群解耦&流量精準(zhǔn)路由polljob/completeJob

/failJob業(yè)務(wù)微服務(wù)人工運維新的問題1、業(yè)務(wù)侵入大,難維護2

、api

服務(wù)請求轉(zhuǎn)發(fā)無法區(qū)分目標(biāo)集群zeebe

集群-0.26.0zeebe

broker-1

zeebebroker-18zeebegateway-1zeebe集群-1.3.7zeebe

broker-1

zeebebroker-18zeebegateway-1L4負載均衡polljob/completeJob/failJobworkflow-cleint(1.3.7)L4負載均衡poll

job/completeJob/failJobInfoQ

極客傳媒zeebe

client加載多個sdkworkflow-cleint(0.26.0)待升級集群多集群架構(gòu)重點問題攻克1-業(yè)務(wù)解耦zeebe

集群在業(yè)務(wù)與zeebe

集群之間引入proxy,

理client與zeebe

的job交互行為①

pollactivate

req

jobTypegrpc2activate

resp

jobsgrpc3completeJob/failJobgrpcjob

拉取→行為簡單且高頻→保持grpc不變job

操作→

行為復(fù)雜,相對低頻→

改用httpactivated

completed/failedtimeline!created

activated

completed/failedptoxyJobHandlerThreadPoolExecutorJobHandlerJobHandler

ThreadPoolExecutorJobHandler

山created

broker70InfoQ

極客傳媒1

pollactivate

req

jobTypegrpcgrpchttp->timelinei

client集群2createdbroker

-JobWorkerJobPoller集群1createdbroker

---3completeJob

/failJobJobWorkerJobPolleractivate

resp

jobsactivated

completed/failedactivated

completed/failed改造->timelineitimelineclientZeebeActivateJobs/completeJob/failJob..(gRPC)ZeebeZeebecompleteJob/failJob...(gRPC)BrokerBrokerBrokerZeebeZeebeZeebeBroker問題BrokerBrokercompleteJob

等請求如何

精準(zhǔn)路由到目標(biāo)集群?message

CompleteJobRequest{int64

jobKey=1;//aJSONdocumentrepresentistring

variables

=2;多集群架構(gòu)重點問題攻克2-流量精準(zhǔn)路由建設(shè)poll

service,遍歷后端所有集群應(yīng)對activateJob請求completeJob/failJob.(HTTP)completeJob/failJob..(gRPC)poller-servicejobTypeBActivateJobs(gRPC)ActivateJobs/completeJob/failJob..(gRPC)Zeebe

Broker

Zeebe

Broker工作流微服務(wù)ActivateJobs(gRPC)jobTypeA新增ActivateJob轉(zhuǎn)發(fā)服務(wù)轉(zhuǎn)發(fā)至多個Zeebe

Zeebe

Gateway//the

unique

job

identifier,InfoQ

極客傳媒Exporter

Serviceworkflow-exporter

workflow-exportercompleteJob/failJob.(HTTP)控制臺API

Serviceworkflow-api

workflow-api

Zeebe

GatewayZeebe

GatewayActivateJobs(gRPC)

Zeebe

Gateway唯

—ID標(biāo)

識poller-service思路KafkaID沖突實例id、任務(wù)id是唯一標(biāo)識一個任務(wù)或者實例的key,由zeebe引擎自增生成,多集群情況下,存在ID沖突zeebecluster-0zeebe

cluster-1示例任務(wù)ID:45035998623595936,

二進制展開(64位):<前13位為分區(qū)>0000000010100000000000000000000010001100000100000111110110100000后51位唯一標(biāo)識同一個區(qū)內(nèi)zeebe事件的id64位標(biāo)識唯—IDID解析:分區(qū)ID-20,增長步長-2349890976思路修改ID解析邏輯,保證不同集群的實例/任務(wù)ID不重復(fù)③返回實例ID:100866

createInstanceworkflow-api服務(wù)

分析InfoQ

極客傳媒實例10086是系統(tǒng)重裝流程還是固件升級流程?4返回實例ID:100868返回實例ID:100862

createlnstance7返回實例ID:10086系統(tǒng)重裝流程固件升級流程創(chuàng)建流程實例創(chuàng)建流程實例ID沖突問題解決修改zeebe原生ID

編碼規(guī)則,新增clusterlD解析邏輯實例ID:6755409618664841實例二進制:

0000000000011000000000000000001001011110101000011111110110001001中間8位為分區(qū)數(shù)

后51位為自增長數(shù)前5位調(diào)整為集群id在api服務(wù)中,解析請求體中的實例/任務(wù)id獲取集群id,對該請求精確轉(zhuǎn)發(fā)至對應(yīng)的集群Zeebe集群A創(chuàng)建在Zeebe集群A的實例InfoQ

極客傳媒重裝流程實例:6755409618664840安全校驗PXE安裝任務(wù)id:6755409618664841完成任務(wù)

應(yīng)轉(zhuǎn)發(fā)至集群A6755409618664841workflow-apiData-重裝流程6755409618664840Zeebe集群B運維:完成任務(wù)服務(wù)器運營前5位:00001

clusterId=1—→前13位:0000100000010后8位:00000010—→parationId=2按新解析協(xié)議得到此job對應(yīng)的位置:1號集群,2號分區(qū)proxyClusterId=0zeebegateway-1broker-0par0-rep0-Lparl-rep1-Fpar2-rep2-Fpar3-rep0-Lpar4-rep1-Fpar5-rep2-Fpar6-rep0-Lpar7-rep2-Fpar8-rep0-F任務(wù)ID:9007200632084704<前13位分區(qū)

→0000000000011000000000000000000001010010000110001001100011100000

——

—后51位表示分區(qū)內(nèi)自增ID—

→第3號分區(qū)前broker-2par0-rep2-Fpar1-rep0-Fpar2-rep1-Lpar3-rep2-F■■■■■流量路由前后對比broker-0par0-rep0-Lpar1-rep1-Fpar2-rep2-par3-rep0-Lbroker-1par0-rep1-Fparl-rep2-Lpar2-rep0-Fpar3-rep1-Fbroker-1par0-rep1-Fpar1-rep2-Lpar2-rep0-Fpar3-repl-Fpar4-rep2-Lpar5-rep0-Fpar6-repl-Fpar7-rep0-Lpar8-rep1-Fbroker-1parO-rep1-Fparl-rep2-Lpar2-rep0-Fpar3-rep1-Fpar4-rep2-Lpar5-rep0-Fpar6-rep1-Fpar7-rep0-Lpar8-rep1-Fbroker-2par0-rep2-Fpar1-rep0-Fpar2-rep1-Lpar3-rep2-Fpar4-rep0-Fpar5-repl-Lpar6-rep2-Fpar7-rep1-Fpar8-rep2-Lbroker-0par0-rep0-Lpar1-rep1-Fpar2-rep2-Fpar3-rep0-Lpar4-repl-Fpar5-rep2-Fpar6-rep0-Lpar7-rep2-Fpar8-rep0-Fbroker-2par0-rep2-Fpar1-rep0-Fpar2-rep1-Lpar3-rep2-Fpar4-rep0-Fpar5-rep1-Lpar6-rep2-Fpar7-repl-Fpar8-rep2-LInfoQ

極客傳媒新的ID解析規(guī)則jobid:580964361937103210后zeebegatewayClusterId=1zeebegateway-2■■■■■■■■多集群彈性可伸縮架構(gòu)落地zeebecluster-1zeebecluster-2工作流操作工作流查詢業(yè)務(wù)運維zeebe

brokerzeebe

broker彈性可伸縮zeebe

brokerzeebe

brokerzeebe

brokerzeebe

brokerzeebe

brokerzeebe

broker服務(wù)代理層pollerserviceapiservice實時數(shù)據(jù)

(mysql)歸檔數(shù)據(jù)

(ES)極客傳媒業(yè)務(wù)微服務(wù)serviceGjobtype-Ajobtype-B

service

jobtype-CGobtype-Dzeebe

gatewayzeebegatewayzeebe

gatewayzeebe

gatewayexporterserviceInfoQgpcgncgrpcgrpcgrpcgrpehttpkafka03秒級自動容災(zāi),提升整體高可用InfoQ極客傳媒全鏈路異地容災(zāi)如果工作流服務(wù)體系沒有完善的全鏈路容災(zāi)機制,海量服務(wù)器運營在故障時很可能會進入災(zāi)難性的死循環(huán)可用區(qū)C

zeebe引擎集群常規(guī)服務(wù)器運營流程任務(wù)調(diào)度執(zhí)行帶內(nèi)、帶外通道

州XX

區(qū)異地雙活部署激活任務(wù)的Grpc

輪詢請求微服務(wù)JobType-故障流程微服務(wù)JobType-固件升級微服務(wù)JobType-系統(tǒng)重裝微服務(wù)JobType-診斷流程ZeebeGatewayGatewayGatewayGateway上海XX區(qū)ZeebeGateway

GatewayGatewayGatewayZeebe

BrokerBrokerBrokerBrokerBrokerZeebe

BrokerBrokerBrokerBrokerBroker可用區(qū)C嘗試遠程快速重

啟恢復(fù)服務(wù)器服務(wù)器運營異地雙活部署CLB-0CLB-1創(chuàng)建流程實例可用區(qū)A

可用區(qū)B可用區(qū)C

zeebe

引擎集群異地雙活部署workflow-pollerworkflow-poller異地雙活部署workflow-apiworkflow-api得益于多集群架構(gòu)落地,實現(xiàn)全鏈路異地雙活部署在兩個可用區(qū)均發(fā)

起輪詢拉取任務(wù)在兩個可用區(qū)輪流

創(chuàng)建流程實例InfoQ

極客傳媒可用區(qū)A可用區(qū)B可用區(qū)C全鏈路容災(zāi)愈故風(fēng)用可帶內(nèi)、帶外通道3、請求cluster-0集群,鏈接

異常斷開4、故障集群失敗數(shù)+1,命中剔除

策略后將從可用列表中剔除請求失敗數(shù)處理器請求失敗記錄雙熱集群秒級自愈,工作流服務(wù)實現(xiàn)業(yè)務(wù)零感知高可用1、業(yè)務(wù)調(diào)接口創(chuàng)建流程實例微服務(wù)JobType-故障流程微服務(wù)JobType-固件升級微服務(wù)JobType-系統(tǒng)重裝微服務(wù)JobType-診斷流程廣州XX區(qū)異常不可用雙熱集群部署模式,集群故障時,秒級自動切換,業(yè)務(wù)零感知廣州XX

區(qū)cluster-16、轉(zhuǎn)發(fā)至上海可用的集群定時計算更新ZeebeGatewayGatewayGatewayGatewayZeebe

BrokerBrokerBrokerBrokerBroker異地雙活部署workflow-api集群負載均衡器2、實時計算可用集群clueter-0可用集群列表cluster-0

5、本地計數(shù)器重新計算出可用集群cluster-1cluster-1Zeebe

BrokerBrokerBrokerBrokerBrokerInfoQ

極客傳媒ZeebeGatewayGatewayGateway

Gateway集群名稱cluster-0cluster-1請求失敗數(shù)+100本地計數(shù)器cluster-0上海XX區(qū)四、落地場景與取得效果InfoQ極客傳媒已完成●運行中●已取消●已失敗常態(tài)日處理任務(wù)量100W+ArchSummit

InfoQ

極客傳媒峰值10W+QPS,支撐服務(wù)器數(shù)億級自動化作業(yè)騰訊內(nèi)部集群規(guī)模最大的工作流服務(wù),應(yīng)用于海量服務(wù)器數(shù)億級自動化作業(yè)場景支撐流程類型數(shù)

支撐作業(yè)類型

已完成流程實例量

已完成服務(wù)器作業(yè)量數(shù)百

數(shù)干

數(shù)干萬

數(shù)億CompleteJob

Latency(gRPC)+Inf10seconds5seconds2seconds1

second500

milliseconds250

milliseconds100

milliseconds75

milliseconds50

milliseconds10

milliseconds5

milliseconds1

millisecond0seconds15:15Create

Process

Instance

Latency

(gRPC)10

seconds5

seconds2

seconds1

second500

milliseconds250

milliseconds100

milliseconds75milliseconds50

milliseconds10

milliseconds5

milliseconds1millisecond0

seconds毫秒級任務(wù)調(diào)度,滿足業(yè)務(wù)SLAInfoQ

極客傳媒多層級流程實例嵌套,流程靈活可復(fù)用服務(wù)器運營流程存在多層嵌套金字塔關(guān)系,對于這類多層嵌套的復(fù)雜流程,流程引擎建設(shè)基于實例維度的父子關(guān)系,提供了無層級上限限制的多層嵌套流程調(diào)度能力編輯流程變量狀態(tài)已完成已完成已完成已完成子實例信息開始時間2024-06-0100:

47:302024-06-0100:

16:022024-05-3121:

42:032024-05-3121:

30:14流程變量流程實例ID1175439504739059297176090745488496215317699146541393946351188950303682619163結(jié)束時間2024-06-0223:

53:532024-06-0100:

47:272024-05-3121:

50:182024-05-3121:

40:02InfoQ

極客傳媒流程實例信息流程編碼C-

~~DoastProcessSy.OcessFwUProcess+allPrin子流程Ne

`SS全鏈路可視化控制臺,提升開發(fā)運維效率在服務(wù)器運營流程中,因硬件、機房環(huán)境等問題會導(dǎo)致流程無法自動完成,需要人工介入處理,為支持流程中的人工干預(yù),提供服務(wù)器全鏈路可視化控制臺,提供

溫馨提示

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

評論

0/150

提交評論