9 月 13 日,2025 Inclusion・外滩大会「开源嘉年华」正在限量报名中! 了解详情
写点什么

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

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

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

关注

评论

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

小程序可以在智能设备上运行?

Speedoooo

小程序 物联网 IoT 智能设备 小程序容器

从检测角度思考美燃油管道商遭勒索攻击事件

科技怪咖

设计模式的艺术 第十五章代理设计模式练习(设计一款基于C/S的网络图片查看器,用户只需在图片查看器中输入网页URL,程序将自动将网页所有图片下载到本地。)

代廉洁

设计模式的艺术

【云原生 | Docker】部署 Django & Nginx & Gunicorn

计算机魔术师

8月月更

UI 自动化测试实战(二)| 测试数据的数据驱动

霍格沃兹测试开发学社

华为云WeLink助力平房区打造智慧政务办公系统

IT资讯搬运工

人工智能’

GaussDB(for Redis)即将亮相华为云快成长直播间,让成本直降75%!

IT资讯搬运工

人工智能’

OPPO的航船:小布生命体将驶向怎样的科技彼岸?

脑极体

RPC接口测试技术-websocket 自动化测试实践

霍格沃兹测试开发学社

Android如何实现自定义短信登录丨MobTech

MobTech袤博科技

android

go语言逆向技术之---恢复函数名称算法

科技怪咖

iOS如何实现验证码登录丨MobTech

MobTech袤博科技

ios xcode

Python 自动化测试(四)

霍格沃兹测试开发学社

UI 自动化测试应不应该投入?有没有前途?怎样做最明智?

霍格沃兹测试开发学社

软件测试 | 接口自动化测试,如何实现多套环境的自动化测试?

测试人

软件测试 自动化测试 接口测试 测试开发

Carina 全新版本 v0.11.0 上线!重磅升级不可错过

BoCloud博云

云计算 云原生 #开源

宿舍全屋智能开发指南

OpenHarmony开发者

OpenHarmony

云南林职院 x WeLink一站式智慧迎新, 打造西南数字化职校新标杆

IT资讯搬运工

人工智能’

app自动化测试(iOS)元素定位(新手篇)

霍格沃兹测试开发学社

阿里云视觉智能开放平台9月特惠来袭

夏夜许游

MobTech 短信验证REST API

MobTech袤博科技

REST API MobTech袤博科技

Z世代的开学季:华为技能加持,你就是焦点!

最新动态

区块链入局,远程医疗这回“靠谱”了!

旺链科技

区块链 产业区块链 远程医疗 企业号九月金秋榜

基于深度学习下的航空领域真空羽流解决方案

GPU算力

NFT数字藏品系统开发:怎么开发自己的数字藏品平台?

开源直播系统源码

数字藏品 数字藏品系统软件开发 数字藏品开发 数字藏品系统 数字藏品软件

pe文件签名信息检测技术

科技怪咖

二进制SCA检测工具---技术短板及应对措施

科技怪咖

云速ERP(WeLink认证版)上线,加速中小微企业数字化经营创新

IT资讯搬运工

人工智能’

技术门槛高?来看 Intel 机密计算技术在龙蜥社区的实践 | 龙蜥技术

OpenAnolis小助手

云原生 intel sig 龙蜥技术 机密计算

漫谈软件成分分析(SCA)安全测试技术

科技怪咖

技术分享| 调度平台的好助手-快对讲

anyRTC开发者

音视频 调度 实时消息 快对讲 视频对讲

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