写点什么

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

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

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

关注

评论

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

Android 实现水印背景效果,kotlin教程

android 程序员 移动开发

高风险IP究竟来自哪里?IP定位带你反欺诈

郑州埃文科技

模块二作业

ks

【应用分享】百度超级链助力CFCA建设基于区块链的电子数据存证系统

百度开发者中心

百度 超级链

如何给企业制定碳排放额度?

石云升

学习笔记 碳中和 11月日更 碳交易

Android 应用层开发 Drawable 的一些叨叨絮(1),androidstudio中文社区

android 程序员 移动开发

客户端稳定性异常检测:函数接口“扫雷”实践

阿里巴巴终端技术

函数式接口 稳定性测试 异常检测 客户端 APP稳定性

Python代码阅读(第54篇):斐波那契数列

Felix

Python 编程 斐波那契 阅读代码 Python初学者

如何用 Flutter开发一个直播应用

RTE开发者社区

flutter 人工智能

用户案例|告别传统金融消息架构:Apache Pulsar 在平安证券的实践

Apache Pulsar

Apache Pulsar

android 对不同日期和时间的格式方法的封装,46道面试题带你了解高级Android面试

android 程序员 移动开发

Android 屏幕适配方案,安卓开发

android 程序员 移动开发

软件测试面试屡屡失败,面试官总是说逻辑思维混乱,怎么办?

六十七点五

学习方法 面试 软件测试 自动化测试 测试工程师

Android 应用层开发 Drawable 的一些叨叨絮,跨平台移动开发答案

android 程序员 移动开发

JWT、JWS与JWE

喵叔

11月日更

优酷小程序优化实战

阿里巴巴终端技术

小程序 ios android 客户端 包大小

资产管理系统是管钱的吗?不完全对

低代码小观

企业管理 资产配置 资产管理 管理系统 企业资产

RecyclerView使用GridLayoutManager为什么无法均匀分布?

Changing Lin

11月日更

300M的文件,9秒钟下载完成,这款软件真的太离谱!

懒得勤快

又碰到一个奇葩的BUG

艾小仙

Android 常见的数据存储方式,腾讯T2大佬手把手教你

android 程序员 移动开发

茜纱窗下夜读书(2021年11月)

美月

#读书

WordPress站点快速集成腾讯数字身份管控平台CIAM,免开发实现登录认证

腾讯安全

Android 开发市场是盛是衰?你应该知晓,android音视频开发面试题

android 程序员 移动开发

并发编程之深入理解CAS

Fox爱分享

CAS 并发’ 11月日更 比较与交换

如何使用注解优雅的记录操作日志 | 萌新写开源 01

Zhendong

Java GitHub

通过Rainbond的团队管理去管理已有的组织架构

北京好雨科技有限公司

最佳实践 多租户 开源软件 rainbond

golang源码学习--context

en

Context

AliRTC 开启视频互动 “零计算” 时代

阿里云CloudImagine

阿里云 音视频 RTC 视频云

Linux踩过的坑

正向成长

Linux

专业版再增强 | MSE 无缝兼容 Eureka 协议,性能提升50%

阿里巴巴中间件

阿里云 微服务 云原生 中间件 Eureka

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