当前位置: 首页 > news >正文

微服务项目架构演变过程

接上一篇了 微服务项目常用术语 之后,这次来了解一下微服务项目架构的演变过程。

概括

业界流传这么一句话:大型项目是演变而来的

很正确,项目成立之初很多业务并没有确定,需要根据需求变化,改进项目。经典例子:淘宝体系演变,有兴趣的同学可以找一下<<淘宝技术这10年>>看看,了解下淘宝如何从最初的PHP体系演变成现在的Java体系。

当今,随着web2.0移动互联网的兴起,用户量的暴涨,各类网站应用的、各种APP规模也实现跨越式增长,随之而来的是各种高并发,海量数据处理的头疼问题,此时的系统架构为了使用时代,也被迫推陈出新。从互联网早期到现在,系统架构大体经历了下面几个过程:

单体应用架构--------垂直应用架构--------分布式架构--------SOA架构--------微服务架构

后续围绕这些架构模式讲解各自的优缺点。

单体应用架构

项目初期,一般的网站应用用户量很少,产生的流量也很少,项目所有功能完全可以部署在一起。减少开发、部署和维护成本。最关键是硬件成本。

以电商系统为例子:一个完整电商系统肯定包含:用户管理,商品管理,订单管理,物流管理等不同模块,如果按照单体应用架构方式搭建项目如下:

 

优点:

  • 项目架构简单,小型项目的话, 开发成本低

  • 项目部署在一个节点上(一只猫即可), 维护方便

缺点:

  • 功能集中,需求复杂后不易开发和维护

  • 项目模块之间紧密耦合,单点容错率低

  • 无法对对某个模块进行水平扩展

垂直应用架构

上面单体架构开发维护是爽了,但当用户量上来,各种问题会接踵而来,最明显问题就是访问速度下降。这时我们可能想到的方案有2种:

1>砸钱垂直扩展,提高服务器性能

2>项目集群,提高并发

方案1:短时间内可行,长期来说是个坑,原因:服务器硬件有瓶颈,无法无限提升

方案2:可行,当不是最佳,存在资源分配问题。

 

 

 集群之后,所有代码一式多份,所有功能模块都平等占用资源。但实际情况是用户更关心商品是否有货,下单是否通畅,也就是说电商项目的流量集中的商品管理,订单管理上而非其他边缘模块,此时就存在核心模块资源不足,边缘模块资源过剩的问题。那怎么办呢?垂直应用架构就应运而生啦。

垂直应用架构的核心是啥:拆分子项目  

对项目进行功能划分,业务功能紧密的模块归类一个子项目,互不相干划分成另外一个模块。还是以电商系统为例子

1>电商系统(用户管理 商品管理 订单管理)

2>后台系统(用户管理 订单管理 客户管理)

3>CMS系统(广告管理 营销管理)

 后续,当电商系统需要优化时,可以垂直扩展(提高服务器性能),也可以水平扩展(集群)

优点:

  • 项目拆分流量做了分流,解决了并发问题,同时可以对模块进行针对性优化

  • 一个子项目出问题不会影响到其他子项目,提高容错率

缺点:

  • 子项目间相互独立, 无法进行相互调用

  • 子项目间相互独立, 存在重复造轮子问题

分布式架构

上面垂直架构项目应对普通业务就差不多了,但是,当拆分后的子项目越来越多之后,重复的业务代码也会增多,这时就需要考虑一下要不要将重复的代码抽取出来,做成一个统一对外提供服务的子项目呢?有了这想法,那新的的架构模式就出来,分布式系统架构。

分布式架构核心:一样是拆分

分布式的拆分与跟垂直架构拆分不一样,垂直架构拆分维度依据是:业务功能的独立性,分布式的拆分维度依据是:业务重用性

 分布式系统架构。它将把项目拆分成表现层和服务层两个部分,服务层中包含业务逻辑。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。

优点

  • 抽取公共的功能为服务层,提高代码复用性

  • 可以针对不同服务进行垂直与水平扩展

  • 非常建立自动扩缩容机制,提高系统可用性

缺点

  • 系统间耦合度变高,调用关系错综复杂,难以维护

SOA架构

在分布式架构模式下,代码重用性得到保证,但是也引入新的问题:每个服务部署在不同的服务器中,如果需要交互该怎么办?如果某个服务宕机了,其他服务怎么感知?增加新服务器,怎么快速加入服务集群等。

上述问题,其实上面问题,归类起来就是一个问题:服务管理问题。如何做好服务管理呢?SOA架构引入如资源(服务)调度和助理中心,让它实现服务的统一管理。

 

 服务注册中心负责所有服务ip/端口管理

优点:

  • 使用注册中心解决了服务间调用关系的自动调节

缺点:

  • 服务间会有依赖关系,一旦某个环节出错会影响较大( 服务雪崩 )

  • 服务关系复杂,运维、测试部署困难

微服务架构

上面的SOA架构还是存在问题,一个服务宕机会影响所有依赖该服务的其他服务,同时后期维护较为麻烦,那有没有更好的架构方式呢?答案是yes:微服务架构

微服务架构可以认为是SOA架构的升级版,对服务做了更细致的拆分。

优点

  • 服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展

  • 微服务之间采用RESTful等轻量级Http协议相互调用

缺点

  • 分布式系统开发的技术成本高(容错、分布式事务等)

到这项目架构演变就差不多了,可以还有朋友说微服务不是还有缺点么?不是应该继续演变么?其实到这就可以了,没有完美的架构,综合考虑满足当前业务即可,这些缺点就是采用微服务架构必须承受的代价。

相关文章:

  • 18.双线性插值缩放算法的matlab与FPGA实现
  • Docker三剑客从0到1
  • 【C语言习题】12.扫雷游戏
  • 地平线X3开发板配置wifi调试
  • 5G技术相关部分图解
  • 数据架构简介
  • JAVA调用lua脚本
  • 【Docker 的安装:centos】
  • uniapp android 原生插件开发-测试流程
  • FL Studio Producer Edition2024中文进阶版Win/Mac
  • Unity接入SQLite (三):C#封装SQL命令
  • 【flask+python】利用魔术方法,更优雅的封装model类
  • 搭建线性网络对MNIST数据集进行训练、测试,并且预测图片
  • 【HTML+CSS】静态网页设计期末大作业——我的家乡无锡印象
  • @Cacheable和@CacheEvict的学习使用
  • 宝塔面板安装部署Vue项目,Vue项目从打包到上线
  • 《MLB棒球创造营》:走近棒球运动·迈阿密马林鱼队
  • 【设计模式】行为型模式-第 3 章第 3 讲【解释器模式】
  • 【云原生之Docker实战】使用Docker部署pdf2htmlEX文件转换工具
  • Observability:集群监控 (一) - Elastic Stack 8.x
  • 【maven】什么是坐标(依赖)继承与模块、web项目启动访问
  • Solidity 基础知识
  • CDH大数据平台 18Cloudera Manager Console之Sentry权限kafka测试(markdown新版)
  • 【ROS】如何在ROS中使用anaconda虚拟环境?
  • 什么是 PowerShell?
  • select......for update会锁表还是锁行?
  • 信安软考 第十五章 网络安全主动防御技术与应用
  • 面试官:深度不够,建议回去深挖
  • 自监督学习在语音和影像上的应用
  • C++中GDAL批量读取大量栅格遥感影像文件并生成各像元在不同文件中数值的时间序列数组
  • 小学生python游戏编程7----角色精灵定义
  • 【vulfocus】tomcat文件上传 (CVE-2017-12615)