为什么选择SpringCloud

2023-11-06

SpringCloud的诞生:
  1. SpringCloud是集成了众多开源的框架,利用SpringBoot的开发便利性实现服务治理,服务注册与发现,负载均衡,数据监控,REST API发布方式等,基本囊括了分布式框架所需要的所有功能。是一套易开放.易部署.易维护的分布式开发工具包。
(一):首先我们来了解下从单体架构到微服务的发展历程
架构的演变过程:

单体架构→垂直架构→SOA面向服务架构→微服务架构

m

  1. 单体架构(巨石型应用)

![单体架构电子商城架构图](https://images-1257029624.cos.ap-chongqing.myqcloud.com/单体架构.jpg “电子商城简体架构图”")

   当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点的成本。此时,用于简化增删改查工作量的**数据访问框架(ORM)**是关键

特点:
  1. 所有的功能集成在一个项目工程中。
  2. 所有的功能打成war包部署到服务器上运行
  3. 通过部署应用集群和数据库集群来提高系统的性能。
优点:
  1. 项目架构太简单,前期开发成本低,周期短,小型企业的首选。
  2. IDE就是专门为开发单个应用设计的,容易测试—在本地就可以启动完整的系统,容易部署。
缺点:
  1. 全部功能集成在一个工程中,对于大型项目不易于开发,扩展及其维护。

  2. 系统性能扩展只能通过扩展集群结点,成本高,有瓶颈。

  3. 垂直架构

![垂直架构电子商城架构图](https://images-1257029624.cos.ap-chongqing.myqcloud.com/垂直架构图 “电子商城垂直架构简体图”")

   当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆分成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的**web框架(MVC)**是关键

特点:
  1. 以单体架构规模的项目为单位进行垂直划分项目即将一个大项目才分成一个一个单体结构项目
  2. 项目与项目之间存在数据冗余,耦合性较大。就比如上面一幅图两边都存在用户信息
  3. 项目之间接口多为数据同步功能。
优点:

1.涵盖了传统架构的优点,另外项目不会无限扩大,技术栈可扩展(不同的系统可用不同的语言编写)

缺点:
  1. 功能集中在一个项目中,不利于开发,扩展,维护。

  2. 系统扩张只能通过集群的方式。

  3. 项目之间功能冗余,数据冗余,耦合性强。

  4. SOA架构(面向服务架构)

![SOA架构图](https://images-1257029624.cos.ap-chongqing.myqcloud.com/SOA架构图.png “SOA架构图简体图”")

   当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的**分布式服务框架(RPC)**是关键。
SOA也是基于分布式架构演变过来的,SOA架构代表面向服务架构,俗称服务化,可以理解为面向与业务逻辑层。将共同的业务代码进行抽取出来的,提供给其他接口进行调用,服务与服务之间通讯采用rpc远程调用技术。

  • 服务的概念:将共同的业务逻辑进行拆分,拆分成独立的一个项目进行部署,没有视图层。
  • RPC远程调用技术框架: httpclient,springcloud,dubbo,grpc核心底层socket技术或者netty实现。
特点:
  1. 基于SOA的架构思想将重复公用的功能抽取组件,以服务的方式给各个系统提供服务。
  2. 各个项目 (系统) 与服务之间采用webservice,rpc等方式进行通信。
  3. ESB企业服务总线作为项目与服务之间通信的桥梁。
  4. webservice底层是采用Http协议+XML(SOAP)RPC是远程调用技术,两个或者多个应用实现远程调用。
优点:
  1. 将重复的功能抽取为服务,提高开发效率,提高系统可重用性,可维护性。
  2. 可以针对不同服务的特点制定集群及优化方案。
  3. 采用ESB减少系统的的接口耦合。
缺点:
  1. 系统与服务的界限模糊,不利于开发及维护。

  2. 虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。

  3. 抽取的服务的粒度过大,系统与服务之间耦合性高。

  4. 微服务架构(流动计算架构)

![微服务架构图](https://images-1257029624.cos.ap-chongqing.myqcloud.com/微服务架构图.jpg “微服务架构图简体图”")

   当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的**资源调度和治理中心(SOA)**是关键。

既然有了SOA为什么会出现微服务架构呢?

  • SOA架构有局限性,就是所有的接口都需要走ESB,如果不同的编程语言开发子系统,而这个编程语言对于某种RCP协议支持是最友好的,而ESB规则限定其只能使用ESB的规定协议。
  • SOA架构与微服务架构对比图:

![SOA与微服务架构比较表图](https://images-1257029624.cos.ap-chongqing.myqcloud.com/微服务与SOA的比较.png “SOA与微服务架构比较表图”")

特点:
  1. 将系统服务层完全独立出来,并将服务层抽取为一个一个的微服务。
  2. 微服务遵循单一原则。
  3. 微服务之间采用RESTful等轻量协议传输。
优点:
  1. 服务拆分粒度更细,有利于资源重复利用,提高开发效率。
  2. 可以更加精准的制定每个服务的优化方案,提高系统可维护性。
  3. 微服务架构采用去中心化思想,服务之间采用RESTful等轻量协议通信,相比ESB更加轻便。
  4. 使用与互联网时代,产品迭代周期更短。
缺点:
  1. 微服务过多,服务治理成本高,不利于系统维护。
  2. 分布式系统开发的技术成本高(容错,分布式事务等),对团队挑战性大。

那我们为什么要使用SpringCloud呢?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么选择SpringCloud 的相关文章

随机推荐

  • 【NOI2018模拟3.26】Cti

    Description 有一个 n m 的地图 地图上的每一个位置可以是空地 炮塔或是敌人 你需要操纵炮塔消灭敌人 对于每个炮塔都有一个它可以瞄准的方向 你需要在它的瞄准方向上确定一个它的攻击位置 当然也可以不进行攻击 一旦一个位置被攻击
  • SpringBoot集成手机验证码业务(榛子云短信服务)

    一 手机验证码的作用 举个例子 如果你开发了一个系统 那这个系统肯定会有登录功能对吧 那如果说你的密码忘记了呢 这个时候我们的解决方式是 1 联系管理员 2 再注册一个 emmm 那我以前的资料就没了呀 3 对于管理员自己而言 手动修改数据
  • 简单的介绍一下:柔性数组

    对于柔性数组 其实这个是在如今的大学生书本上是很难能找到的 原因在于 笔者现在就是大学生一枚 但是在C语言的书本上没有涉及到柔性数组的部分 经查略资料 我们可以找到 在如今的C语言中 C99规定 结构体中允许最后一个元素是未知大小的数组 这
  • 微信小程序支付后端逻辑

    小程序报名 生成订单 public function make order if IS POST data openid I POST openid data total I POST data total data crsNo W dat
  • SSM小技巧(一)、Controller中互相调用session中存储的内容

    首先 你需要在一个Controller中往session中存内容 取的名字必须含有大写字母 虽然博主也不清楚为什么 如果有知道的人请一定要通知博主 博主将感激不尽 Controller SessionAttributes Save 将Mod
  • LLM微调

    下面我只是分析讲解下这些方法的原理以及具体代码是怎么实现的 不对效果进行评价 毕竟不同任务不同数据集效果差别还是挺大的 文章目录 0 hard prompt soft prompt区别 1 Prefix Tuning 2 Prompt Tu
  • 实例 :教你使用简单神经网络和LSTM进行时间序列预测(附代码)

    翻译 张玲 校对 丁楠雅 本文约1500字 建议阅读5分钟 作者基于波动性标准普尔500数据集和Keras深度学习网络框架 利用python代码演示RNN和LSTM RNN的构建过程 便于你快速搭建时间序列的预测模型 图片来源 Pixaba
  • Gradle是什么

    以下总结作为本人学习笔记使用 Gradle是一个开源的自动构建工具 可以作为android studio工程的依赖管理和打包工具 包括三方库和jar包的依赖和链接 java和res等资源的编译和打包 1 在gradle之前 android的
  • 【JavaScript 编程语言】简介JavaScript 简介,手册规范

    1 1JavaScript 简介 让我们来看看 JavaScript 有什么特别之处 我们可以用它实现什么 以及哪些其他技术可以与其搭配产生奇妙的效果 什么是 JavaScript JavaScript 最初被创建的目的是 使网页更生动 这
  • AI 图片生成3D模型之

    AI 可以通过学习大量的图像数据来生成 3D 模型 这些模型可以用于许多不同的目的 如游戏开发 建筑设计和动画制作 为了生成 3D 模型 AI 系统通常需要输入许多 2D 图像 这些图像可以是从不同角度拍摄的照片或者是从视频中截取的帧 AI
  • mmdetection报错 TypeError: vars() argument must have __dict__ attribute

    下载官方代码 安装好环境后第一个demo就报错 报错1 error the following arguments are required img config checkpoint 添加 报错2 manager pyplot show
  • Spring Secutity oAuth2的学习

    李哥的博客不能看了 写文档又很浪费时间 先投个懒 贴个流程图 想去李哥哪里学习的小伙伴 这里有地址 17 Spring Security oAuth2 创建资源服务器2 哔哩哔哩 bilibili 项目中使用到了Oauth2 然后来李哥这里
  • java实现获取两个list交集,并集,差集

    import java util ArrayList import java util List import static java util stream Collectors toList public class Main publ
  • java读取文件方法大全

    一 多种方式读文件内容 1 按字节读取文件内容 2 按字符读取文件内容 3 按行读取文件内容 4 随机读取文件内容 import java io BufferedReader import java io File import java
  • PHP性能优化

    PHP性能优化首先分为三个方向 PHP语言级别的性能优化 gt PHP周边问题的性能优化 gt PHP自身优化 一 PHP语言级别的性能优化 1 多使用PHP 的内置函数 2 少使用错误抑制符 会产生额外的opcode开销 opcode 当
  • 练习二、用JS语言输入数组并判断是否数组,并从小到大进行冒泡排序

    功能描述 在界面输入以逗号间隔开的字符串 转换成数组并判断是否有效 有效即进行排序 选择冒泡排序 主要考点 以输入框为输入参数入口 进行逐步推导 2 1 输入框是字符串需要转换成数组 2 2 一个输入框 要是输入双位数还是会分割成 单位数值
  • Linux中在线yum源的配置

    在线源的配置 配置环境 root localhost cat etc redhat release CentOS release 6 5 Final root localhost uname r 2 6 32 431 el6 x86 64
  • c语言六子棋(Alpha-Beta剪枝算法)

    c语言Alpha Beta剪枝算法六子棋 介绍 Alpha Beta剪枝算法是一种用于优化博弈树搜索的算法 可以在搜索过程中减少不必要的计算 从而提高搜索效率 该算法常用于博弈游戏 如六子棋 六子棋是一种类似于五子棋的棋类游戏 在一个六边形
  • 响应支付宝宣布的刷脸支付商业化

    二维码普及才没多久 刷脸支付已经悄无声息的走进我们的生活 刷脸支付作为一种全新的支付方式 将彻底改变人类的生活方式 有些人感慨道 这个时代变化太快了 快到一切技术的发展犹如坐上了火箭 去年8月中下旬 广电运通与深圳地铁腾讯共同打造生物识别
  • 为什么选择SpringCloud

    SpringCloud的诞生 SpringCloud是集成了众多开源的框架 利用SpringBoot的开发便利性实现服务治理 服务注册与发现 负载均衡 数据监控 REST API发布方式等 基本囊括了分布式框架所需要的所有功能 是一套易开放