HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

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

关注

评论

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

SAP UI5 和 Angular 的函数防抖(Debounce)和函数节流(Throttle)实现原理介绍

汪子熙

前端开发 angular Fiori ui5 11月月更

数据的分组与计算

梦笔生花

Python pandas 11月月更

盘点具备盈利潜力的几大加密板块,以及潜在的投资机会

BlockChain先知

研发效能|DevOps 已死平台工程永存带来的焦虑

laofo

DevOps 研发效能 持续交付 工程效率 平台工程

AI为方,产业为向:京东云数字人的技术攀爬

脑极体

人工智能’

以开发之名|线上家装新美学——梦想之家,由你来定

HarmonyOS SDK

AR HMS Core

SAP UI5 BarcodeScannerButton 的初始化逻辑 - feature 检测,Cordova API 检测等逻辑

汪子熙

前端开发 Fiori SAP UI5 ui5 11月月更

Spark SQL基本架构

穿过生命散发芬芳

spark SQL 11月月更

防守体系建设三部曲

阿泽🧸

11月月更 防守体系

物联网数据分析(上篇)——业务系统架构类

阿里云AIoT

阿里云 数据分析 物联网 业务架构 数据存储

2022-11-01:给定一个只由小写字母和数字字符组成的字符串str。 要求子串必须只含有一个小写字母,数字字符数量随意。 求这样的子串最大长度是多少?

福大大架构师每日一题

算法 rust 福大大

Baklib经验分享 | 一些搭建帮助中心的攻略

Baklib

帮助中心

真正的高效能RPC框架Focus

dinstone

json RPC 高性能 protobuf 跨语言

安全左中右·2022 XDR 网络安全运营新理念峰会圆满落幕

未来智安XDR SEC

网络安全 XDR扩展威胁检测响应

如何写成高性能的代码(三):巧用稀疏矩阵节省内存占用

葡萄城技术团队

前端 稀疏矩阵

TOGAF企业架构框架4-内容框架

Marvin Ma

架构 TOGAF 企业架构框架 内容框架

鱼骨图还能做需求优先级分析?

产品海豚湾

产品经理 产品设计 产品开发 需求分析 11月月更

官宣 | 袋鼠云获过亿元 C + 轮融资,深耕国产自研数字化技术与服务

袋鼠云数栈

软件测试面试真题 | 讲讲 OSI 七层模型,每层模型具体干嘛的?

测试人

基于 Grafana LGTM 可观测性平台的快速构建

Grafana 爱好者

可观测性 Observability

融云钜惠来袭,新客尝鲜首月 2.7 折起,超值套餐 6 折起

融云 RongCloud

产品

MongoDB源码学习:mongod如何处理请求

云里有只猫

mongodb 源码学习

Spring Boot「21」JPA 中的 Entity

Samson

Java hibernate Spring Boot 学习笔记 11月月更

python小知识-set妙用

AIWeker

Python 人工智能 python小知识 11月月更

透过关键基础设施安全事件谈SBOM

安势信息

Gartner SCA 软件物料清单 SBOM 清源CleanSource SCA

TOGAF企业架构框架5-企业连续统一体

Marvin Ma

TOGAF 企业架构框架 架构分区 企业连续统一体 架构存储库

EDAS 流量入口网关最佳实践

阿里巴巴云原生

阿里云 分布式 云原生 网关

Nginx配置中root和alias分不清?本文3分钟帮你解惑!

wljslmz

nginx 服务器 root 11月月更 alias

Java | IO流介绍

陌上

Java 编程 11月月更

云原生生态 我们选择了哪些

Rayzh

Docker Kubernetes, 云原生, eBPF

Baklib知识分享|企业知识管理难,该如何解决?

Baklib

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