NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

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

关注

评论

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

从JVM底层原理分析数值交换那些事

秦怀杂货店

JVM 交换数值

滚雪球学 Python 第二轮开启,进阶之路,列表与元组那些事儿

梦想橡皮擦

28天写作 3月日更

Shibboleth IdP4 升级指南

冯骐

认证 Shibboleth IdP 上海教育认证 上海教育

百分点大数据技术团队:数据治理“PAI”实施方法论

百分点大数据团队

人民网:亚马逊云科技,以这样姿势扎根中国!

亚马逊云科技 (Amazon Web Services)

一个简单实用的Linux性能分析工具

运维研习社

Linux 性能分析

报名 | 全球首个小资源音色克隆赛结果出炉,高分队伍线上报告会

爱奇艺技术产品团队

Elasticsearch Analyzer 分词器

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

Java的锁

并发编程

25个关键技术点,带你熟悉Python

华为云开发者联盟

Python

华云大咖说 | 高校混合云建设及应用

华云数据

智汇华云 | ArcherOS Stack—软件定义数据中心“利器”

华云数据

互联网短平快下,DevCloud如何支撑软件开发的“转型”?

华为云开发者联盟

android 敏捷开发 软件开发 华为云 devcloud

2021 创新加速周蓄势待发,铆足牛劲再出发!

亚马逊云科技 (Amazon Web Services)

聊聊园区网中的专网架构

冯骐

运维 网络 VRF 虚拟路由表

Nydia

MySQL数据库DDL、DML详解

若尘

MySQL

是什么支持“毅力号”在火星上尽情摄影?

亚马逊云科技 (Amazon Web Services)

SQL Server 删除正在使用数据库

田镇珲

关于写作的一点小想法「Day 13」

道伟

28天写作

翻译:《实用的Python编程》03_05_Main_module

codists

Python

KubeEdge 1.6发布:可靠的K8s原生边云API

华为云原生团队

开源 云原生 边缘技术 kubeedge

详解NLP和时序预测的相似性(附赠AAAI21最佳论文INFORMER的详细解析)

华为云开发者联盟

自然语言处理 深度学习 时序预测 RNN Informer

建信金科大咖访谈:金融科技驱动业务创新,智慧运营引领发展转型

金科优源汇

不知不觉不假思索——可供性

Justin

心理学 28天写作 游戏设计

《精通比特币》学习笔记(第二章)

棉花糖

区块链 读书笔记

Kubectl Plugin 推荐(一)| 可观测性篇

郭旭东

kubectl kubectl plugin

AI数学基础之:概率和上帝视角

程序那些事

人工智能 AI 程序那些事 概率论

云小课丨网络好不好,ping一下就知道

华为云开发者联盟

网络 虚拟私有云 ping ICMP 安全组

百分点数据科学实验室:产品生命周期管理创新应用落地实践

百分点大数据团队

笔记整理:技术架构涵盖内容和演变过程总结

小傅哥

Java 程序员 小傅哥 架构设计 架构图

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