随着互联网的发展,互联网企业的业务也在不断的飞速发展,进而导致系统的架构也在不断的发生着变化。总体来说,系统的架构大致经历了:单体应用架构—>垂直应用架构—>分布式架构—>SOA架构—>微服务架构的演变。当然,很多互联网企业的系统架构已经向Service Mesh(服务化网格)演变。今天,我们就一起来聊聊关于系统架构的演变这个话题。

单体应用架构

在企业发展的初期,一般公司的网站流量都比较小,只需要一个应用,将所有的功能代码打包成一个服务,部署到服务器上就能支撑公司的业务。这样也能够减少开发、部署和维护的成本。

比如,大家都很熟悉的电商系统,里面涉及的业务主要有:用户管理、商品管理、订单管理、支付管理、库存管理、物流管理等等模块,初期我们会将所有模块写到一个Web项目中,然后统一部署到一个Web服务器中。

这种架构特点有其优点:

  • 架构简单,项目开发和维护成本低。

  • 所有项目模块部署到一起,对于小型项目来说,维护方便。

但是,其缺点也是比较明显的:

  • 所有模块耦合在一起,虽然对于小型项目来说,维护方便。但是,对于大型项目来说,却是不易开发和维护的。

  • 项目的各模块之前过于耦合,如果一旦有一个模块出现问题,则整个项目将不可用。

  • 无法针对某个具体模块来提升性能。

  • 无法对项目进行水平扩展。

正是由于单体应用架构存在着诸多的缺点,才逐渐演变为垂直应用架构。接下来,我们就来看看垂直应用架构。

垂直应用架构

随着企业业务的不断发展,发现单节点的单体应用不足以支撑业务的发展,于是企业会将单体应用部署多份,分别放在不同的服务器上。但是,此时会发现不是所有的模块都会有比较大的访问量。如果想针对项目中的某些模块进行优化和性能提升,此时对于单体应用来说,是做不到的。于是乎,垂直应用架构诞生了。

垂直应用架构,就是将原来一个项目应用进行拆分,将其拆分为互不想干的几个应用,以此来提升系统的整体性能。

这里,我们同样以电商系统为例,在垂直应用架构下,我们可以将整个电商项目拆分为:电商交易系统、后台管理系统、CMS管理系统等。

我们将单体应用架构拆分为垂直应用架构之后,一旦访问量变大,我们只需要针对访问量大的业务增加服务器节点即可,无需针对整个项目增加服务器节点了。

这种架构的优点:

  • 系统进行了拆分,可根据不同系统的访问情况,有针对性的进行优化。

  • 能够实现应用的水平扩展。

  • 各系统能够分担整体访问的流量,解决了并发问题。

  • 一个系统发生了故障,不应用其他系统的运行情况,提高了整体的容错率。

这种架构的缺点:

  • 拆分后的各系统之间相对比较独立,无法进行互相调用。

  • 各系统难免存在重叠的业务,会存在重复开发的业务,后期维护比较困难。

分布式架构

我们将系统演变为垂直应用架构之后,当垂直应用越来越多,重复编写的业务代码就会越来越多。此时,我们需要将重复的代码抽象出来,形成统一的服务供其他系统或者业务模块来进行调用。此时,系统就会演变为分布式架构。

在分布式架构中,我们会将系统整体拆分为服务层和表现层。服务层封装了具体的业务逻辑供表现层调用,表现层则负责处理与页面的交互操作。

这种架构的优点:

  • 将重复的业务代码抽象出来,形成公共的访问服务,提高了代码的复用性。

  • 可以有针对性的对系统和服务进行性能优化,以提升整体的访问性能。

这种架构的缺点:

系统之间的耦合度变高,调用关系变得复杂,难以维护。

SOA架构

在分布式架构下,当部署的服务越来越多,重复的代码就会越来越多,对于容量的评估,小服务资源的浪费等问题比较严重。此时,我们就需要增加一个统一的调度中心来对集群进行实时管理。此时,系统就会演变为SOA(面向服务)的架构。

这种架构的优点:

使用注册中心解决了各个服务之间的服务依赖和调用关系的自动注册与发现。

这种架构的缺点:

  • 各服务之间存在依赖关系,如果某个服务出现故障可能会造成服务的雪崩(关于穿透、击穿和雪崩的问题,小伙伴们可以参见我之前写的《【高并发】面试官:讲讲什么是缓存穿透?击穿?雪崩?如何解决?》一文)。

  • 服务之间的依赖与调用关系复杂,测试部署的困难比较大。

微服务架构

随着业务的发展,我们在SOA架构的基础上进一步扩展,将其彻底拆分为微服务架构。在微服务架构下,我们将一个大的项目拆分为一个个小的可以独立部署的微服务,每个微服务都有自己的数据库。

这种架构的优点:

  • 服务彻底拆分,各服务独立打包、独立部署和独立升级。

  • 每个微服务负责的业务比较清晰,利于后期扩展和维护。

  • 微服务之间可以采用REST和RPC协议进行通信。

这种架构的缺点:

  • 开发的成本比较高。

  • 涉及到各服务的容错性问题。

  • 涉及到数据的一致性问题。

  • 涉及到分布式事务问题(小伙伴们可以参见我后续会持续更新的【分布式事务】专题)。

