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:005950
用户头像

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

关注

评论

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

网络时间协议介绍以及服务器同步网络时间

MySQL从删库到跑路

ntp 时间同步

【Mycat】Mycat核心开发者带你轻松掌握Mycat路由转发!!

冰河

分布式 微服务 分库分表 中间件 mycat

“懂行”的价值循环与蝴蝶风暴

脑极体

JVM真香系列:图解垃圾回收器

田维常

JVM 垃圾回收

【JAVA】TreeSet, LinkedHashSet和HashSet差异对比

笑春风

【可下载】2020年底收官!为大家整理了物联网行业全面研究报告、行业洞察、白皮书……

IoT云工坊

人工智能 大数据 5G 物联网 智能家居

架构师训练营第 1 期 - 第八周总结

Todd-Lee

极客大学架构师训练营

《身边的金钱心理学》

石云升

第八章作业

alpha

极客大学架构师训练营

架构师训练营 第四周作业

文江

苏州崛起为我国区块链产业高地

CECBC

区块链 社区矫正

第八周总结

alpha

极客大学架构师训练营

成为架构师 - 架构师训练营第 04周

陈永龙Vincent

高交会:高新企业源中瑞在此出展区块链BAAS技术

13530558032

“区块链+营销”:科技力量助力行业前行

CECBC

市场营销

区块链治理的真实价值在哪里

CECBC

区块链 治理 治理机制

架构作业--相交链表

Nick~毓

ebay支付核心账务系统架构演进之路

贾奇 (Jacky)

支付系统 共识机制 系统稳定高可用 Event Sourcing 异地多活容灾

Java8引入新的日期和时间库,你应该知道

Silently9527

java8

《Web应用安全权威指南》.pdf

田维常

极客大学架构师训练营第一期第八周总结

睡不着摇一摇

架构师一期

第四周作业

Jack

年轻人的第一个MyBatis项目就要这样来学习,不走弯路

小Q

Java 学习 架构 面试 mybatis

python+requests进行get、post方法接口测试

测试人生路

Python 接口测试

第八周课后练习

knight

家谱链亮相高交会,点亮“区块链+文化”融合发展之路

13530558032

训练营第四周作业

大脸猫

极客大学架构师训练营

训练营第四周总结

大脸猫

极客大学架构师训练营

分分钟玩转SpringBoot自定义注解

比伯

Java 大数据 编程 架构 编程语言

腾讯强推Redis大神之路成长手册!原理+应用+集群+拓展+源码五篇齐飞

Java架构追梦

Java 数据库 redis 架构 面试

腾讯强推Redis成长手册!原理+应用+集群+拓展+源码五飞

小Q

Java redis 学习 架构 面试

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