写点什么

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

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

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

关注

评论

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

腾讯安全姬生利:《数据安全法》下,云上数据安全最佳实践

腾讯安全云鼎实验室

数据安全 云安全 数据安全法

云开发是啥?看看它在编程导航项目的实践

程序员鱼皮

Java JavaScript 大前端 后端 云开发

RestTemplate打印日志的正确姿势

编号94530

spring 日志 log RestTemplate

☕【JVM技术探索】深入分析各种锁(锁膨胀)运作流程

洛神灬殇

JVM 锁升级 6月日更 锁分析

为什么大家都在用WebRTC?

anyRTC开发者

音视频 WebRTC 语音通话 视频通讯

机器数及特点

若尘

计算机组成原理 6月日更

5分钟速读之Rust权威指南(二十七)Rc<T>

wzx

rust

工作年限、成长路线、进阶技术。怎样才能成为架构师?

Linux服务器开发

Linux服务器开发 Linux后台开发 软件架构师 服务器架构师 C++架构师

剪视频一点都不难,多款超实用剪辑软件全方位评测!

懒得勤快

短视频 视频剪辑 视频制作

多云部署又添新「云」,EMQ X Cloud 正式支持腾讯云部署

EMQ映云科技

阿里云 IoT 华为云 云平台 #腾讯云

银行业运维指标体系建设实战

云智慧AIOps社区

智能运维

网络攻防学习笔记 Day52

穿过生命散发芬芳

网络攻防 6月日更

ROS CDK | 云上资源自动化部署新模式

郭旭东

阿里云 ROS 基础设施即代码 IaC

管理者如何避免主观偏见

石云升

职场经验 管理经验 6月日更

1小时学会不打代码制作一个网页精美简历(1)

1_bit

大前端 低代码 iVX 低代码开发平台

基于jira的需求交付效率统计

好孩子

Jira

批量把Excel数据自动录入系统

木头

自动录入 批量录入 自动填表

【Linux】使用 systemd 管理 frp 服务

赖猫

Linux 后端

网络态势感知是什么?

郑州埃文科技

Flink 和 Iceberg 如何解决数据入湖面临的挑战

Apache Flink

flink

唯品会:在 Flink 容器化与平台化上的建设实践

Apache Flink

flink

如何用视频云技术,搞一个爆红的 “反应视频” 项目?

阿里云CloudImagine

阿里云 RTC 英特尔 视频处理 视频制作

2021年,想要成为年薪百万的Java架构师需要掌握哪些技术?

Java架构师迁哥

前端 JavaScript 复制粘贴的奥义——Clipboard 对象概述

编程三昧

JavaScript 大前端

小红书 x StarRocks:实现数据服务平台统一化,简化数据链路,提升高并发极速查询能力

StarRocks

数据库 数据分析 广告系统 小红书 StarRocks

JavaScript 数组操作必须熟练运用的 10 个方法

devpoint

JavaScript array reduce 6月日更

网络为本,博睿数据NPMD用20%的投入实现80%的功能

博睿数据

博睿数据 数据链DNA NPMD

墨奇,以“一手之力” 证明你就是你

E科讯

北京多部门联合整治违规应用:过度收集用户信息该重罚

石头IT视角

Redis入门四:数据持久化

打工人!

redis redis持久化 6月日更

58集团 x StarRocks:全面升级数据分析能力,满足多场景业务分析需求

StarRocks

数据库 数据分析 OLAP 58同城 StarRocks

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