写点什么

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

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

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

关注

评论

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

数据库外网ip binlog主从配置

Java你猿哥

Java MySQL 后端 ssm

ZeroErr 零误框架

西风逍遥游

膜拜!阿里内部都在强推的K8S(kubernetes)学习指南,不能再详细了

Java Kubernetes k8s

小心白蛇!PyPI仓库被持续投放White Snake后门组件

墨菲安全

pypi 开源软件供应链安全

跑步课程导入能力,助力科学训练

HarmonyOS SDK

HMS Core

MySQL主从配置+ThinkPHP5分布式数据库

北桥苏

MySQL 分布式 thinkphp

大模型时代入场级技能:提示词工程!百度文心中文教程来啦

飞桨PaddlePaddle

百度飞桨

中建信息亮相华为中国合作伙伴大会2023

极客天地

【源码分析】【seata】at 模式分布式事务-server端与客户端交互

如果晴天

源码分析 分布式事务 分布式锁 seata Seata框架

文盘Rust -- rust连接oss

TiDB 社区干货传送门

开发语言

并发编程-ReentrantLook底层设计

Java 并发编程 ReentrantLook

Java面试题大全(整理版)1000+面试题附答案详解最全面看完稳了

Java你猿哥

Java MySQL redis mybatis java面试

从零开始打造一款基于SpringBoot+SpringCloud的后台权限管理系统

Java Spring Cloud Spring Boot 权限管理

AntDB数据库携手金蝶Apusic应用服务器, 共促信创产业繁荣发展

亚信AntDB数据库

AntDB AntDB数据库 企业号 5 月 PK 榜

Fabarta 参加 2023 数云原力大会,与各方共同发布《2023 数据资产盘点实践白皮书》

Fabarta

数据要素 数据资产管理 数据资产化 数据要素流通

开源轻量级 IM 框架 MobileIMSDK 的Uniapp客户端库已发布

JackJiang

网络编程 即时通讯 即时通讯IM

PCB如何设计防静电?华秋一文告诉你

华秋电子

从 MySQL 到 Oracle 再到全面 TiDB ,云盛海宏的数据库架构实践

TiDB 社区干货传送门

Prompt learning 教学[进阶篇]:简介Prompt框架并给出自然语言处理技术:Few-Shot Prompting、Self-Consistency等;项目实战搭建知识库内容机器人

汀丶人工智能

人工智能 深度学习 ChatGPT prompt learning

Windows本地搭建RabbitMQ Server

北桥苏

Rabbit MQ RabbitMQ安装

Elasticsearch分布式搜索引擎的基本使用

北桥苏

php elasticsearch

重磅来袭!微服务的里程碑SpringCloudAlibaba

Java 架构 微服务 Spring Cloud spring cloud alibaba

方案精讲丨TiDB 在社交场景的解决方案实践

TiDB 社区干货传送门

不到1分钟,帮你剪完旅行vlog,火山引擎全新 AI「神器」真的这么绝?

字节跳动技术范儿

字节跳动 算法 计算机视觉 云服务 火山引擎

短信验证 创建应用

MobTech袤博科技

微信小程序二维码文件流上传到OSS解决方法

北桥苏

php OSS thinkphp

大厂工作四年Java经验总结了学习路线规划,所有私藏资料我都贡献出来了

Java你猿哥

Java Spring Boot JVM java基础 java面

国内商业BI工具介绍,瓴羊Quick BI、帆软怎么样

流量猫猫头

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