AICon 深圳站聚焦 Agent 技术、应用与生态,大咖分享实战干货 了解详情
写点什么

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

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

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

关注

评论

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

ZooKeeper进阶(二):ZooKeeper的运行

No Silver Bullet

zookeeper 6月月更

医疗机构如何利用云原生加速智慧医院建设?

York

云原生 系统架构 智慧医疗 医疗信息化 互联网医疗

InfoQ 极客传媒 15 周年庆征文 | Kettle实现ES到ES循环增量抽取

写程序的小王叔叔

架构 kettle ELK Stack InfoQ极客传媒15周年庆

【Python技能树共建】scrapy 上手篇

梦想橡皮擦

Python 爬虫 Python爬虫 6月月更

交友app源码未来的发展趋势是什么?

开源直播系统源码

如何使用 API 的方式消费 SAP Commerce Cloud 的订单服务

汪子熙

node.js SAP commerce 电商云 6月月更

如何在 Django 中使用 MVT 创建基本项目?

海拥(haiyong.site)

django 6月月更

java培训 | Mybatis的特性

@零度

mybatis JAVA开发

如何在 Vue 项目中,通过点击 DOM 自动定位VSCode中的代码行?

vivo互联网技术

Vue 前端 vscode vite webpack

Flink CDC 在大健云仓的实践

Apache Flink

大数据 flink 编程 流计算 实时计算

芯动科技加入龙蜥社区,创新驱动生态发展

OpenAnolis小助手

操作系统 芯片 龙蜥社区 CLA 芯动科技

百问百答第42期:应用性能探针监测原理-.net

博睿数据

智能运维 博睿数据 性能监测

NodeJS 5分钟 连接MySQL 增删改查 🥇

德育处主任

node.js MySQL 6月月更

【高并发】高并发环境下构建缓存服务需要注意哪些问题?

冰河

并发编程 多线程 高并发 异步编程 6月月更

从社恐到社牛,多亏了这款私人学习成长暗器!

博文视点Broadview

实战模拟│揭秘为啥年会你抽不到特等奖

随机 概率 抽奖系统 6月月更

签约喜报 | 月财生态签约旺链科技,区块链溯源让有机产品“有迹可循”

旺链科技

区块链 产业区块链 食品溯源 有机食品

了解 Session、LocatStorage、Cache-Control、ETag

CRMEB

文档管理系统应该具备哪些功能?

小炮

OpenHarmony 官网文档有哪些上新?上篇:应用开发文档上新

OpenHarmony开发者

OpenHarmony

面试官神级问题:DNS服务器是否可以加快我们的网络访问速度?

wljslmz

服务器 DNS 6月月更

新闻速递 | MobTech受邀参与华为开发者联盟沙龙,谈数据智能撬动增长

MobTech袤博科技

移动互联网 运营 精细化运营 华为开发者联盟 HDG

Linux开发_介绍目录编程、标准文件编程、Linux系统文件接口编程、GDB调试

DS小龙哥

6月月更

C#入门系列(十四) -- 结构体应用

陈言必行

C# 6月月更

Push还是Pull,这是个问题么?

MatrixOrigin

push Pull MatrixOrigin MatrixOne 数据库·

低代码实现探索(四十二)数据+方法+组件

零道云-混合式低代码平台

EasyNLP带你玩转CLIP图文检索

阿里云大数据AI技术

数据挖掘 存储 算法框架/工具 机器学习/深度学习

NLP论文领读|缺少有标注的数据集怎么训练文本检索模型?来看看 LaPraDoR怎么做的吧

澜舟孟子开源社区

人工智能 自然语言处理 神经网络 深度学习 nlp

直播倒计时1天!天翼云HPC解决方案助力企业腾飞

天翼云开发者社区

小程序IDE,快速配置让App具备“一码通”能力

Speedoooo

ide 二维码 一码通

今天 3 点!Intel Arch 和高性能存储技术两大 SIG 核心成员在线分享|第 21-22 期

OpenAnolis小助手

容器 镜像 直播 内核 龙蜥大讲堂

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