微服务与工作流

article/2025/10/7 14:30:38

     本文主要想谈一谈工作流在微服务系统中的使用以及工作流能够为微服务系统带来的好处。

    通过查找资料可得,微服务的编排主要分为两种形式,一种是“choreography”,有人将其翻译成微服务的编排;另一种是“orchestration”,有人将其翻译成微服务的编制。两者的差异很简单,前者是点对点交互,没有一个中心流程来协同各服务的交互(服务注册不考虑在内),例如,现在的REST-API调用,dubbo框架、hsf框架都是基于此种设计模式;后者是基于总控系统,通过总控系统协调各服务的交互,例如,例如事件总线,消息队列等。其具体结构如图1.1所示。

                                      

                                                

                                                               图1.1 编排vs编制,来源: www.thoughtworks.com

   

   目前而言,"编排"风格的微服务架构设计有如下缺点:

    (1)"编排"使得一个业务流程分散到多个微服务中,这样使得整个流程不可见。

    (2)由于"编排"的点对点特性,使得两端的服务强耦合,因而很难适应需求的变化。

    可是,基于“编制”架构风格的设计也并非银弹。虽然基于事件通知可以降低服务之间的耦合,并且处理起来非常简单。但是,基于消息命令,不易获命令背后的业务逻辑,因此这种方式也不易察觉出业务的流程。

    那么,该如何有效的察觉出业务的流程呢?我想,可以使用基于“编制”风格的微服务+工作流。

    下面,以一个大家常见的场景进行描述:提交订单——>支付订单——>扣减库存——>派送商品——>交易完成。

    基于“编制”风格的事件流程处理如图1.2所示:

                                        

                                                                            图 1.2 基于“编制”风格的购买商品业务流程

 

 

      我们将上述购买商品的业务流程构建成为工作流中的bpmn模型,具体如图1.3所示:

                                               

     通过在微服务编排中引入工作流引擎,通过工作流对分散于各微服务中的业务进行总体的控制,可得如下好处: 

    (1)可见性。通过可视化方式使不易确定的业务流程变得清晰可见

    (2)状态处理。由于工作流能够存储每个具体流程的状态,因此一个订单可以对应于一个流程实例

    (3)状态的透明化和可视化处理。通过可视化方式查看或者变更某一流程实例的状态。例如,将某一订单回退到上一个环节。

       

      接下来的工作:

    (1)实验论证其观点

    (2)细化每一阶段目标


http://chatgpt.dhexx.cn/article/Q7CDnF3R.shtml

相关文章

Camunda工作流引擎入门

文档集合 1、camunda文档:https://docs.camunda.org/get-started/quick-start/ 2、camunda资源下载:https://camunda.com/download/ 3、camunda示例github仓库:https://github.com/camunda/camunda-bpm-examples 4、camunda 代码仓库&…

工作流设计详解

工作流 概念: workflow流程性通知和审批控制,业务流程中、发送、提供附加信息或进行附加业务处理,两个或两个以上的人为共同目标,连续以并行或串行的方式完成某一业务。 工作流 设计: 按照业务规划流程图&#xff0…

什么是工作流?为什么程序员要用它?

每一个程序员,在接触到工作流的时候,都会有这么一个疑问——我用一般的方法可以实现,为什么还要用工作流? 我曾经也问过这个问题,不过现在稍微有点明白了。别着急要答案,看过下面的例子,或许你…

什么是工作流

什么是工作流? 工作流是从英文单词work flow中直译过来的。最直白的意思就是日常工作中相对固定的流程计算机化。 在此列举两个工作流简例: 客户到银行开户的工作流: 客户索取开户资料单——资料填写——营业员核对个人证件——营业员核对帐款…

什么是工作流?如何利用工作流引擎实现业务流程

工作流引擎是用来实现工作流的一种组件化工具,它是一整套解决方案,比如说一般工作流引擎包含这些功能:流程节点管理、流向管理等,是为了减小开发成本而推出的。因为在软件开发过程中,如果是从零开始实现工作流&#xf…

什么是工作流,flowable 与 Activiti对比

工作流 什么是工作流工作流是复杂版本的状态机Java工作流开源框架工作流对比Activiti设计器 Flowable兼容性 Camunda设计器兼容性:小结: 社区活跃度FlowableActivitiCamunda 总结 什么是工作流 工作流,是指“业务​过程的部分或整体在​计算…

工作流是什么

刚入职一家公司不久,昨天去和经理与客户对接需求的之前,经理问我接触过工作流没有之前。作为一个20年毕业的老人了,只能尴尬的说一句没有我下去会去了解下。这里我就暂且找一下别人总结的文章和大家一起学习下。 一、什么是工作流 工作流&a…

