写点什么

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

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

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

关注

评论

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

差点自闭!京东面试官夺命连环问操作系统,幸好最后拿到了offer

Geek_0c76c3

Java 数据库 开源 程序员 开发

Java岗秋招最全面试攻略,看这份Java架构面试核心手册,足够了

Geek_0c76c3

Java 数据库 开源 程序员 架构

火山引擎CDN的技术演进与未来

火山引擎边缘云

数据库连接池

C++后台开发

MySQL 数据库 后端开发 Linux服务器开发 连接池

凭这份堪称保姆级别的Java面试宝典,已怒斩3个大厂offer(阿里,美团,腾讯)

Geek_0c76c3

Java 数据库 开源 程序员 架构

高性能数据访问中间件 OBProxy(五):一文讲透数据路由

OceanBase 数据库

突破研发效能瓶颈,详解价值流分析的五大流动指标

万事ONES

云堡垒机能给公司带来哪些价值?选择哪款好?

行云管家

云计算 堡垒机 云堡垒机 云运维

有什么好用的低代码快速开发平台?

优秀

低代码开发平台

一份react面试题总结

beifeng1996

前端 React

react常见考点

beifeng1996

前端 React

教育行业在用的云管平台是什么牌子?

行云管家

云计算 教育 云管平台 云管理

天翼云ECK云边一体化

天翼云开发者社区

中国信通院沙龙|火山引擎边缘云助力业务体验创新

火山引擎边缘云

云计算 云原生 边缘计算 边缘节点 信通院

大数据揭秘丨疫情影响下亚马逊女性夹克的逆袭之旅

前嗅大数据

大数据 数据分析 数据采集 跨境电商 亚马逊

10年经验hr亲授:刷完阿里P8架构师的RocketMQ核心手册,进大厂稳了

Geek_0c76c3

Java 数据库 开源 架构 开发

英特尔为开源注入创新力量,加速AI应用

科技之家

荣耀开发者服务平台全新升级,助力开发者简单开发、高效分发

荣耀开发者服务平台

开发者 手机 安卓 荣耀 honor

帮助 Meta 解决 Presto 中的数据孤岛问题

Alluxio

sql 开源 presto Alluxio meta

怎么样在应用中实现自助报表功能

石臻臻的杂货铺

报表

《Vue.js技术内幕》有奖书评活动正式开启

图灵教育

vue.js 前端

20道高频vue面试题自测

bb_xiaxia1998

Vue 前端

2022年Q2全国网络零售发展指数同比增长3.3%

易观分析

市场 消费

React源码解读之React Fiber

flyzz177

React

云行| 加码算力网络布局,天翼云发布南京3AZ节点

天翼云开发者社区

墨天轮沙龙 | 麦杰科技卢学东:openPlant 实时数据库系统及应用

墨天轮

数据库 工业 国产数据库 实时数据库

异地多活架构新突破:库存单元化部署技术思路揭秘

阿里技术

数据库 架构

从recat源码角度看setState流程

flyzz177

React

《Vue.js技术内幕》有奖书评活动正式开启

图灵社区

vue.js 前端

Wallys//Industrial_Wireless_AP//network,card//QCN6024/QCN9074/QCN9024,WiFi,Card IPQ6010,802.11ax,2x2

wallys-wifi6

QCN9074 QCN6024 QCN9072

存储资源盘活系统,“盘活”物联网架构难题(下)

天翼云开发者社区

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