相反,应该采取逐步迁移单体式应用的策略,通过逐步生成微服务新应用,与旧的单体式应用集成,随着时间推移,单体式应用在整个架构中比例逐渐下降直到消失或者成为微服务架构一部分。这个策略有点像在高速路上限速到 70 迈对车做维护,尽管有挑战,但是比起重写的风险小很多。

Martin Fowler 将这种现代化策略成为绞杀(Strangler)应用,名字来源于雨林中的绞杀藤(strangler vine),也叫绞杀榕 (strangler fig)。绞杀藤为了爬到森林顶端都要缠绕着大叔生

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

长,一段时间后,树死了,留下树形藤。这种应用也使用同一种模式,围绕着传统应用开发了新型微服务应用,传统应用会渐渐退出舞台。

我们来看看其他可行策略。

策略 1——停止挖掘

Law of Holes 是说当自己进洞就应该停止挖掘。对于单体式应用不可管理时这是最佳建议。换句话说,应该停止让单体式应用继续变大,也就是说当开发新功能时不应该为旧单体应用添加新代码,最佳方法应该是将新功能开发成独立微服务。如下图所示:

除了新服务和传统应用,还有两个模块,其一是请求路由器,负责处理入口(http)请求,有点像之前提到的 API 网关。路由器将新功能请求发送给新开发的服务,而将传统请求还发给单体式应用。

另外一个是胶水代码(glue code),将微服务和单体应用集成起来,微服务很少能独立存在,经常会访问单体应用的数据。胶水代码,可能在单体应用或者为服务或者二者兼而有之,负责数据整合。微服务通过胶水代码从单体应用中读写数据。

微服务有三种方式访问单体应用数据:

  • 换气单体应用提供的远程 API
  • 直接访问单体应用数据库
  • 自己维护一份从单体应用中同步的数据

胶水代码也被称为容灾层(anti-corruption layer),这是因为胶水代码保护微服务全新域模型免受传统单体应用域模型污染。胶水代码在这两种模型间提供翻译功能。术语 anti-corruption layer 第一次出现在 Eric Evans 撰写的必读书 Domain Driven Design,随后就被提炼为一篇白皮书。开发容灾层可能有点不是很重要,但却是避免单体式泥潭的必要部分。

将新功能以轻量级微服务方式实现由很多优点,例如可以阻止单体应用变的更加无法管理。微服务本身可以开发、部署和独立扩展。采用微服务架构会给开发者带来不同的切身感受。

然而,这方法并不解决任何单体式本身问题,为了解决单体式本身问题必须深入单体应用做出改变。我们来看看这么做的策略。

策略 2——将前端和后端分离

减小单体式应用复杂度的策略是讲表现层和业务逻辑、数据访问层分开。典型的企业应用至少有三个不同元素构成:

  1. 表现层——处理 HTTP 请求,要么响应一个 RESTAPI 请求,要么是提供一个基于 HTML 的图形接口。对于一个复杂用户接口应用,表现层经常是代码重要的部分。

  2. 业务逻辑层——完成业务逻辑的应用核心。

  3. 数据访问层——访问基础元素,例如数据库和消息代理。

在表现层与业务数据访问层之间有清晰的隔离。业务层有由若干方面组成的粗粒度(coarse-grained)的 API,内部包含了业务逻辑元素。API 是可以将单体业务分割成两个更小应用的天然边界,其中一个应用是表现层,另外一个是业务和数据访问逻辑。分割后,表现逻辑应用远程调用业务逻辑应用,下图表示迁移前后架构不同:

单体应用这么分割有两个好处,其一使得应用两部分开发、部署和扩展各自独立,特别地,允许表现层开发者在用户界面上快速选择,进行 A/B 测试;其二,使得一些远程 API 可以被微服务调用。

然而,这种策略只是部分的解决方案。很可能应用的两部分之一或者全部都是不可管理的,因此需要使用第三种策略来消除剩余的单体架构。

策略 3——抽出服务

第三种迁移策略就是从单体应用中抽取出某些模块成为独立微服务。每当抽取一个模块变成微服务,单体应用就变简单一些;一旦转换足够多的模块,单体应用本身已经不成为问题了,要么消失了,要么简单到成为一个服务。

排序那个模块应该被转成微服务

一个巨大的复杂单体应用由成十上百个模块构成,每个都是被抽取对象。决定第一个被抽取模块一般都是挑战,一般最好是从最容易抽取的模块开始,这会让开发者积累足够经验,这些经验可以为后续模块化工作带来巨大好处。

转换模块成为微服务一般很耗费时间,一般可以根据获益程度来排序,一般从经常变化模块开始会获益最大。一旦转换一个模块为微服务,就可以将其开发部署成独立模块,从而加速开发进程。

将资源消耗大户先抽取出来也是排序标准之一。例如,将内存数据库抽取出来成为一个微服务会非常有用,可以将其部署在大内存主机上。同样的,将对计算资源很敏感的算法应用抽取出来也是非常有益的,这种服务可以被部署在有很多 CPU 的主机上。通过将资源消耗模块转换成微服务,可以使得应用易于扩展。
用抽取出来也是非常有益的,这种服务可以被部署在有很多 CPU 的主机上。通过将资源消耗模块转换成微服务,可以使得应用易于扩展。

