QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

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

关注

评论

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

久等了!【Innovation 2021】网易应用创新开发者大赛正式开赛!

网易云信

开源 架构 开发者 网易 语言 & 开发

正经人一辈子都用不到的 JavaScript 方法总结 (二)

编程三昧

JavaScript 大前端 8月日更

每天学习 10 个实用Javascript代码片段(六)

devpoint

mathjs 加密函数 随机数 8月日更

区块链技术如何在涉诉信访中显身手

CECBC

从技术到服务,小鹅通成功的「底层逻辑」是什么?

ToB行业头条

图像分类-cifar100 实验研究

毛显新

人工智能 神经网络 tensorflow 图像识别 keras

AI巨头们建造的“新世界”,进展如何?

脑极体

仓储执行系统(WES)

申扬科技

WCS wms WES 仓储执行系统

python通过PyQt5实现登录界面

Python研究者

8月日更

01. 你身边的AI

Databri_AI

人工智能

中国做ipfs公司排名?挖ipfs排名前三的公司是?ipfs矿机哪家最好?

中国做ipfs公司排名 ipfs矿机哪家最好 挖ipfs排名前三的公司是

业界首个高性能交互式自动标注工具——EISeg正式开源!

百度大脑

人工智能 开源

微信业务架构图-作业

Geek_a772a7

Filecoin价格今日行情:filecoin价格还能怎么走?

区块链 分布式存储 IPFS filecoin价格 filecoin行情

HTTP接口测试基础【FunTester框架教程】

FunTester

自动化测试 教程 接口测试 测试框架 FunTester

【DPDK工程师手册】 —— 官方文档,最新视频,开源项目,论文,大厂内部ppt,知名工程师一览表

奔着腾讯去

Linux DPDK VPP

☕【Java技术指南】「OpenJDK专题」想不想编译属于你自己的JDK呢?(Windows10环境)

洛神灬殇

Java jdk Openjdk 8月日更

安卓工控主板通信接口有哪些呢?

双赞工控

安卓主板 工控主板

Python代码阅读(第18篇):变形词判断

Felix

Python 编程 Code Programing 阅读代码

你真的了解二叉树吗?(手撕算法篇)

有道技术团队

二叉树 网易有道

新思科技软件组成分析解决方案获得Forrester Wave认可

InfoQ_434670063458

新斯科技 Forrester 软件组成分析

深入了解现代web浏览器(第一部分)

GKNick

如何认知新技术?区块链技术和应用

百度开发者中心

区块链 最佳实践 方法论

Baetyl推动边云融合 点亮智能物联网

百度大脑

人工智能 开源

OceanBase 源码解读(三)分区的一生

OceanBase 数据库

数据库 分布式数据库 oceanbase OceanBase 开源 OceanBase 社区版

网络安全小白别拜师了,求人不如求己

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

filecoin挖矿教程?filecoin挖矿收益如何?

区块链 分布式存储 IPFS filecoin挖矿 filecoin收益

比特币矿池如何触底反弹?比特币矿企的未来出路在哪里?

CECBC

强化学习中,Q-Learning与Sarsa的差别有多大?

行者AI

强化学习

Flutter 安卓 Platform 与 Dart 端消息通信方式 Channel 源码解析

工匠若水

flutter android 8月日更

学生管理系统(作业)

Geek_a772a7

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