在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

从单片应用转向微服务架构

  • 2017-01-05
  • 本文字数:1159 字

    阅读完需:约 4 分钟

Joris Kuipers 在一次演讲中声称,将现有系统迁移到微服务与构建一个新的系统迥然不同。该演讲描述了一个正在进行中的将大型单片应用重构成更加分布式的或基于微服务的架构的过程。

Kuipers 是 Trifork Amsterdam 的一名架构师,他所描述的应用是一个医疗保障的电子病历系统。它于六年前创建,头两年是一个带有少量 B2B 集成的单片应用。从一开始,它就是使用 Trifork 开发的开源框架 Axon 基于命令查询责任隔离(CQRS)构建的。它运行得很好,但是随着系统和用户数量的增长,新需求出现了,包含针对保险开支的需求,保险开支必须是一个单独的应用,但是仍然需要使用当前应用的数据。因为他们现在不得不转向共享状态的多个应用,这是一个巨大的改变。

今天,核心应用仍然相当庞大,周围围绕着三个独立的保险开支应用,在十多个可部署的应用中,一共包含了近 40 个第三方集成功能。它拥有约 65 个租户和 12,000 个用户。

许多集成的生命周期比核心应用短得多,所以他们转向微服务的主要原因是因为需要扩展开发以适应集成的不同的生命周期。扩展开发团队和加大开发步伐是这一转变的真实动力。

因为在开始重构的时候他们的应用是基于 CQRS 和事件的,他们决定使用事件作为集成点,通过消息代理向其它集成应用广播所有事件。他们将所有存在的 B2B 集成相关的代码抽取到单独的应用中,将它们连接到代理上以获取所有发送的事件。针对抽取出来的应用,需要与核心应用通信的,他们使用了核心应用中已经存在的 CQRS 命令。

数据流的典型例子是用户使用核心应用更新一些数据。该更新进而会引起事件的发布,然后集成应用异步读取事件,基于这种逻辑,这会发送通知给外部应用。Kuipers 把这看作一个轴辐式架构,核心应用是 hub,被几个更小的应用围绕。他指出这种通过消费者解藕的方式是一种非常适合他们的转向微服务的方式。

对于 Kuipers 来讲,事件对于拆分一个系统有非常大的帮助,因为它们本质上是异步的,描述已经发生的事情,并且其它系统能够监听并响应它。他指出使用事件也会引入一些挑战,当事件成为集成的支柱时,考虑这些挑战尤其重要。这些挑战有:

  • 既然事件是共享的数据结构,它们可能导致耦合
  • 一些事件可能需要在一个应用或者一个服务内私有
  • 需要考虑类型粒度和数据量,它们能够防止事件处理器请求更多的数据
  • 不破坏客户端的情况下事件如何随着时间演化

作为结论,Kuipers 指出,他们现在能快速开发和部署与主应用隔离的新集成功能,这也意味着风险的降低,因为核心系统没有被动过,Kuipers 声称所有这些让他们有了重要的竞争优势。

查看英文原文: Moving a Monolithic Application towards a Microservices Architecture


感谢张卫滨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-01-05 18:002986
用户头像

发布了 33 篇内容, 共 13.2 次阅读, 收获喜欢 10 次。

关注

评论

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

面试突击58:truncate、delete和drop的6大区别

王磊

Java java常见面试题 常见面试题

C#入门系列(二十) -- 面向对象之封装

陈言必行

C# 6月月更

文旅新体验!3DCAT助力广州非遗“元宇宙”街区炫酷亮相

3DCAT实时渲染

非遗 元宇宙 实时云渲染

【作业四 千万级学生管理系统的考试试卷存储方案】

wuli洋

【Spring 学习笔记(十四)】Spring AOP 通知中获取数据

倔强的牛角

Java spring 6月月更

Jenkins 通过检查代码提交自动触发编译

HoneyMoose

2022年秋季广州美博会-2022广州9月份美博会

Geek_0b38bb

2022年广州美博会 秋季广州美博会 美博会 广州美博会

我的远程办公经验 | 社区征文

五分钟学大数据

初夏征文

Python 设计模式:原型模式

宇宙之一粟

设计模式 原型模式 6月月更

dart使用技巧集合【01】

坚果

6月月更

本周二晚19:00战码先锋第6期直播丨共建测试子系统,赋能开发者提高代码质量

OpenHarmony开发者

OpenHarmony

告别手写,使用 Doc View 快速生成接口文档

程序员小航

IDEA 插件

读书笔记之:麦肯锡高效工作法

甜甜的白桃

读书笔记 读书 笔记 6月月更

SREWorks v1.2 版本发布 | 运维市场能力发布

阿里云大数据AI技术

大数据 运维 云原生 开发运维

知识管理——知识经济时代的增资利器

小炮

解决k8s调度不均衡问题

劼哥stone

Kubernetes 云原生 调度 调度不均衡 kube-scheduler

DOM核心——Element类型

大熊G

JavaScript 前端 6月月更

基于集群的动态反馈负载均衡策略

No Silver Bullet

集群 6月月更 负载均衡策略

案例驱动 :从入门到掌握Shell编程详细指南

百思不得小赵

bash 运维 6月月更

【LeetCode】出现次数最多的子树元素和Java题解

Albert

LeetCode 6月月更

Java技术培训之设计模式七大原则

@零度

设计模式 JAVA开发

Java开发培训之设计模式UML类图

@零度

JAVA开发 UML

ImportSelector与DeferredImportSelector的区别(spring4)

程序员欣宸

Java spring SpringFramework 6月月更

【愚公系列】2022年06月 通用职责分配原则(八)-中介原则

愚公搬代码

6月月更

IAST 初探:博采众长、精准定位、DevOps友好

SEAL安全

DevOps 安全 IAST 应用安全测试 开源软件供应链

开源生态|超实用开源License基础知识扫盲帖(下)

Orillusion

开源 WebGL 元宇宙 Metaverse webgpu

APICloud 实现文档下载和预览功能

YonBuilder低代码开发平台

文件 APP开发 APICloud

《网络是怎么样连接的》读书笔记 - Tcp/IP连接(二)

懒时小窝

TCP 网络编程 IP

敲了几万行源码后,我给Mybatis画了张“全地图”

小傅哥

源码分析 面试 小傅哥 mybatis 大厂面试

Linux开发_采用线程处理网络请求

DS小龙哥

6月月更

vivo 容器集群监控系统架构与实践

vivo互联网技术

云原生 监控 系统架构 Prometheus

从单片应用转向微服务架构_语言 & 开发_Jan Stenberg_InfoQ精选文章