2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

从微服务迁移到工作流的经验之谈

  • 2019-02-16
  • 本文字数:1182 字

    阅读完需:约 4 分钟

从微服务迁移到工作流的经验之谈

Jet公司的订单管理系统(OMS)负责处理很多业务功能,最初是由一系列微服务组成的。随着公司的发展,这种架构所面临的挑战也越来越大,直到他们决定构建一个新的基于工作流的平台。Jet 工程师 James Novino 在一篇博文中介绍了旧系统面临的挑战、对新平台的概述以及新平台运行一年多后所总结的经验。


OMS 最初使用了发布与订阅、事件溯源和其他技术的组合。每个服务都使用相同的样板实现,包含了三个步骤:


  • 解码——从输入流中读取领域事件,并将事件转换为输入类型。

  • 处理——检查输入并获取任何所需的数据。

  • 解释——执行副作用。


随着公司的发展和需求的增长,架构的复杂性也在增加,使得维护系统变得更加困难。服务的数量也增加了,并且由于功能通常分布在多个服务中,因此导致开发周期变得更长。Novino 认为这是一个很复杂的过程,需要大量的样板代码。他还指出,随着系统的发展,构建和维护这种架构的复杂性对系统和团队都带来了负面影响。


因此,他们开始创建一个能够以更有效的方式处理所有业务工作流的新平台。他们决定设计和构建一个基于工作流的系统,其灵感来自 Pat Helland 和他的论文:Life Beyond Distributed Transactions。新系统的核心设计基于两个保证:


  • 幂等性——避免重复事件。

  • 一致性——支持多个不同的存储,但由于它们必须能够读取自己的写入,因此存储需要实现强一致性模型。


这些保证为系统带来了多个特性,包括:


  • 事件溯源——所有状态变更都存储在日记中。

  • 简单的实现,由工作流定义和相应的步骤组成。这样有助于开发人员优先考虑业务流程并强制执行系统的模块化。

  • 工作流的幂等性保证。

  • 工作流版本控制,可以将变更部署到工作流中,而无需担心当前正在执行的东西。

  • 伸缩性——通过使用每个服务的多个实例,可以并行执行工作流。


Novino 将新架构描述为其早期管道(解码->处理->解释)的抽象版本,并在每个操作之间具有明确的服务边界:


  • 工作流触发器,对应于解码;

  • 工作流执行器,用于处理;

  • 副作用执行器,相应的解释。


为了定义工作流,他们创建了一个领域特定语言(DSL),用于定义所需的一系列执行步骤。他们还提供一个可视化工具,可以显示正在运行和已经运行过的工作流。


Novino 指出,有一些现成的工作流编排和设计替代方案,但他们决定构建自己的方案,原因如下:


  • 能够为工作流事件维护单独的数据存储;

  • 能够在执行过程的任何时刻重放或可视化状态;

  • 可扩展性和伸缩性。


在生产环境中运行了一年多后,它们创建了大约 2200 万个日志,完成了大约 9300 万个工作流。


最后,Novino 指出,从基于分布式微服务的架构迁移到基于工作流的架构,在设计、开发和支持过程中对其开销产生了巨大影响。他还指出,使用 DSL 设计工作流并将其作为单个响应步骤实现的能力提高了他们构建复杂新系统的能力。在未来的文章中,他将更详细地介绍他们的新设计。


查看英文原文https://www.infoq.com/news/2019/02/migrate-microservices-workflows


2019-02-16 08:005943
用户头像

发布了 731 篇内容, 共 480.5 次阅读, 收获喜欢 2008 次。

关注

评论

发布
暂无评论
发现更多内容

5月上海线下 · CSM认证周末班【提前报名特惠】“全球金牌课程”CST导师亲授

ShineScrum

基于SpringBoot实现单元测试的多种情境/方法(二)

天翼云开发者社区

【特别策划】2022年银行年报金融科技系列专题(一)

易观分析

金融科技 金融 银行

算云融合促发展,天翼云以领先云网算力助推数字中国建设!

天翼云开发者社区

5月在线 · A-CSM认证周末班【提前报名特惠】“敏捷教练必修课程”CST导师亲授

ShineScrum

软件测试/测试开发丨如何高效使用 Requests 做接口自动化测试

测试人

软件测试 自动化测试 接口测试 测试开发 requests

打破软件开发“不可能三角” 只需一个低代码方案

力软低代码开发平台

保证高效写入查询的情况下,如何实现 CPU 资源和磁盘 IO 的最低开销?

TDengine

大数据 tdengine 数据处理 时序数据库 资源消耗

如何通过Java代码将添加页码到PDF文档?

在下毛毛雨

Java PDF 添加页码

FastAPI 快速开发 Web API 项目: 定义路径参数和查询参数

宇宙之一粟

Python FastApi

龙蜥开发者说:历时三周,记录如何从 0 到 1 构建龙蜥衍生版 | 第 18 期

OpenAnolis小助手

开源 操作系统 龙蜥社区 浪潮信息 衍生版

明道云技术路径选择及与LCDP的比较

明道云

国营单位工作4年转行网络安全,成功上岸安全开发!

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

网上说低代码的一大堆,JNPF凭什么可以火?

引迈信息

前端 敏捷开发 低代码 快速开发 JNPF

大咖说丨云计算:数字世界的“中枢神经”

天翼云开发者社区

Springfox与SpringDoc——swagger如何选择(SpringDoc入门)

天翼云开发者社区

从“卖船”到提供建造“航母” 的基础设施,用友BIP有底气

用友BIP

软件测试/测试开发丨Chrome 浏览器+Postman还能这样做接口测试 ?

测试人

软件测试 Postman 自动化测试 接口测试 测试开发

再获权威认可!MIAOYUN入选中国信通院2022年度《云原生产品目录》

MIAOYUN

云计算 容器 云原生 容器云 容器云平台

哪里有免费大文件传输平台?通过这4个网站免费来进行大文件传输

镭速

前沿成果 | 澳鹏Appen团队两篇研究论文被国际顶会收录

澳鹏Appen

人工智能 机器学习 计算机视觉 nlp 数据标注

智改数转:这个制造业的必答题该如何作答?

加入高科技仿生人

低代码 数字化 制造业 智能化 智改数转

分布式政企应用如何快速实现云原生的微服务架构改造

华为云开源

微服务 云原生

数据库原理及MySQL应用 | 程序流程控制

TiAmo

数据库 sql

容器化,让数据库如虎添翼

沃趣科技

MySQL 数据库 云原生 容器化

CNStack 服务网格:构建统一的服务治理和零信任安全能力

阿里巴巴云原生

阿里云 云原生 CNStack

5月上海线下 · CSPO认证周末班【提前报名特惠】“价值交付课程”CST导师亲授

ShineScrum

从微服务迁移到工作流的经验之谈_软件工程_Jan Stenberg_InfoQ精选文章