写点什么

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

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

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

关注

评论

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

3月寒窗!啃透美团保姆级分布式进阶技术手册,4月终入美团定L8

Java你猿哥

Java 分布式 SSM框架 分布式数据 分布式消息

SpringBoot2.x系列教程——整合使用JPA

会踢球的程序源

Java

准备2023金三银四的Java程序员注意:40+文档5000+页面试资料来啦

会踢球的程序源

Java java面试 面试资料 Java大厂面试

LED显示屏如何做到节能环保?

Dylan

经济 设备 LED显示屏

Oracle 23c 新特性实操体验优质文章汇总

墨天轮

数据库 oracle sql 新版本/特性解读

Unity 之 月签到累计签到代码实现(ScriptableObject应用 | DoTween入场动画)

陈言必行

Unity 三周年连更

测试工程师为什么要关注研发效能?

思码逸研发效能

软件工程 研发效能 测试工程师

小红书社区反作弊探索与实践

小红书技术REDtech

防作弊 小红书

我在 20 年的软件工程师生涯中学到的 20 件事

宇宙之一粟

翻译 软技能

小红书广告智能创意能力构建过程详解

小红书技术REDtech

人工智能 广告 小红书

如何一招搞定PCB阻焊过孔问题?

华秋PCB

工具 电路 阻抗 PCB PCB设计

【七千字】教你如何用MySQL分析查询语句Explain

会踢球的程序源

Java MySQL

python统计程序耗时 | python小知识

AIWeker

Python python小知识 三周年连更

关于ChatGPT,我们请小红书技术人和NLP专家聊聊原理和潜力

小红书技术REDtech

自然语言处理 openai ChatGPT

小红书2024届实习生招聘一直在等着你!

小红书技术REDtech

招聘 实习 小红书

OSPFv3与OSPFv2的对比

穿过生命散发芬芳

三周年连更 OSPFv3

OneFlow源码解析:Eager模式下Tensor的存储管理

OneFlow

TIME_WAIT累积与端口耗尽

阿泽🧸

TIME_WAIT 三周年连更

字节跳动正式开源分布式训练调度框架 Primus

字节跳动开源

开源 算法 流批一体

开源正当时,共赢新未来 OpenHarmony开发者大会成功召开

科技汇

【安全运维】小微企业的安全运维工具用哪款好?

行云管家

运维 安全运维

深入Spring Boot :web.xml去哪了

会踢球的程序源

Java Spring Boot

支持多种数据库管理系统:Valentina Studio Pro Mac激活版

真大的脸盆

软件 Mac 数据库管理 管理数据库

把脉分布式事务的模型、协议和方案

小小怪下士

Java 分布式 分布式事务 后端

开屏广告=让用户等?小红书如何兼顾用户体验和广告投放效果

小红书技术REDtech

推荐 广告 小红书

《中国企业软件研发管理白皮书》发布会倒计时1天|精彩抢先看

万事ONES

从「搭子」文化,看融云如何助力垂类社交应用增长

融云 RongCloud

融云 Z世代 通讯 交友 搭子

阿里全新推出:微服务突击手册,把所有操作都写出来了

Java你猿哥

微服务 微服务架构 Spring Cloud SSM框架

互联网工程师Java面试八股文及答案整理(2023最新版)

会踢球的程序源

Java springboot java面试

FastAPI 快速开发 Web API 项目: 连接 MySQL 数据库

宇宙之一粟

Python FastApi 三周年连更

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