写点什么

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

  • 2019-02-16
  • 本文字数:1182 字

    阅读完需:约 4 分钟

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

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

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

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

关注

评论

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

VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS 集成网卡驱动 Marvell AQC 网卡定制版

sysin

esxi 驱动 网卡 unlocker aqc

win版Cyber​​Link PhotoDirector2024(相片大师)v15.5.1730.极致版

影影绰绰一往直前

win版威力导演 2024 (CyberLink PowerDirector Ultimate)特别版

影影绰绰一往直前

区块链交易所怎么开发?DappNetWork

区块链开发团队DappNetWork

DAPP智能合约交易系统开发 区块链开发 交易所源码 链游开发dapp开发

普通职场人的成长路径

老张

面试经验 成长计划 思维逻辑

阿里巴巴关键字搜索商品API返回值实践:电商数据驱动的营销策略调整

技术冰糖葫芦

API Explorer API 文档 API 策略

蓝易云 - jvm教程:jdk1.8大对象的阈值默认是多少

百度搜索:蓝易云

Java 云计算 运维 服务器 云服务器

蓝易云 - 香港云服务器哪家便宜点

百度搜索:蓝易云

云计算 运维 服务器 云服务器 香港云服务器

如何有效管理低绩效人员:CARES 框架

俞凡

团队管理

区块链开发团队DappNetWork

区块链开发团队DappNetWork

区块链+ dapp开发 交易所源码 链游开发dapp开发 智能合约开发

基于Java“镜头人生”约拍网站系统设计实现(源码+lw+部署文档+讲解等)

hunter_coder

人工智能 openai

淘宝按关键字搜索API返回值研究:提升搜索准确性的关键

技术冰糖葫芦

API Explorer api 货币化 API 文档

蓝易云 - 香港云服务器哪家便宜

百度搜索:蓝易云

云计算 运维 服务器 香港云服务器 免备案服务器

日调用量翻10倍!百度主力大模型免费吸引客户涌入

IT新闻资讯

#百度#

蓝易云 - 国内云服务器哪家便宜

百度搜索:蓝易云

服务器 云服务器 香港服务器 高防服务器 免备案服务器

蓝易云 - linux常用命令搜索关键字

百度搜索:蓝易云

云计算 Linux 运维 服务器 云服务器

领导者在沟通中最容易犯的错误

俞凡

团队管理

Arweave的挑战与机遇:解读AO技术与未来生态

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

2024年5月文章一览

codists

开发电竞体育直播平台:一周内上线的现成源码解决方案

软件开发-梦幻运营部

多家央行开启降息序幕:加密行情的新机遇与挑战

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

电竞体育直播软件开发:成品源码特色功能的深入解析

软件开发-梦幻运营部

2024-06-08:用go语言,给定三个正整数 n、x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋。 在这座城市中,房屋通过街道相连。对于每个编号i(1 <= i < n), 存在一条

福大大架构师每日一题

福大大架构师每日一题

I/O虚拟化概述

Linux内核拾遗

Virtualization 虚拟化 virtio IO虚拟化

基于Java“花鸣”B2C电子商务平台设计实现(源码+lw+部署文档+讲解等)

hunter_coder

人工智能 openai

win版Serviio Pro(媒体服务器) v2.3.0特别版

影影绰绰一往直前

Web应用程序安全漏洞的危害与防御措施

德迅云安全杨德俊

从0到1:企业办公审批小程序开发笔记

CC同学

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