《叶彬-弹性可伸缩海量工作流引擎建设实践.pdf》由会员分享,可在线阅读,更多相关《叶彬-弹性可伸缩海量工作流引擎建设实践.pdf(47页珍藏版)》请在三个皮匠报告上搜索。
1、弹性可伸缩海量工作流引擎建设实践腾讯 架构师/叶彬目录背景工作流引擎技术选型高可用架构落地实践落地场景与取得效果下一步计划与思考一、背景什么是工作流即工作流程的计算模型,为完成一个业务目标,所需要经历的一系列步骤,通常用流程图来表示日志下载规则加载规则匹配开始结束(业界通常用BPMN流程图来描述一个工作流)示例:服务器硬件故障自动诊断流程,日志下载 规则库加载 策略匹配非工作流模式下系统实现class LogsLoadTask void handle()doLogsLoad();rulesLoadTask.handle();非工作流模式下,原始需求:日志下载 规则库加载 规则匹配class R
2、ulesLoadTask void handle()doRulesLoad();rulesMatchTask.handle();class RulesMatchTask void handle()doRulesMatch();新增需求:1)指定机型派单人工分析;2)命中指定规则派单至厂商分析非工作流模式下的问题class LogsLoadTask void handle()doLogsLoad();if(isSpecialServer)manualAnalyTask.handle()elserulesLoadTask.handle();class RulesLoadTask void hand
3、le()doRulesLoad();rulesMatchTask.handle();class RulesMatchTask void handle()doRulesMatch();if(isSpecialRule)supplyDiagnoseTask.handle();class ManualAnalyTask void handle()doManualAnalysis();class SupplyDiagnoseTask void handle()doSupplierDiagnose();耦合高、调整难、复用低新增逻辑块1新增逻辑块2新加业务场景,要改已有的代码。这不符合开闭原则!为什么需
4、要工作流class LogsLoadTask void handle()doLogsLoad();rulesLoadTask.handle();使用工作流模式的任务协作-分离任务实现和任务协作关系class RulesLoadTask void handle()doRulesLoad();rulesMatchTask.handle();class RulesMatchTask void handle()doRulesMatch();日志下载规则加载规则匹配开始结束使用工作流模式,各任务只实现自身原子逻辑,协同关系使用流程图表示为什么需要工作流class LogsLoadTask void ha
5、ndle()doLogsLoad();class RulesLoadTask void handle()doRulesLoad();class RulesMatchTask void handle()doRulesMatch();日志下载规则加载规则匹配开始结束人工分析供应商诊断指定机型?指定规则?是是否否class ManualAnalysisTask void handle()doManualAnalysis();class SupplierAnalysisTask void handle()doSupplierAnalysis();当新的逻辑需要复用已有任务节点时,只需调整流程图,无需修
6、改已有代码BPMN流程图什么是工作流引擎将任务实现与任务协作关系分离之后,就诞生了专门维护任务协作关系的程序-工作流引擎解释任务定义控制状态流转维护内部状态监控/管理工作流执行所有涉及业务流转按流程完成的场景都可通过工作流引擎作为支撑主要功能工作流引擎与微服务编排微服务架构的核心是把复杂的业务系统拆分成高内聚的微服务,每个服务负责相对独立的逻辑。要实现业务价值,不是看单个服务的能力,而是要协调所有服务保证端到端业务流的成功微服务编排是指将多个微服务组合成一个完整的业务流程或服务的过程,该模式下会有一个中控引擎:按业务逻辑的蓝图,编排各微服务的调用关系 监控整个业务流的状态 提供机制处理单个服务