从单体式架构迁移到微服务架构,简述java程序的运行原理相关推荐

  1. 微服务实战(七):从单体式架构迁移到微服务架构

    http://dockone.io/article/1266 希望读者通过本系列文章对微服务优缺点有一个比较好的理解,以及何时使用这种架构.也许微服务架构比较适合你的应用.也许你正在开发一个大型.复杂 ...

  2. 微服务实践(七):从单体式架构迁移到微服务架构

    迁移到微服务综述 迁移单体式应用到微服务架构意味着一系列现代化过程,有点像这几代开发者一直在做的事情,实时上,当迁移时,我们可以重用一些想法. 一个策略是:不要大规模(big bang)重写代码(只有 ...

  3. 从单体式架构迁移到微服务架构,妈妈再也不用担心我找工作了!

    前言 今天的分享主要是讲下这个 redis,什么是缓存雪崩.穿透和击穿.这三个技术问题是我们平时开发工作中和面试过程中,必须要会的知识点,因为目前的互联网系统没有几个不需要用到缓存的,只要用到缓存的话 ...

  4. 从单体式架构迁移到微服务架构,看这篇文章就行了!

    前言 又到一年金九银十之际. Java作为目前用户最多,使用范围最广的软件开发技术之一. Java的技术体系主要由支撑Java程序运行的虚拟机,提供各开发领域接口支持的Java,Java编程语言及许多 ...

  5. 走进Java架构!从单体式架构迁移到微服务架构,全网疯传

    前言 不知道大家有没有这样的经历,明明感觉自己这个技术掌握的还行,能写在简历里肯定是有点自信的,但是被面试官一问,就感觉啥也不是 当我从面试的大楼里出来的时候脑袋里还是昏昏沉沉的,你压根不知道我经历了 ...

  6. 单体 soa 微服务 区别_漫谈何时从单体架构迁移到微服务?

    面对微服务如火如荼的发展,很多人都在了解,学习希望能在自己的项目中帮得上忙,当你对微服务的庐山真面目有所了解后,接下来就是说服自己了,到底如何评估微服务,什么时候使用微服务,什么时间点最合适,需要哪些 ...

  7. 从单体架构迁移到微服务

    随着微服务架构的持续火热,网络上针对微服务和单体架构的讨论也是越来越多.去年的时候,社区更多的关注点是在二者的区别以及优缺点辨析上,而今年,越来越多的人开始关注如何从单体架构迁移到微服务上.毋庸置疑, ...

  8. 单体架构迁移到微服务,8个关键的思考、实践和经验

    单体架构迁移到微服务,8个关键的思考.实践和经验 转自:http://www.open-open.com/lib/view/open1470917801705.html 随着微服务架构的持续火热,网络 ...

  9. 从单体架构迁移到微服务,8个关键的思考、实践和经验

    随着微服务架构的持续火热,网络上针对微服务和单体架构的讨论也是越来越多.去年的时候,社区更多的关注点是在二者的区别以及优缺点辨析上,而今年,越来越多的人开始关注如何从单体架构迁移到微服务上.毋庸置疑, ...

  10. 【微服务架构】在微服务架构中最小化设计时间耦合

    理查森:我是克里斯·理查森.欢迎来到我关于在微服务架构中最小化设计时耦合的演讲.在这次演讲中,我将回答三个问题.什么是设计时耦合?这会造成什么问题?我们如何设计松散耦合的服务?这些年来我做了一些事情. ...

最新文章

  1. 人工智能开放平台建设火热,AI发展未来可期
  2. 聊聊那些令人惋惜的车模
  3. java static关键字_好程序员Java教程分享static关键字的理解
  4. 本地存储与云存储方案价值对比—Vecloud
  5. PHP面试之二:高并发与大数据
  6. ASP.NET 應用程式的安全性模型
  7. Spring MVC : 概念模型 HandlerMethod(转载)
  8. python可迭代对象,迭代器,生成器
  9. java调用Linux mahout,Mahout算法调用展示平台2.1
  10. 记录——《C Primer Plus (第五版)》第八章编程练习第八题
  11. PostgreSQL主要优势
  12. 【逗老师带你学IT】PRTG、Zabbix通过API监控深信服VDC和VMP云桌面运行状态
  13. Java2022面试题集锦
  14. microhard PICO900(P900)电台配置
  15. 学生专用计算机负n次方问的按,学生专用计算器怎么开N次方
  16. 【React】Mobx
  17. Oracle 自定义数据类型Type
  18. LED 流水灯与闪烁
  19. 微信公众平台java开发详解
  20. 关于Windows 7下的DEP(数据执行保护)

热门文章

  1. 自定义vscode插件路径及离线安装VSIX说明
  2. 51nod1521 一维战舰
  3. 最全QQ盗号手法分析,全面防御QQ盗号
  4. Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap
  5. office转换pdf [doc,docx,xls,xlsx]
  6. linux查看xfreedrdp指令,windows和linux的远程桌面
  7. 第二重要极限公式推导过程_我们来更自然地推导泰勒公式!
  8. BZOJ 4556 [Tjoi2016Heoi2016]字符串
  9. python中sqrt的意思_python中sqrt是什么意思
  10. 基于腾讯云播放器封装的Flutter Video Player插件