2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

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

关注

评论

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

基于YOLOv8的矿井内煤炭图像智能识别|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

人工智能

Java 18开发者新特性详解:简易Web服务器、代码片段标注与UTF-8默认编码

qife122

Java 新特性

NotebookLM替代工具技术解析

qife122

AI工具 技术对比

配电 低压电工经验总结(5)

万里无云万里天

工业 工厂运维

Mac下Elasticsearch7.x安装及Springboot集成

程序员架构进阶

elasticsearch #架构 8月月更 检索引擎 RAG 框架

✨ 梦精灵AI 2.0 应用大更新!管理中心+浏览器插件双升级,这些功能太香了!

龙正哲

提示词 提示词管理

配电 低压电工经验总结(3)

万里无云万里天

工业 工厂运维

AI 编程实战|提示词工程-Reflexion反思机制学习与实践

Jxin

编程 AI 提示词 提示词工程 AI辅助编程

从App Store高效获取iOS渗透测试所需的.ipa文件

qife122

ios安全 逆向工程

配电 低压电工经验总结(8)

万里无云万里天

工业 工厂运维

合规部署大语言模型:AI编排与可解释性

qife122

金融服务 合规

释放美杜莎:快速可扩展的智能合约模糊测试技术

qife122

区块链 开源

配电 低压电工经验总结(6)

万里无云万里天

工业 工厂运维

Gemma 3:单GPU/TPU可运行的最强开源模型

qife122

开源技术 AI模型

认证实验室实战演练 - 深入解析认证与授权漏洞

qife122

网络安全 渗透测试

微软强化Windows 11防御文件链接攻击

qife122

Windows安全 权限提升

多租户模型推理成本追踪方案解析

qife122

人工智能 成本优化

AI编程实战|提示词工程-N-Shot学习与实践

Jxin

编程 AI 提示词 AI辅助编程

微软漏洞赏金计划丰收季:六大安全研究员获嘉奖

qife122

漏洞赏金 IE11漏洞

AI 编程实战|提示词工程-COT&TOT学习与实践

Jxin

编程 AI 提示词 提示词工程 AI辅助编程

如何安全使用localStorage保护敏感数据

qife122

数据加密 前端安全

一个普通文科生的AI创业之路丨2023-2025

阿星AI工作室

创业 AI 产品经理 经验之谈 超级个体

spaCy v2.3发布:新增5种语言模型与性能优化

qife122

自然语言处理 开源工具

使用Rust操作Windows ACL:windows-acl库简介

qife122

rust acl

基于跨话语重评分的包容性语音识别技术

qife122

语音识别 图神经网络

PTI中的SMEP模拟技术解析

qife122

内核安全 SMEP

配电 低压电工经验总结(7)

万里无云万里天

工业 工厂运维

javax.security.auth.login.LoginException: Receive timed out

刘大猫

人工智能 数据挖掘 算法 数据分析 LoginException

高效训练大规模图神经网络的创新方法

qife122

图神经网络 GPU加速

某中心发布云端浏览器工具AgentCore,赋能AI网页交互

qife122

人工智能 云计算

配电 低压电工经验总结(4)

万里无云万里天

工业 工厂运维

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