什么是工作流?

这里说的工作流是狭义的管理工作流程。 现代企业的日常活动中,70%以上都是有两个或两个以上的员工共同参与协作的的任务,比如生产流程、业务流程、各类行政申请流程、财务审批流程、人事处理流程、质量控制及客服流程等。一项工作,经过一个步…

union用法和enum用法

1 union用法 C语言中的union在语法上与struct相似。 union只分配最大成员的空间&#xff0c;所有成员共享这个空间 2 union的注意事项 union的使用受系统大小端的影响 编程&#xff1a;判断系统的大小端 #include <stdio.h>// 1&#xff1a;小端&#xff0c;0&…

C语言 C++中的union用法总结(包懂)

开始的话 已经好长时间没有更新了&#xff0c;对不起自己&#xff0c;更对不起我亲爱的读者&#xff0c;同时也对不起自己开办的这个博客平台。忙&#xff0c;太忙了&#xff0c;忙于找工作&#xff0c;找一份好工作&#xff0c;纠结于去大城市闯呢&#xff0c;还是回到本省的首…

php union用法,SQL Union用法是什么?

sql union用法是什么&#xff1f; sql union用法的总结&#xff1a; UNION 运算符将多个 SELECT 语句的结果组合成一个结果集。 (&#xff11;)使用 UNION 须满足以下条件&#xff1a; &#xff21;&#xff1a;所有查询中必须具有相同的结构(即查询中的的列数和列的顺序必须相…

mysql union语法,mysql中的union用法

UNION在mysql中被称为集合操作,操作类型分为两种:UNION DISTINCT 和 UNION ALL;注意:UNION和UNION DISTINCT是一样的功能。UNION功能为合并多个查询的结果并去重,UNION ALL的功能为合并多个查询的结果不去重。 集合操作时,两边的输入必须拥有相同的列数,如果数据类型不…

mysql得union使用方法_mysql中Union All使用方法

在mysql数据库使用UNION 时&#xff0c;会把结果集中重复的记录删掉&#xff0c;也正因为做了去重操作&#xff0c;所以效率相对Union All来讲稍微低一点&#xff0c;使用UNION ALL &#xff0c;MySQL 会把所有的记录返回&#xff0c;效率高于UNION。本文向大家介绍UNION ALL的…

SQL 中union的使用

采用where的解法 select name,population,area from World where area>3000000 or population>25000000 ;使用union的解法 select name,population,area from World where area>3000000 union select name,population,area from World where population>2500000…

C语言共用体(C语言union用法)详解

转载重点&#xff1a;共用体的所有成员占用同一段内存&#xff0c;修改一个成员会影响其余所有成员。图形分析影响过程 通过前面的讲解&#xff0c;我们知道结构体&#xff08;Struct&#xff09;是一种构造类型或复杂类型&#xff0c;它可以包含多个类型不同的成员。在C语言中…

C语言 union用法

我们知道结构体&#xff08;Struct&#xff09;是一种构造类型或复杂类型&#xff0c;它可以包含多个类型不同的成员。在C语言中&#xff0c;还有另外一种和结构体非常类似的语法&#xff0c;叫做共用体&#xff08;Union&#xff09;&#xff0c;它的定义格式为&#xff1a; …

c语言union(c语言union用法)

C语言-程序运行结果是&#xff1f;main(){unionstu{lon 我的机器&#xff0b;vc6运行的结果是12 我的理解是首先取最长的b的长度&#xff0c;但是b的长度比我的机器字长(32位即4个字节)整数倍要短&#xff0c;则sizeof(stu)的长度是12 不知道你的机器是不是64位的 如果是则证…

quartz mysql 配置_quartz的数据库配置

Quartz.net官方开发指南 第九课&#xff1a; JobStore JobStore负责保持对所有scheduler “工作数据”追踪&#xff0c;这些工作数据包括&#xff1a;job(任务),trigger(触发器),calendar(日历)等。为你的Quartz scheduler选择合适的JobStore是非常重要的一步&#xff0c;幸运的…

java 灵活配置quartz

项目背景&#xff1a; 最近项目上遇到个需求&#xff0c;需要我们在特定的事件做邮件和短信的发送。但时间并不固定&#xff0c;是根据用户配置的时间表来进行的定时发送任务。有点像闹钟&#xff0c;你设置的时间到了就响。这里我们采取的是每天凌晨定时取数据库里的时间表信…

java quartz配置_java quartz简单使用

1.在项目里引入quartz org.quartz-scheduler quartz 2.3.0 2.quartz的简单实例 package com.example.quartz_demo; import org.quartz.JobDetail; import org.quartz.Scheduler; import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrig…