叶彬:弹性可伸缩海量工作流引擎建设实践_第1页
叶彬:弹性可伸缩海量工作流引擎建设实践_第2页
叶彬:弹性可伸缩海量工作流引擎建设实践_第3页
叶彬:弹性可伸缩海量工作流引擎建设实践_第4页
叶彬:弹性可伸缩海量工作流引擎建设实践_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

弹性可伸缩海量工作流引擎建设实践腾讯架构师/叶彬示即工作流程的计算模型,为完成一个业务目标,所需要经历的一系列步骤,通常用流程图来表示示例:服务器硬件故障自动诊断流程,日志下载→规则库加载→策略匹配结束开始结束非工作流模式下,原始需求:日志下载→规则库加载→规则匹配doLogsLoad();}doRulesLoad();rulesMatchTask.handle();}}新增需求:1)指定机型派单人工分析;2)命中指定规则派单至厂商分析voidhandle(){voidhandle(){doManualAnalysis();}新增逻辑块2}voidhandle(){rulesLoadTask.handle();}}}voidhandle(){doRulesLoad();rulesMatchTask.handle();一}}voidhandle(){doRulesMatch();supplyDiagnoseTask.handle();云使用工作流模式的任务协作-分离任务实现和任务协作关系日志下载规则加载规则匹配开始结束voidhandle(){}}}voidhandle(){doRulesMatch();」}使用工作流模式,各任务只实现自身原子逻辑,协同关系使用流程图表示当新的逻辑需要复用已有任务节点时,只需调整流程图,无需修改已有代码doSupplierAnalysis();doManualAnalysisdoSupplierAnalysis();}}}BPMN流程图规则加载规则加载规则匹配结束开始结束doRulesLoad();doLogsLoad();doRulesMatch();}}}}}◆解释任务定义◆控制状态流转◆维护内部状态◆监控/管理工作流执行◆解释任务定义◆控制状态流转◆维护内部状态◆监控/管理工作流执行微服务1微服务1微服务架构的核心是把复杂的业务系统拆分成高内聚的微服务,每个服务负责相对独立的逻辑。要实现业务价值,不是看单个服务的能力,而是要协调所有服务保证端到端业务流的成功微服务编排是指将多个微服务组合成一个完整的业务流程或服务的过程,该模式下会有一个中控引擎:容器3容器2容器1容器3容器2-十万级服务器、单体流程引擎、可调度原子操作时钟状态更新逻辑提到“流程引擎”,联想到的都是缓慢、低吞吐的使用场景,比如人工审批任务等,但服务器运营领域的大部分开发起审批功通过结束主流工作流引擎产品对比发现,zeebe支持高吞吐、低延时和横向扩容,能较好地适应微服务架构场景。它不依赖外部组件、设计之初就考虑了超大规模的微服务编排问题性能与吞吐低低中高高高容灾自愈能力无无配置复杂配置复杂配置复杂天然支持横向伸缩能力无无配置复杂配置复杂配置复杂天然支持可观测性低低低低低天然支持外部依赖DB/MQDB/MQ无BPMNHandler模型BPMNHandler模型DAG(Python)worker模型,适合微服务架构worker模型,BPMNworker模型,适合微服务架构文档友好度低高高中低中产品化程度高高高中低高社区活跃度中高低高zeebe工作流引擎顶层设计jobjobworkersJavazeebe工作流核心特性新老引擎顶层架构对比旧ActivitiDBActivitiDB任务Handler新新StreamProcessorRocksDBLogStream-Partition-0LogStream-Partition-1-ReplicaLogStream-Partition-0-ReplicaLogStream-Partition-1StreamProcessorRocksDBJobWorker开机Task关机TaskBroker-0异步队列模型,削峰,缓解后端存储计算压力01基于单集群的工作流服务体系建设如何将开源组件落地到生产环境?--关键:量化理解组件能力问题1:同等配置压测,仅官方benchmark的30%问题2:解决磁盘瓶颈后,吞吐提升,但成功率仅72%20wcnt(个/秒)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创建中2020/12/3010:00:10ReinstallProcess创建完成2020/12/3010:00:11运行中2020/12/3010:05:00ReinstallProcess…2020/12/3010:10:00ReinstallProcess完成logstreamInstanceCreatedInstanceCompleted运行时数据cache根据事件更新状态历史数据-不变flush运行中/完成优点:(1)所见即所得的数据模型,开发无需转换,可直接用于统计分析报表zeebe-zeebe-workflow-client■多节点、多分区并行执行33上上报workflow-kafka高可用MySQL:■对等网络集群,无单点瓶颈workflow-auditESES冷数据workflow_record工作流服务体系快速接入3、加载3、加载sdk编写各任务逻辑4、通过控制台或api创建流程实例绘制流程图2、通过控制台发publicclassSomeJob{@EnhancedJobWorker(type="some-service.SomeJob")publicvoidhandleTask(finalEnhancedJobClientclient,finalActivatedJobjob){//业务逻辑//..任务的原子实现if(success){pleteJob(job);throwSomeException("失败原因");}7650545276855987058476660.7058476660.11619287058476032.xship-service-system-installjob.lnitTaskSystemlnstallP02从单集群演进到多集群,架构弹性可伸缩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状态已完成JobType:AJobType:BJobType:X集合分析2022-05-3019:20:022022-05-3019:20:022022-05-3019:20:01获取pxe状态获取pxe状态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、线程池任务堆积,任务拉到后迟迟不处理2、broker激活job至activate后,因集群网络或超时等问题未能通知到gateway,进而无法同步至client6、执行业务逻辑Thread-1zeebegateway.cluster1、数据存储如何兼容数据格式变化2、与zeebe引擎的交互协议如何兼容新旧保持不变封装了zeebeclientsdk,代码需升级兼容仅升级版本业务微服务1业务微服务2问题轮询任务和执行的线程池问题轮询任务和执行的线程池任务轮询器任务轮询器JobPoller任务轮询器1、不同微服务不可能同一时间点升级完毕zeebe引擎zeebe1.3.7zeebe0.26.0zeebe0.26.0创建实例Xzeebe0.26.0zeebe0.26.0zeebe0.26.0zeebezeebe0.26.0zeebe0.26.0zeebe0.26.0zeebe0.26.0zeebe0.26.0行行摒弃当前的单点架构设计,设计多活模式。支持同一时间点,同一个业务微服务可同时与新旧两个zeebe引擎交互工作摒弃当前的单点架构设计,设计多活模式。支持同一时间点,同一个业务微服务可同时与新旧两个zeebe引擎交互工作zeebesdk重耦合引擎,交互操作只能—对—zeebebroker-1zeebebroker-18zeebebroker-1zeebebroker-18新的问题L4负载均衡polljob/completeJob/failJobworkflow-cleintL4负载均衡zeebeclientcompleteJob/failJob重点问题攻克:集群解耦&流量精准路由polljob/completeJob/failJob业务微服务人工运维多集群架构重点问题攻克1-业务解耦zeebe集群job拉取→行为简单且高频→保持grpc不变山activatedcompleted/failedactivatedcompleted/failedtimeline!jobTypegrpc2jobsgrpc3/failJob改造集群1集群1broker---broker---createdactivatedcompleted/failedtimelinetimeline3completeJob/failJob3completeJob/failJobclientJobHandlerThreadPoolExecutorJobHandler->timelineiclientJobWorkerJobPollerJobHandlerThreadPoolExecutorJobHandler->timelinei多集群架构重点问题攻克2-流量精准路由新增ActivateJob转发服务转发至多个Zeebe集群ZeebeGateway工作流微服务jobTypeAjobTypeBcompleteJob/failJob.问题completeJob等请求如何精准路由到目标集群?//theunique//theuniquejobidentifier,i控制台workflow-apiworkflow-apiworkflow-exporterworkflow-exporterID冲突zeebecluster-0zeebecluster-17返回实例7返回实例ID:10086workflow-apiworkflow-api服务分析后51位唯一标识同一个区内zeebe事件的id创建流程实例创建流程实例创建流程实例创建流程实例64位标识唯—ID4返回实例ID:100868返回实例ID:10086系统重装流程固件升级流程思路系统重装流程固件升级流程实例10086是系统重装流程还是固件升级流程?修改ID解析逻辑,保证不同集群的实例/任务实例10086是系统重装流程还是固件升级流程?修改zeebe原生ID编码规则,新增clusterlD解析逻辑实例ID:6755409618664841中间8位为分区数后51位为自增长数前5位调整为集群idPXE安装任务id:6755409618664841创建在Zeebe集群A的实例<前13位分区→———后51位表示分区内自增ID—→第3号分区proxyClusterId=0zeebegateway-1broker-0broker-2par7-rep¹-Fbroker-0par4-repl-Fbroker-2jobid:580964361937103210ClusterId=1zeebegateway-2jobtype-Bhttpgrpc业务运维实时数据03秒级自动容灾,提升整体高可用全链路异地容灾如果工作流服务体系没有完善的全链路容灾机制,海量服务器运营在故障时很可能会进入灾难性的死循环常规服务器运营流程任务调度执行带内、带外通道广州XX区愈故风用可愈故风用可可用区Czeebe引擎集群带内、带外通道全链路容灾全链路容灾尝试远程快速重启恢复服务器服务器运营得益于多集群架构落地,实现全链路异地双活部署异地双活部署异地双活部署异地双活部署异地双活部署CLB-0CLB-1workflow-poller微服务异地双活部署创建流程实例创建流程实例GatewayGatewayGatewayZeebeBrokerBrokerBrokerBrokerZeebeBrokerBrokerBrokerBroker可用区A可用区B可用区C双热集群秒级自愈,工作流服务实现业务零感知高可用双热集群部署模式,集群故障时,秒级自动切换,业务零感知微服务JobType-故障流程微服务JobType-固件升级微服务JobType-系统重装微服务JobType-诊断流程异地双活部署workflow-api集群负载均衡器cluster-0cluster-0cluster-1异常断开4、故障集群失败数+1,命中剔除请求失败数处理器+100GatewayGatewayGatewayZeebeBrokerBrokerBroker上海XX区cluster-1GatewayGatewayGatewayZeebeBrokerBroker峰值10峰值10W+QPS,支撑服务器数亿级自动化作业支撑流程类型数支撑作业类型已完成流程实例量已完成服务器作业量已完成●运行中●已取消●已失败常态日处理任务量100W+5seconds2seconds0seconds多层级流程实例嵌套,流程灵活可复用多层级流程实例嵌套,流程灵活可复用服务器运营流程存在多层嵌套金字塔关系,对于这类多层嵌套的复杂流程,流程引擎建设基于实例维度的父子关系,提供了无层级上限限制的多层嵌套流程调度能力编辑流程变量流程变量流程实例信息子实例信息流程变量流程实例信息流程实例ID开始时间2024-06-0100:流程实例ID开始时间2024-06-0100:47:302024-06-0100:2024-05-3121:42:032024-05-3121:30:14结束时间2024-06-0223:53:532024-06-0100:47:272024-05-3121:50:182024-05-3121:40:02流程编码已完成90592974962153已完成93946352619163在服务器运营流程中,因硬件、机房环境等问题会导致流程无法自动完成,需要人工介入处理,为支持流程中的人工干预,提供服务器全链路可视化控制台,提供流程运营操作,方便运维人员随时处理,大大提升了运维效率wcv|发起四.主流程流程实例信息流程变量子实例信息画主流程2024-06-0114:17:08流程图刷新CancelInstan

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论