写点什么

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

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

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

关注

评论

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

云栖大会|盛宴之下,共赴一场视频云的进化论

阿里云CloudImagine

阿里云 音视频 WebRTC 视频云 云栖大会

性能加速最高可达28倍!这个NLP工具包不容错过

百度开发者中心

预训练模型 NLP 大模型

MySQL索引总结:14张图+代码+文字

Java MySQL 数据库 架构 后端

主数据与主数据管理(数据治理)

KoLee

数据治理 数字化 主数据管理 主数据

Python 的 sum():Pythonic 的求和方法

华为云开发者联盟

Python 列表 元组 Pythonic 求和

Apache ShardingSphere 在京东白条场景的落地之旅

SphereEx

开源 数据架构 架构设计 ShardingSphere SphereEx

Python代码阅读(第37篇):获取两个列表中相同的元素

Felix

Python 编程 Code Programing 阅读代码

三面阿里,有惊无险成功拿到offer定级P7,只能说是真的难

Java 编程 java架构

一篇神文让你"一夜封神"Mycat中间件(最详细讲解)

程序员小呆

Java 程序员 架构师 mycat

第 17 章 -《Linux 一学就会》- Linux计划任务与日志的管理

学神来啦

Linux 运维 linux学习 linux云计算 linux基础

亿级流量架构演进实战 | 从零构建亿级流量API网关 02

松然聊技术

亿级架构

☕【Java技术指南】「编译器专题」深入分析探究“静态编译器”(JAVA\IDEA\ECJ编译器)是否可以实现代码优化?

码界西柚

Java 编译器 静态编译器 10月月更

分布式缓存技术

黄敏

Alibaba最新神作!耗时182天肝出来的1015页分布式全栈手册太香了

编程 程序员 IT 计算机 java

遭 GitHub 连夜封杀下架?被泄露的阿里内部 Java 面试手册到底有多强?

收到请回复

Java 面试 阿里 大厂Offer

一篇神文让你深入理解计算机系统——学习笔记

程序员小呆

Java 程序员 架构师 计算机

太绝了吧! 终于有人能把TCP/IP 协议讲的明明白白了

程序员 架构 面试 后端 java

元宇宙NFT区块链游戏系统开发

211本+985硕+计算机专业投面百度,坐等一周迎来三面,已拿offer

Java 学习 程序员 架构 大厂面试

量化模拟线上流量实践

FunTester

性能测试 接口测试 测试框架 FunTester 线上流量

百亿级系统架构首公开!阿里这份300多页的设计实录你还没有吗?

Java 程序员 架构 面试 后端

接连三次霸榜GitHub,这个国产GitHub项目是真的强...

百度开发者中心

最佳实践 方法论 百度飞桨 开源技术

2021Flexera云报告:企业积极拥抱多云,但云上成本仍然居高不下

行云管家

区块链 云计算 企业上云 上云

数据上报那些事

神策技术社区

数据 神策数据

容器化 | ClickHouse Operator 原理解析

RadonDB

数据库 Kubernetes Clickhouse

面试官提问:如何通过sql方式将数据库表行转列?

Java 数据库 sql 面试 后端

亿级流量架构演进实战 | 从零构建亿级流量API网关 01

松然聊技术

亿级架构

阿里技术官耗时半年总结出“满分”架构笔记,拿捏分布式到微服务

进击的王小二

Java 架构 分布式 微服务

优酷鸿蒙开发实践 | 鸿蒙卡片开发

阿里巴巴终端技术

ios android HarmonyOS 优酷 移动端

涨薪60%,从美团干到阿里p7,这份Github上的面试笔记把所有Java知识都写出来了

Java 程序员 架构 面试 后端

架构师一定要看!微服务设计的四个原则

Java 程序员 架构 面试 后端

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