




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
弹性可伸缩海量工作流
引擎建设实践腾讯架构师/叶彬InfoQ极客传媒极客邦科技2024年会议规划促进软件开发及相关领域知识与创新的传播4月
5月
6月
8月
8月
10月
12月FCon
上海全球金融科技大会暨智能软件开发生态展会议时间:8月16-17日AiCon
北京全球人工智能开发与应用大会
暨大模型应用生态展会议时间:已结束QCon
上海全球软件开发大会暨智能软件开发生态展会议时间:10月18-19日QCon
北京全球软件开发大会暨智能软件开发生态展会议时间:已结束AiCon
上海全球人工智能开发与应用大会
暨大模型应用生态展会议时间:8月18-19日ArchSummit深圳全球架构师峰会暨智能软件开发生态展会议时间:6月14-15日ArchSummit
北京全球架构师峰会暨智能软件开发生态展会议时间:12月20-21日目录·背景·工作流引擎技术选型
·高可用架构落地实践
·落地场景与取得效果
·下一步计划与思考InfoQ极客传媒InfoQ
极客传媒zB示什么是工作流即工作流程的计算模型,为完成一个业务目标,所需要经历的一系列步骤,通常用流程图来表示
(业界通常用BPMN流程图来描述一个工作流)示例:服务器硬件故障自动诊断流程,日志下载→规则库加载→策略匹配日志下载规则加载规则匹配开始InfoQ极客传媒结束非工作流模式下系统实现非工作流模式下,原始需求:日志下载→规则库加载→规则匹配classRulesLoadTask{void
handle(){doRulesLoad();rulesMatchTask.handle();}classLogsLoadTask
{void
handle(){doLogsLoad();rulesLoadTask.handle();-}classRulesMatchTask{void
handle(){doRulesMatch();}新增需求:1)指定机型派单人工分析;2)命中指定规则派单至厂商分析InfoQ极客传媒非工作流模式下的问题耦合高、调整难、复用低
class
ManualAnalyTask{
class
SupplyDiagnoseTask
{voidhandle(){
voidhandle(){class
LogsLoadTask{voidhandle(){doLogsLoad();if(isSpecialServer){manualAnalyTask.handle()lelse{rulesLoadTask.handle();}}}新加业务场景,要改已有的代码。
→这不符合开闭原则!InfoQ极客传媒class
RulesLoadTask{voidhandle(){doRulesLoad();rulesMatchTask.handle();
一}}class
RulesMatchTask{void
handle(){doRulesMatch();if(isSpecialRule){supplyDiagnoseTask.handle();doManualAnalysis();}doSupplierDiagnose();新增逻辑块2新增逻辑块1」}云么
T女
FU使用工作流模式的任务协作-分离任务实现和任务协作关系日志下载
规则加载
规则匹配开始
结束classRulesLoadTask{void
handle(){doRulesLoad();rulesMatchTask.handle();}}classLogsLoadTask{void
handle(){doLogsLoad();rulesLoadTask.handle();}classRulesMatchTask{void
handle(){doRulesMatch();」}使用工作流模式,各任务只实现自身原子逻辑,协同关系使用流程图表示InfoQ
极客传媒为什么需要工作流当新的逻辑需要复用已有任务节点时,只需调整流程图,无需修改已有代码class
ManualAnalysisTask{void
handle(){doManualAnalysis();}BPMN
流程图人工分析
供应商诊断classSupplierAnalysisTask{void
handle(){doSupplierAnalysis();}日志下载开始class
RulesMatchTask{void
handle(){doRulesMatch();}class
RulesLoadTask{void
handle(){
doRulesLoad();}class
LogsLoadTask{void
handle(){
doLogsLoad();}InfoQ
极客传媒规则加载
规则匹配是指定机型?是指定规则?结束否否所有涉及业务流转按流程完成的场景都可通过工作流引擎作为支撑InfoQ极客传媒什么是工作流引擎将任务实现与任务协作关系分离之后,就诞生了专门维护任务协作关系的程序-工作流引擎主要功能◆解释任务定义◆控制状态流转◆维护内部状态◆监控/管理工作流执行工作流引擎任务1:已完成
任务2:进行中微服务1(任务1逻辑)业务逻辑微服务2
(任务2逻辑)工作流引擎与微服务编排微服务架构的核心是把复杂的业务系统拆分成高内聚的微服务,每个服务负责相对独立的逻辑。要实现业务价
值,不是看单个服务的能力,而是要协调所有服务保证端到端业务流的成功微服务编排是指将多个微服务组合成一个完整的业务流程或服务的过程,该模式下会有一个中控引擎:◆按业务逻辑的蓝图,编排各微服务的调用关系中控引擎◆监控整个业务流的状态◆提供机制处理单个服务的失败,保证整个业务流的成功服务C业务逻辑容器3InfoQ极客传媒服务B业务逻辑容器2工作流引擎很适合作为中控引擎,来编排调度微服务服务A业务逻辑容器1当前状态
下一状态时钟状态更新逻辑第四阶段:云原生流程引擎阶段第二阶段:状态机流转阶段万级服务器、状态机流转、沉淀脚本工具状态机输入腾讯服务器运营历程-第三阶段:单体流程引擎阶段十万级服务器、单体流程引擎、可调度原子操作第一阶段:人力运维阶段InfoQ
极客传媒百万级服务器、分布式流程引擎、毫秒级任务调度于级服务器、无引擎、人工驻场状态机输出组合逻辑二
、工作流引擎技术选型InfoQ极客传媒服务器运营领域场景需求提到“流程引擎”,联想到的都是缓慢、低吞吐的使用场景,比如人工审批任务等,但服务器运营领域的大部分是程序化自动任务,吞吐高,任务流转快,传统流程引擎无法适应发起审批驳回修改功审批水杉通过结束InfoQ
极客传媒服务器运营领域工作流业务场景复杂(如:xx
升级流程)公司内其他工作流业务场景简单(如:审批流程)开性能与吞吐低低中高高高容灾自愈能力无无配置复杂配置复杂配置复杂天然支持横向伸缩能力无无配置复杂配置复杂配置复杂天然支持可观测性低低低低低天然支持外部依赖DB/MQDB/MQDBDBDB无API友好度BPMNHandler模型
适合单体架构BPMNHandler模型
适合单体架构DAG(Python)JSON
DSLworker模型,适合微服务架构原生Java/Go代码
worker模型,适合微服务架构BPMNworker模型,适合微服务架构文档友好度低高高中低中产品化程度高高高中低高社区活跃度中高高
低低高工作流引擎调研主流工作流引擎产品对比发现,zeebe支持高吞吐、低延时和横向扩容,能较好地适应微服务架构场景。它不依赖外部组件、设计之初就考虑了超大规模的微服务编排问题InfoQ极客传媒zeebeclusterbrokergatewayDistribute
Replicatebrokergatewaybrokerzeebe工作流引擎顶层设计zeebe
架构主要包含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任务HandlerJobWorker开机Task吞吐与性能高吞吐:异步队列模型,削峰,缓解后端存储计算压力高性能:无锁化、内存型DB、运行时数据历史数据分离容灾与伸缩分区(Partition):并行处理能力,横向伸缩副
本(Replica):容灾能力,故障自愈API
模
型pull模式:天然适合微服务架构队列缓冲:缓解下游系统压力InfoQ
极客传媒zeebe工作流核心特性新老引擎顶层架构对比任务Handleribroker/robot(任务handler)开机Task
关机Task
修改CMDBTaskPING检查Task
SSH检查Task流程引擎1.0HTTP
调
用
Activiti流程引擎服务旧ActivitiDBJobWorker
关机TaskBroker-0三
、高可用架构落地实践InfoQ极客传媒01基于单集群的工作流服务体系建设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解决方案:修改算法初始参数,容忍一定范围延时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组建高性能流程引擎集群如何将开源组件落地到生产环境?
--关键:量化理解组件能力问题2:解决磁盘瓶颈后,吞吐提升,但成功率仅72%分析:默认限流算法(vagas)自适应力差,误杀CommandAPIBackpressure302010问题1:同等配置压测,仅官方benchmark
的30%分析:Zeebe队列模型,依赖磁盘性能CBS运营系统
分rcnt
(
个
/
秒
)
await(毫秒)InfoQ
极客传媒wcnt
(个/秒)
口
目
出wband(MB/s)t口自出
util(%)方案1:通过定时任务定期汇聚已完成流程实例,运行中流程业务自行查最新事件优点:实现简单缺点:(1)部分复杂度转移给业务开发;(2)数据延时进一步扩大方案2(采用):实时消费事件,重放成状态(EventSourcing),业务查询所见即所得低延时查询接口、所见即所得的数据模型问
题
:zeebe
采用全新的事件模型(CQRS),
不提供查询APIzeebe-brokerlogstreamInstanceCreated
InstanceCompletedkafkaexporterkafkaworkflow-exporter问题分析:一个流程运行过程中产生多条不可变的事件zeebe-brokerlogstreamInstanceCreated
InstanceCompletedES
exporter
Elasticsearch优点:(1)所见即所得的数据模型,开发无需转换,可直接用于统计分析报表(2)近实时,低时延(100ms)InfoQ
极客传媒timestampprocess_idinstance_idevent2020/12/3010:00:00ReinstallProcess123456创建中2020/12/3010:00:10ReinstallProcess123456创建完成2020/12/3010:00:11ReinstallProcess123456运行中2020/12/3010:05:00ReinstallProcess123456…2020/12/3010:10:00ReinstallProcess123456完成初衷:只追加写,无锁,高性能的关键缺点:(1)开发理解成本高,统计分析场景下需要自行转换(2)内部多次批量写入buffer,
数据延时高(2s)process_idinstance_idstatusstart_timeend_timeReinstallProcess123456运行中/完成2020/12/3010:00:002020/12/3010:10:00运行时数据
cache
根据事件更新状态MySQLElasticsearch历史数据-
不变flush创建一个流程实例kafka
高可用流程控制台
kafkaMySQL:
■对等网络集群,无单点瓶颈workflow_meta■数据副本机制,分区失败自主选主恢复workflow-exporter工作流数据查询服务扩展基本能力、封装工作流服务结合业务使用场景,扩展新特性(基于实例的父子关系、基于jobworker的拦截器等),建设工作流服务体系zeebe流程引擎高吞吐zeebe-broker■多节点、多分区并行执行zeebe-kafka-exporter
异步请求处理模型,平滑应对流量峰值易用pub-sub
模型,天然适合微服务编排■流量控制台,全方位可视化跟踪流程InfoQ
极客传媒2
客户端polljob执行业务逻辑workflow-api工作流操作API服务5
exporter服务对数据持久化至DBES
冷数据MySQL:workflow_recordworkflow-audit工作流审计服务workflow-client工作流客户端任务、实例状态更新详情写入kafka3OLAzeebe-gateway热数据上
报3、加载sdk编写
各任务逻辑@Component@Slf4jpublicclass
SomeJob
{@EnhancedJobWorker(type="some-service.SomeJob")public
void
handleTask(final
EnhancedJobClient
client,final
ActivatedJob
job){//
业务逻辑//..765
05452768559822工作流服务体系快速接入throw
SomeException("失败原因");}}//
根据业务逻辑执行情况,结单
if(success){pleteJob(job);
}else
{4、通过控制台或
api创建流程实例5、通过控制台跟
踪实例,处理异常1、根据业务逻辑
绘制流程图2、通过控制台发
布流程图至引擎InfoQ
极客传媒service-tpc-job.Pxelship-service-netplate-job.InnerWireCheckxship-service-system-installjob.StartEnterPxeProcessxship-service-tpc-job.PxeStatus11619287058476032.xship-service-system-installjob.lnitTask
始
SystemlnstallP
02任务的原子实现161
7058476660.1619211619287058476037..ystem02从单集群演进到多集群,架构弹性可伸缩InfoQ极客传媒1、现网问题-任务未调度结束时间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状态已完成已完成已完成已完成已失败已完成已完成2、问题分析-任务激活链路梳理client向
Zeebe
Gateway请
求
过
程JobType:A
JobType:BJobType:XJobTypeSet集合分析1、每个JobType将ActiveJob方法包装成任务Task,
交由定时线程池定时执行。ScheduledThreadPool任务名称
错误信息结束通知[内置]上报结束状态固件采集版本与目标版…启动时间2022-05-3019:20:022022-05-3019:20:022022-05-3019:20:01任务未被引擎调度,终止任务,触发自动重试22-05-3019:18:04任务未被引擎调度,终止任务,
.目2022-05-3019:15:032022-05-3019:15:012022-05-3019:14:122、定时线程池中Thread,
一旦空闲便去poll
jobAsaZeebebroker,makeactivatedjobsre-activatablewhichwere
notsendtothegateway#8917·GatewayStub3、调用存根的接口,与服务端建立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、执行业务逻辑Thread-15、当监听到Channel有任务需要执行时,返回Job
给定时
线程池去执行多集群架构演进背景3、官方技术交流,推动解决→版本升级1、线程池任务堆积,任务拉到后迟迟不处理2、broker激活job至activate后,因集群网络或超时
等问题未能通知到gateway,
进而无法同步至clientInfoQ
极客传媒主机固件信息采集主机固件信息采集获取pxe状态主机带外可用性检查Oclosed民2tasksromansminovopenedthisisueon
Mar
15,2022
2commentszeebegateway.cluster.requestimeoutZeebe
Gateway响应过程可能导致未调度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执行任务的容器JobPoller任务轮询器JobHandler业务逻辑单元JobWorker2执行任务的容器JobPoller任务轮询器JobHandler业务逻辑单元JobWorker
n执行任务的容器JobPoller任务轮询器JobHandler业务逻辑单元1、不同微服务不可能同一时间点升级完毕zeebe引擎2、无法保证每个微服务在升级新版本的时候,
老版本中的实例全部已结束了版本升级面临问题1、大版本未向下兼容:zeebe引擎1.x版本未向下兼容0.x
版本,非简单原地升级版本2、原生zeebeclient限制:不同业务微服务通过sdk仅能连接一个工作流引擎集群保持不变封装了zeebe
client
sdk,代码需升级兼容仅升级版本问题1、数据存储如何兼容数据格式变化2、与zeebe引擎的交互协议如何兼容新旧业务微服务1业务微服务2业务微服务nInfoQ
极客传媒gatewayStub与Zeebe
集群gRpc
通
信ExecutorService轮询任务和执行的线程池问题ZeebeClient解决思路核心原则:升级过程中,需保证“老集群中存量运行中的实例”能正常走完余下流程,同时不影响新创建实例解决思路
多集群架构设计,支持业务无缝升级InfoQ
极客传媒摒弃当前的单点架构设计,设计多活模式。支持同一时间点,同一个业务微服务可同时与新旧两个zeebe
引擎交互工作A服务升级,任务B正在执4
、A
、B服务完成升级,此时5
、ABC服务完成升级,实例6、实例X
仍卡住,7、实例Y
发布至新zeebe中
待中
,B、C
服务准备升级
老zeebe中实例X
卡在B任务X
仍卡在老zeebe中B步骤实例Y创建运行,实例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创建实例X实例X:8、实例Y执行完毕,实例X
将
永远无法结束流程2、实例x在老zeebe中执行
完A
任务,B、C待执行zeebe
0.26.0zeebe0.26.0zeebe0.26.01、升级前创建了实例X推导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创建实例Y:3、
行多集群实现难点zeebe
sdk重耦合引擎,交互操作只能—对—workflow-api服务思路completeJob/failJob重点问题攻克:集群解耦&流量精准路由polljob/completeJob
/failJob业务微服务人工运维新的问题1、业务侵入大,难维护2
、api
服务请求转发无法区分目标集群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)待升级集群多集群架构重点问题攻克1-业务解耦zeebe
集群在业务与zeebe
集群之间引入proxy,
代
理client与zeebe
的job交互行为①
pollactivate
req
jobTypegrpc2activate
resp
jobsgrpc3completeJob/failJobgrpcjob
拉取→行为简单且高频→保持grpc不变job
操作→
行为复杂,相对低频→
改用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
等请求如何
精准路由到目标集群?message
CompleteJobRequest{int64
jobKey=1;//aJSONdocumentrepresentistring
variables
=2;多集群架构重点问题攻克2-流量精准路由建设poll
service,遍历后端所有集群应对activateJob请求completeJob/failJob.(HTTP)completeJob/failJob..(gRPC)poller-servicejobTypeBActivateJobs(gRPC)ActivateJobs/completeJob/failJob..(gRPC)Zeebe
Broker
Zeebe
Broker工作流微服务ActivateJobs(gRPC)jobTypeA新增ActivateJob转发服务转发至多个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标
识poller-service思路KafkaID冲突实例id、任务id是唯一标识一个任务或者实例的key,由zeebe引擎自增生成,多集群情况下,存在ID冲突zeebecluster-0zeebe
cluster-1示例任务ID:45035998623595936,
二进制展开(64位):<前13位为分区>0000000010100000000000000000000010001100000100000111110110100000后51位唯一标识同一个区内zeebe事件的id64位标识唯—IDID解析:分区ID-20,增长步长-2349890976思路修改ID解析逻辑,保证不同集群的实例/任务ID不重复③返回实例ID:100866
createInstanceworkflow-api服务
分析InfoQ
极客传媒实例10086是系统重装流程还是固件升级流程?4返回实例ID:100868返回实例ID:100862
createlnstance7返回实例ID:10086系统重装流程固件升级流程创建流程实例创建流程实例ID冲突问题解决修改zeebe原生ID
编码规则,新增clusterlD解析逻辑实例ID:6755409618664841实例二进制:
0000000000011000000000000000001001011110101000011111110110001001中间8位为分区数
后51位为自增长数前5位调整为集群id在api服务中,解析请求体中的实例/任务id获取集群id,对该请求精确转发至对应的集群Zeebe集群A创建在Zeebe集群A的实例InfoQ
极客传媒重装流程实例:6755409618664840安全校验PXE安装任务id:6755409618664841完成任务
应转发至集群A6755409618664841workflow-apiData-重装流程6755409618664840Zeebe集群B运维:完成任务服务器运营前5位:00001
—
clusterId=1—→前13位:0000100000010后8位:00000010—→parationId=2按新解析协议得到此job对应的位置:1号集群,2号分区proxyClusterId=0zeebegateway-1broker-0par0-rep0-Lparl-rep1-Fpar2-rep2-Fpar3-rep0-Lpar4-rep1-Fpar5-rep2-Fpar6-rep0-Lpar7-rep2-Fpar8-rep0-F任务ID:9007200632084704<前13位分区
→0000000000011000000000000000000001010010000110001001100011100000
——
—后51位表示分区内自增ID—
→第3号分区前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-rep¹-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解析规则jobid:580964361937103210后zeebegatewayClusterId=1zeebegateway-2■■■■■■■■多集群弹性可伸缩架构落地zeebecluster-1zeebecluster-2工作流操作工作流查询业务运维zeebe
brokerzeebe
broker弹性可伸缩zeebe
brokerzeebe
brokerzeebe
brokerzeebe
brokerzeebe
brokerzeebe
broker服务代理层pollerserviceapiservice实时数据
(mysql)归档数据
(ES)极客传媒业务微服务serviceGjobtype-Ajobtype-B
service
jobtype-CGobtype-Dzeebe
gatewayzeebegatewayzeebe
gatewayzeebe
gatewayexporterserviceInfoQgpcgncgrpcgrpcgrpcgrpehttpkafka03秒级自动容灾,提升整体高可用InfoQ极客传媒全链路异地容灾如果工作流服务体系没有完善的全链路容灾机制,海量服务器运营在故障时很可能会进入灾难性的死循环可用区C
zeebe引擎集群常规服务器运营流程任务调度执行带内、带外通道
广
州XX
区异地双活部署激活任务的Grpc
轮询请求微服务JobType-故障流程微服务JobType-固件升级微服务JobType-系统重装微服务JobType-诊断流程ZeebeGatewayGatewayGatewayGateway上海XX区ZeebeGateway
GatewayGatewayGatewayZeebe
BrokerBrokerBrokerBrokerBrokerZeebe
BrokerBrokerBrokerBrokerBroker可用区C尝试远程快速重
启恢复服务器服务器运营异地双活部署CLB-0CLB-1创建流程实例可用区A
可用区B可用区C
zeebe
引擎集群异地双活部署workflow-pollerworkflow-poller异地双活部署workflow-apiworkflow-api得益于多集群架构落地,实现全链路异地双活部署在两个可用区均发
起轮询拉取任务在两个可用区轮流
创建流程实例InfoQ
极客传媒可用区A可用区B可用区C全链路容灾愈故风用可带内、带外通道3、请求cluster-0集群,链接
异常断开4、故障集群失败数+1,命中剔除
策略后将从可用列表中剔除请求失败数处理器请求失败记录双热集群秒级自愈,工作流服务实现业务零感知高可用1、业务调接口创建流程实例微服务JobType-故障流程微服务JobType-固件升级微服务JobType-系统重装微服务JobType-诊断流程广州XX区异常不可用双热集群部署模式,集群故障时,秒级自动切换,业务零感知广州XX
区cluster-16、转发至上海可用的集群定时计算更新ZeebeGatewayGatewayGatewayGatewayZeebe
BrokerBrokerBrokerBrokerBroker异地双活部署workflow-api集群负载均衡器2、实时计算可用集群clueter-0可用集群列表cluster-0
5、本地计数器重新计算出可用集群cluster-1cluster-1Zeebe
BrokerBrokerBrokerBrokerBrokerInfoQ
极客传媒ZeebeGatewayGatewayGateway
Gateway集群名称cluster-0cluster-1请求失败数+100本地计数器cluster-0上海XX区四、落地场景与取得效果InfoQ极客传媒已完成●运行中●已取消●已失败常态日处理任务量100W+ArchSummit
InfoQ
极客传媒峰值10W+QPS,支撑服务器数亿级自动化作业腾讯内部集群规模最大的工作流服务,应用于海量服务器数亿级自动化作业场景支撑流程类型数
支撑作业类型
已完成流程实例量
已完成服务器作业量数百
数干
数干万
数亿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毫秒级任务调度,满足业务SLAInfoQ
极客传媒多层级流程实例嵌套,流程灵活可复用服务器运营流程存在多层嵌套金字塔关系,对于这类多层嵌套的复杂流程,流程引擎建设基于实例维度的父子关系,提供了无层级上限限制的多层嵌套流程调度能力编辑流程变量状态已完成已完成已完成已完成子实例信息开始时间2024-06-0100:
47:302024-06-0100:
16:022024-05-3121:
42:032024-05-3121:
30:14流程变量流程实例ID1175439504739059297176090745488496215317699146541393946351188950303682619163结束时间2024-06-0223:
53:532024-06-0100:
47:272024-05-3121:
50:182024-05-3121:
40:02InfoQ
极客传媒流程实例信息流程编码C-
~~DoastProcessSy.OcessFwUProcess+allPrin子流程Ne
`SS全链路可视化控制台,提升开发运维效率在服务器运营流程中,因硬件、机房环境等问题会导致流程无法自动完成,需要人工介入处理,为支持流程中的人工干预,提供服务器全链路可视化控制台,提供
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 名牌轿车买卖合同
- 居间合同咨询服务合同
- 关于推进数字化转型的讨论
- 个人双包装修合同7篇
- 2025年白城货运资格证考试口诀
- 兼职合同合作协议
- 2025年长春货运从业资格证考试模拟考试题目答案
- 合伙共同经营宾馆合同8篇
- 个人房屋抵押借款服务合同5篇
- 新编信托借款合同5篇
- 人文素养知识考试复习题库(含答案)
- 申根签证在职证明模板中英双语备课讲稿
- 外科学教学课件:腰椎间盘突出症
- 儿童吸入性肺炎的诊断与治疗
- 产房分娩安全核查表及使用说明
- oppor11t刷全网通改全教程
- 内部控制-仓储与存货循环调查问卷
- 高二英语期末考试试卷质量分析报告
- 第一讲酒吧的类型及特征
- JJF 1071-2010国家计量校准规范编写规则
- GB/T 28906-2012冷镦钢热轧盘条
评论
0/150
提交评论