写点什么

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

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

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

关注

评论

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

音视频编解码流程与如何使用FFMPEG命令进行音视频处理

张音乐

音视频 ffmpeg

别再纠结“性能优化方案有哪些”了

追谏

面试 大前端

Boss直聘超90W次转发的Java面试题库!已超神

Java架构师迁哥

这可能是史上最易懂的计算机网络科普文

追谏

面试 大前端 网络协议 科普 TCP/IP

CPU战争40年,终于把Intel打趴下了

Java架构师迁哥

微信朋友圈的高性能复杂度

王华

架构实战营

架构实战营模块3作业-架构设计文档

En wei

架构实战营

Gartner 2021年主要战略技术趋势

车骑

组织转型 行业资讯 数字化 技术趋势 后新冠

什么是线程安全?并发问题的源头

wzh

Java 并发编程 线程安全

Github标星过万!能让面试官满意的Java面试笔记到底有多强?

Java 程序员 架构 面试

差点跳起来了!阿里首推22w字Java面试复盘宝典成功助我入职美团

Java架构之路

Java 程序员 架构 面试 编程语言

常量之所想

顿晓

常量 5月日更

EOKEX交易所系统开发方案丨EOKEX交易所源码平台

系统开发咨询1357O98O718

深入理解spring框架之事务管理

邱学喆

mysql事务 spring事务管理 TransactionInterceptor Savepoint 事务传播行为

【LeetCode】删除并获得点数Java题解

Albert

算法 LeetCode 5月日更

去中心化、P2P、NAT浅析

IT酷盖

音视频 WebRTC 去中心化

上线仅仅三小时,豆瓣评分均9.0的“四本程序员必刷书籍”火了

Java架构之路

Java 程序员 架构 面试 编程语言

4.1 Go语言从入门到精通:函数

xcbeyond

函数 Go 语言 5月日更

GreenPlum数据库介绍

数据社

5月日更

数字经济如何推动制造业高质量发展

CECBC

【Vue3】起步

德育处主任

JavaScript Vue 大前端 Web Vue 3

马特机器人系统开发具体详情丨马特现成源码开发

系统开发咨询1357O98O718

新人小白福利!五一假期怒肝一天整理Java类,不简单不全你打我

牛哄哄的java大师

Java

GreenPlum资源管理

数据社

greenplum 5月日更

MySQL-技术专题-主从复制

码界西柚

MySQL MySQL 高可用 高可用架构 5月日更

架构师实战营 模块三总结

代廉洁

架构实战营

大米“绑上”区块链,江苏为农产品上“身份证”

CECBC

【LeetCode】搜索二维矩阵Java题解

Albert

算法 LeetCode 5月日更

牛客网亲测有效!牛客下载量近百万的Java程序员复盘秘籍真滴强

Java架构之路

Java 程序员 架构 面试 编程语言

☕JVM技术之旅-带你认识GC回收的原理

码界西柚

Java JVM GC GC Root 5月日更

架构实战营-模块3学习分享

En wei

架构实战营

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