系统由单体架构到微服务架构到底是如何演进的?相关推荐

  1. 系统架构的演变过程(单体应用架构、垂直应用架构、分布式SOA架构、微服务架构)

    文章目录 系统架构演变 单体应用架构 垂直应用架构 分布式SOA架构 什么是SOA 微服务架构 分布式SOA架构和微服务架构对比 系统架构演变 随着互联网的发展,网站应用的规模不断扩大,常规的应用架构 ...

  2. 漫谈单体架构与微服务架构(上):单体架构

    最近微服务架构特别火爆,就跟人工智能.区块链一样,软件架构设计如果不提微服务,感觉就像是与世界先进的架构风格和开发技术脱了节似的,各方各面都无法彰显高大上的气质. 本来再打算使用一套系列文章来讨论微服 ...

  3. java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...

    原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...

  4. 单体应用架构和微服务架构的区别

    一.单体应用架构概念 一个归档包(可以是JAR.WAR.EAR或其它归档格式)包含所有功能的应用程序,通常称为单体应用.       而架构单体应用的方法论,就是单体应用架构. 二.单体架构示意图 三 ...

  5. 分布式与微服务——Iaas,Paas和Saas、单体应用和缺点、微服务概念、传统 分布式 SOA 架构与微服务架构的区别、微服务实战、什么是RPC、CAP定理和BASE理论、唯一ID生成、实现分布式

    文章目录 1-什么是Iaas,Paas和Saas 一 IaaS基础设施服务 二 paas平台即服务 三saas软件即服务 四 总结 2-单体应用和缺点 一 单体应用 二 单体应用的缺陷 3-微服务概念 ...

  6. 从单体结构到微服务架构的转变,微服务入门

    单体架构 VS 微服务架构 1.1从单体架构说起 一个工程对应一个归档包(war),这个war包 包含了该工程的所有功 能.我们成为这种应用为单体应用,也就是我们常说的单体架构(一个 war包打天下) ...

  7. 单体应用、SOA架构、微服务架构的对比

    目录 前言: 单体架构 SOA架构 微服务架构 前言: 随着近年来云技术的发展,越来越多的用户选择使用云技术来代替传统的IT基础设施.在云技术发展的早期,业界的关注点集中在虚拟化.分布式.存储等laa ...

  8. 单体架构-->SOA架构-->微服务架构

    上诉架构图采用了分层架构,按照调用顺序,从上到下为表示层.业务层.数据访问(DAO)层.DB层.表示层负责用户体验,业务层负责业务逻辑,包括电影.订单和用户三个模块.数据访问层负责DB层的数据存取,实 ...

  9. nodejs微服务:单体架构与微服务架构

    单体架构 单体架构在中小企业内部用的是非常多的,就是完整独立的web服务 当业务不复杂,团队规模不大的时候,单体架构比微服务架构具有更高的生产率 1 ) 单体架构的程序部署在单台服务器 这种架构是目前 ...

  10. 从单体架构到微服务架构的拆分

    目录 一.概述 二.微服务拆分 三.微服务项目架构图 一.概述 单体架构.分布式架构和微服务架构是三种不同的软件架构模式,它们各有特点和适用场景. 单体架构(Monolithic Architectu ...

最新文章

  1. python笔记基础
  2. iOS 自动引用计数和内存泄露
  3. ORACLE11G自动维护任务简析
  4. Android学习之碎片与活动之间的通信
  5. mysql小鲸鱼_杀死一只小鲸鱼
  6. JavaScript:class类的实现方式及特点
  7. IOS学习之斯坦福大学IOS开发课程笔记(第六课)
  8. (一)区块链的共识算法:整体介绍 及 分叉 的通俗讲解
  9. 图解设计模式-State模式
  10. MCGS触摸屏通过MODBUS通讯速度控制台达B2伺服参数,有触摸屏源程序和伺服设定参数,实际的项目应用的。
  11. 数据结构与算法分析Java语言描述 第三版 课后习题 练习 答案
  12. C#ADO连接修改Paradox表时“操作必须使用一个可更新的查询”错误的处理办法
  13. 华为云C6系列服务器,真实评价华为云c6s和c6怎么样-配置区别不大
  14. FileNotFoundException(io流文件拒绝访问)
  15. 多目标优化问题和遗传算法学习笔记
  16. Redis工具类封装RedisUtils
  17. android系统支持4T硬盘吗,电脑是否有可能,支持3T硬盘,但不支持4T硬盘
  18. 华为鸿蒙P60(art)系列,Mate X3安装谷歌服务框架,安装Google谷歌Play商店,harmonyos3.1
  19. Latex入门教程用法笔记(结尾附完整示例)
  20. ELECTRONICON E62-C58-102E40

热门文章

  1. redis key命名规范_Redis几个实战经验积累
  2. 如何从 Ubuntu 中彻底卸载 Google Chrome
  3. 一条命令安装Windows Subsystem for Linux
  4. mysql的条件替换_MySQLwhere条件替换疑问?
  5. java运行在用户态_理解Linux用户态和内核态
  6. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)
  7. 解题报告:luogu P2341 受欢迎的牛(Tarjan算法,强连通分量判定,缩点,模板)
  8. 【算法】并查集刷题总结
  9. 函数依赖与 Armstrong公理
  10. 前端入门(雨滴特效,css)