Spring Clude 是什么?

目录

认识微服务

单体架构

集群和分布式架构

集群和分布式

集群和分布式区别和联系

微服务架构

分布式架构&微服务架构

微服务的优势和带来的挑战

微服务解决方案- Spring Cloud

什么是 Spring Cloud

Spring Cloud 版本

Spring Cloud 和 SpringBoot 的关系

Spring Cloud 实现方案

Spring Cloud Netflix

Spring Cloud Alibaba

Spring Cloud 实现对⽐


        在了解 Spring Cloud 之前,我们先来了解下什么是微服务,以及微服务的发展史.在架构发展的过程中,项⽬开发遇到了哪些问题,以及 Spring Cloud 是⽤来解决什么问题的.

认识微服务

下图表⽰了服务架构从单体应⽤逐渐转变为微服务应⽤的过程

单体架构

        很多创业公司早期或者传统企业会把业务的所有功能实现都打包在⼀个项⽬,这就是单体架构.        

        业务的所有功能实现都打包在⼀个 war 包或者 Jar 包中,这种⽅式就称为单体架构

        以⼤家都很熟悉的电商系统为例,电商系统包括:⽤户管理,商品管理,订单管理,⽀付管理,库存管理,物流管理等等,项⽬早期我们会把这些模块都写在⼀个 web 项⽬中,然后统⼀部署到⼀个 Web 服务器中

        这种架构开发简单,部署简单,⼀个项⽬就包含了所有的功能,省去了多个项⽬之间的交互和调⽤消耗.直接部署在⼀个服务器即可.

集群和分布式架构

        当⽹站的⽤户量越来越⼤,需求也会越来越多,流量也会越来越⼤,服务可能就会⾯临以下问题:

        • 后端服务器的压⼒就会越来越⼤,负载越来越⾼,甚⾄出现⽆法访问的情况

        • 业务场景逐渐复杂.为了满⾜⽤户的需求,单体应⽤也会越来越⼤.各个业务代码之间的耦合度也会越来越⾼.任何⼀个问题,都需要整个项⽬重新构建,发布.

        • ⼀个微⼩的问题,可能会导致整个应⽤挂掉

我们从两个⽅⾯进⾏优化:

• 横向(集群):添加服务器,把单台机器变成多台机器的集群.

• 纵向(分布式):把⼀个应⽤,按照业务功能进⾏拆分,拆分为多个项⽬.此架构也称为垂直架构.

        以单体结构规模的项⽬为单位进⾏垂直划分.也就是将⼀个⼤项⽬拆分成⼀个⼀个单体结构项⽬.项⽬和项⽬之间相对⽐较独⽴,接⼝多为数据同步功能.

集群和分布式

集群(cluster)是将⼀个系统完整的部署到多个服务器上,每个服务器都能提供系统的所有服务,多个服务器通过负载均衡调度完成任务.每个服务器称为集群的节点(node)

分布式是将⼀个系统拆分为多个⼦系统,多个⼦系统部署在多个服务器上,多个服务器上的⼦系统 协同合作完成⼀个特定任务.

集群和分布式区别和联系

1. 从概念上.集群是多个计算机做同样的事,分布式是多个计算机做不同的事

2.从功能上.集群的每⼀个节点功能是相同的(同样的代码部署在不同的服务器上),并且可以相互替代.分布式也是多个节点组成的系统,但是每个节点完成的业务是不同的,⼀个节点出现问题,这个业务就不可访问了.

3. 从关系上.分布式和集群在实践中,很多时候是互相配合使⽤的.⽐如分布式的某⼀个节点,可能由⼀ 个集群来代替.分布式架构⼤多是建⽴在集群上的.所以实际的分布式架构设计中并不会把分布式和集群单独区分,⽽是统称:分布式架构.

微服务架构

        简单来说,微服务就是很⼩的服务.⼩到⼀个服务只对应⼀个单⼀的功能,只做⼀件事.这个服务可以单独部署运⾏(大多数的微服务只提供个位数的接口,有的甚至只提供一个接口)

        微服务之间可以采⽤ REST RPC 协议进⾏通信.

        从这个⻆度来看,微服务架构是分布式架构的⼀种拓展,这种架构模式下它拆分粒度更⼩,服务更独⽴.可 以理解为:微服务是⼀种经过良好架构设计的分布式架构⽅案.

分布式架构&微服务架构

        分布式:服务拆分,拆了就⾏.(哪怕服务拆分得不细致,但只要对原来的一整个服务进行拆分了就是分布式)

        微服务:指⾮常微⼩的服务,更细粒度的垂直拆分,通常指拆得不能再拆的服务

        分布式架构侧重于压⼒的分散,强调的是服务的分散化.微服务侧重于能⼒的分散,更强调服务的专业化和精细分⼯,从实践的⻆度来看,微服务架构通常是分布式服务架构,反之则未必成⽴.所以,选择微服务 通常意味着需要解决分布式架构的各种难题.

微服务的优势和带来的挑战

优势

  • 易开发和维护:每个微服务负责的业务⽐较清晰,体量⼩,开发和维护成本降低.
  • 容错性⾼:⼀个服务发⽣故障,可以使故障隔离在单个服务中,不影响整体服务故障.
  • 扩展性好:每个服务都是独⽴运⾏的,我们可以结合项⽬实际情况进⾏扩展,按需伸缩.
  • 技术选型灵活:每个微服务都是单独的团队来运维,可以根据业务特点和团队特点,选择适合的技术栈.

挑战

        虽然微服务具备很多的优势,但由于服务数的增加,服务治理也是我们⾯临的巨⼤挑战.       

  • 服务依赖.随着服务的数量增多,服务之间的关系也会变得更加复杂.⼀个服务的更改,需要考虑对其他服务的影响.
  • 运维成本,⼀个业务流程会涉及多个微服务共同完成,有更多的服务需要编译,部署,运⾏,甚⾄可能是不同的编程语⾔,不同的运⾏环境,当然也需要集群来处理故障转移等.这对于运维⼈员⽽⾔,挑战 是巨⼤的.
  • 开发和测试.⼀个业务流程可能涉及多个微服务共同完成,服务调⽤引⼊⽹络延迟,不可靠的⽹络,如 何进⾏容错处理等问题.这对开发和测试⽽⾔,难度也会提升.
  • 服务监控.在⼀个单体结构中,很容易实现服务的监控.因为所有功能都在⼀个服务中,微服务架构 下,不仅需要对整个链路进⾏监控,还需要对每⼀个服务实现监控.
  • 负载均衡.微服务架构中的服务实例数量可能⾮常庞⼤,因此需要有效的服务发现和负载均衡机制来管理请求流量和保证⾼可⽤性

微服务解决方案- Spring Cloud

什么是 Spring Cloud

        Spring Cloud 提供了⼀些可以让开发⼈员快速构建分布式服务⼯具,⽐如配置管理,服务发现,熔断, 智能路由等.他们可以在任何分布式环境中很好的⼯作.

        简单来说, Spring Cloud 就是分布式微服务架构的⼀站式解决⽅案,是微服务架构落地的多种技术的集合.

        我自己理解: Spring Cloud 相当于一个工具箱,它提供了许多进行分布式微服务开发的工具,而且这些工具都采用 Spring 的风格封装,上手难度低

包含有哪些技术呢?比如:

  • Distributed/versioned configuration 分布式版本配置
  •  Service registration and discovery 服务注册和发现
  • Routing 路由
  • Service-to-service calls 服务调⽤
  • Load balancing 负载均衡
  • Circuit Breakers 断路器
  • Distributed messaging 分布式消息
  • ....

        小知识:Spring Cloud 并不是 Spring 团队研发的框架,  它只是把⼀些⽐较优秀的解决微服务架构中常⻅问题的开源框架基于 SpringCloud 规范进⾏了整合,并基于 SpringBoot 的⻛格,对这些组件进⾏封装,屏蔽掉了复杂的配置和实现原理.为开发者提供了开箱即⽤的微服务开发体验.这些开源技术的框架是由各个公司来维护的. Spring Cloud 就是这些微服务的⼤管家.

Spring Cloud 版本

        Spring Cloud 是⼀个由很多⼦项⽬(用于微服务开发的工具)组成的庞⼤项⽬,这些⼦项⽬由各个公司来维护的,所以发布阶段也是不同的.

        为了管理主项⽬和⼦项⽬的依赖关系,以及为了避免和⼦项⽬版本的冲突,主项⽬版本命名并没有采⽤ 和⼦项⽬数字版本化的形式,⽽是采⽤了英⽂名称.

        这个英⽂版本名称也⽐较有趣,Spring Cloud 采⽤了英国伦敦地铁站的名称来命名,并由地铁站名称字⺟A-Z依次类推的形式来发布迭代版本.

• Angel

• Brixton

• Camden 

• Dalston 

• Edgware 

• Finchley 

• Greenwich 

• Hoxton 但英⽂版本号太复杂了,从 Hoxton 版本之后,Spring Cloud 的版本就变成了2020.0.0 这样的⽇期版本号了

• 2020.0.x aka Ilford  

• 2021.0.x aka Jubilee

• 2022.0.x aka Kilburn

• 2023.0.x aka Leyton

        注意:在使用 Spring Cloud 中的微服务开发工具时,一定要注意工具和 Spring Cloud 的版本是否对应,在官网可以查 Spring Cloud 版本对应的工具版本,版本不对应,可能会出现很多莫名其妙的问题

Spring Cloud 和 SpringBoot 的关系

        Spring Cloud 中的所有⼦项⽬都依赖 SpringBoot,所以 SpringBoot 和 SpringCloud 的版本之间也存在⼀定的对应关系

        ⽐如SpringBoot 3.2.X 对应的 SpringCloud 版本是 2023.0.X 如果我们有⼀个 SpringBoot 项⽬,我们希望在这个项⽬中添加 SpringCloud 的⼀些组件,需要根据当前项⽬的 SpringBoot 版本,选择 SpringCloud 的版本(当然,新项⽬不存在这个问题)

        注意:实际上我们在使用 SpringCloud 时,上要注意和 SpringBoot 的版本相匹配,下要注意和微服务组件的版本相匹配

Spring Cloud 实现方案

        在 Spring Cloud 的规范下,有很多实现,其中最为出名的是 

        • Spring Cloud Netflix

        • Spring Cloud Alibaba

Spring Cloud Netflix

        Spring Cloud Netflix是 Netflix OSS(Netflix Open Source Software)在 Spring Cloud 规范下的实现.包含的组件及其主要功能⼤致如下:

• Eureka:服务注册和发现

• Zuul:服务⽹关

• Ribbon:负载均衡 

• Feign:服务调⽤组件

• Hystrix:断路器,提供服务熔断和限流

• Hystrix Dashboard:监控⾯板

• ...

        在很⻓的⼀段时间⾥, Spring Cloud ⼀度被泛指 Spring Cloud Netflix. Spring Cloud⼀直以来把 Netflix OSS 套件作为其官⽅默认的⼀站式解决⽅案.然⽽,Netflix 公司在2018年前后宣布其核⼼组件 Hystrix、Ribbon、Zuul 等均进⼊维护状态, Spring Cloud 也被迫宣布删除这些维护模块.

        Spring Cloud Netflix 在很多公司都有⼤规模使⽤,⼀旦停⽌更新,短期看影响不⼤,但⻓期显然是不合适的,Spring Cloud 官⽅也提供了⼀些替换建议.

        注意:Netflix 公司不更新这些微服务开发的组件后,Spring 团队便自己开发了具有相同功能的组件供程序员使用。

Spring Cloud Alibaba

        Spring Cloud Alibaba 是阿⾥巴巴集团下的开源组件和云产品在 Spring Cloud 规范下的实现.

        虽然 Spring Cloud Alibaba⽬前并不是 Spring Cloud 官⽅推荐的默认⽅案,但是Spring Cloud Alibaba  是阿⾥中间件团队主导的⼀个新⽣项⽬,正处于⾼速迭代中.甚⾄在 Alibaba 的开源组件还没有织⼊ SpringCloud ⽣态之前,就已经在各⼤公司⼴泛使⽤了.

官⽅⽹站:https://sca.aliyun.com/docs/2022/overview/what-is-sca/

        如果说 Spring Cloud Netflix 是 Spring Cloud 的第⼀代实现, 那么 Spring Cloud Alibaba也可以看做是 Spring Cloud 的第⼆代实现,主要由 Nacos、Sentinel、Seata 等组件组成.

        Spring Cloud Alibaba 吸收了 Spring Cloud Netflix 微服务框架的核⼼架构思想,并进⾏了⾼性能改进(去其糟泊,取其精华).⾃ Spring Cloud Netflix 进⼊停更维护后, Spring Cloud Alibaba 逐渐代替它成为主流的微服务框架.

Spring Cloud 实现对⽐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/363511.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习 —— 1.单一神经元

深度学习初级课程 1.单一神经元2.深度神经网络3.随机梯度下降法4.过拟合和欠拟合5.剪枝、批量标准化6.二分类 前言 本套课程仍为 kaggle 课程《Intro to Deep Learning》,仍按之前《机器学习》系列课程模式进行。前一系列《Keras入门教程》内容,与本系列…

STM32 IWDG(独立看门狗)

1 IWDG简介 STM32有两个看门狗:一个是独立看门狗(IWDG),另外一个是窗口看门狗。独立看门狗也称宠物狗,窗口看门狗也称警犬。本文主要分析独立看门狗的功能和它的应用。 独立看门狗用通俗一点的话来解释就是一个12位的…

在Ubuntu上安装VNC服务器教程

Ubuntu上安装VNC服务器方法:按照root安装TeactVnc,随后运行vncserver输入密码,安装并打开RickVNC客户端,输入服务器的IP,最后连接输入密码即可。 VNC或虚拟网络计算,可让您连接到远程Linux / Unix服务器的…

udp Socket组播 服务器

什么是组播 组播也可以称之为多播这也是 UDP 的特性之一。组播是主机间一对多的通讯模式,是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将一份报文发送到特定的组播地址,组播地址不同于单播地址,它并不属于特定某个主机…

laravel的日志使用说明

文章目录 了解系统的默认支持多个通道时它们的关系如何使用驱动默认日志是同步的 了解系统的默认支持 Laravel 日志基于「 通道 」和 「 驱动 」的。那么这个通道是干嘛的?驱动又是干嘛的? 通道 : 1.它表示了某种日志格式化的方式&#xff…

云动态摘要 2024-06-28

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 [新客专享]WeData 限时特惠 腾讯云 2024-06-21 数据分类分级管理,构建数据安全屏障 ,仅需9.9元! 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器…

游戏AI的创造思路-技术基础-深度学习(3)

继续填坑,本篇介绍深度学习中的长短期记忆网络~~~~ 目录 3.3. 长短期记忆网络(LSTM) 3.3.1. 什么是长短期记忆网络 3.3.2. 形成过程与运行原理 3.3.2.1. 细胞状态与门结构 3.3.2.2. 遗忘门 3.3.2.3. 输入门 3.3.2.4. 细胞状态更新 3.…

Younger 数据集:人工智能生成神经网络

设计和优化神经网络架构通常需要广泛的专业知识,从手工设计开始,然后进行手动或自动化的精细化改进。这种依赖性成为快速创新的重要障碍。认识到从头开始自动生成神经网络架构的复杂性,本文引入了Younger,这是一个开创性的数据集&…

机器学习python实践——关于管道模型Pipeline和网格搜索GridSearchCV的一些个人思考

最近在利用python跟着指导书进行机器学习的实践,在实践中使用到了Pipeline类方法和GridSearchCV类方法,并且使用过程中发现了一些问题,所以本文主要想记录并分享一下个人对于这两种类方法的思考,如果有误,请见谅&#…

Kubernetes 容器编排技术

Kubernetes 容器编排 前言 知识扩展 早在 2015 年 5 月,Kubernetes 在 Google 上的搜索热度就已经超过了 Mesos 和 Docker Swarm,从那儿之后更是一路飙升,将对手甩开了十几条街,容器编排引擎领域的三足鼎立时代结束。 目前,AWS…

蚂蚁- 定存

一:收益变动&&收益重算 1.1: 场景组合 1: 澳门元个人活期,日终余额大于0,当日首次、本周本月非首次系统结息,结息后FCDEPCORE_ASYN_CMD_JOB捞起进行收益计算 【depc_account_revenue_detail】收益日 > 【depc_accoun…

Linux驱动开发笔记(十一)tty子系统及其驱动

文章目录 前言一、串口驱动框架1.1 核心数据结构1.2 数据处理流程 二、驱动编写1. 设备树的修改2. 相关API函数3. 驱动框架4. 具体功能的实现4.1 出入口函数的编写4.2 读写函数 前言 之前已经讲过应用层的应用,接下来我们继续进行驱动的学习。其实实际上我们很少主动…

【Redis四】主从复制、哨兵以及Cluster集群

目录 一.主从复制、哨兵、集群的区别 二.Redis主从复制 1.作用 2.原理 3.流程 三.搭建Redis 主从复制 1.源码编译安装以及配置文件修改 1.1.修改 Redis 配置文件(Slave节点操作) 2.验证主从复制 2.1.在Master节点上看日志 2.2.在Master节点上…

学习感悟丨在誉天学习数通HCIP怎么样

大家好,我是誉天学员的徐同学,学习的数通HCIP课程。 在学校的时候,听说下半年就要出去实习了,心中坎坷不安,现在我学到的知识远远不够的。然后就想着学点东西充实一下自己的知识面和专业能力,有一次和同学谈…

有没有能用蓝牙的游泳耳机,性能超凡的4大游泳耳机力荐

在现代科技的推动下,越来越多具备蓝牙功能的游泳耳机正在改变游泳爱好者的体验方式。这些创新产品不仅在防水性能上有了显著提升,还能让您在水中享受到高质量的音乐。然而,选择一款优秀的蓝牙游泳耳机并不简单,需要考虑到防水等级…

vite vue3使用axios解决跨域问题

引入依赖 npm install axios 在main.js中全局引入 import { createApp } from vue import App from ./App.vue import axios from axiosconst app createApp(App)// 全局引入axios app.config.globalProperties.$axios axiosapp.mount(#app) 修改vite.config.js的代理配置…

Java | Leetcode Java题解之第189题轮转数组

题目: 题解: class Solution {public void rotate(int[] nums, int k) {k % nums.length;reverse(nums, 0, nums.length - 1);reverse(nums, 0, k - 1);reverse(nums, k, nums.length - 1);}public void reverse(int[] nums, int start, int end) {whil…

搭建企业内网pypi镜像库,让python在内网也能像互联网一样安装pip库

目录 知识点实验1.服务器安装python2.新建一个目录/mirror/pip,用于存储pypi文件,作为仓库目录3.下载python中的所需包放至仓库文件夹/mirror/pip3.1. 新建requirement.py脚本(将清华pypi镜像库文件列表粘贴到requirement.txt文件中&#xff…

代码随想录算法训练营第三十七天|01背包问题、分割等和子集

01背包问题 题目链接:46. 携带研究材料 文档讲解:代码随想录 状态:忘了 二维dp 问题1:为啥会想到i代表第几个物品,j代表容量变化? 动态规划中,每次决策都依赖于前一个状态的结果,在…

Radxa 学习摘录

文章目录 1、参考资料2、硬件知识3、shell4、交叉编译工具链5、问题6、DTS 1、参考资料 技术论坛(推荐) 官方资料下载 wiki资料 u-boot 文档 u-boot 源码 内核文档 内核源码 原理图 radxa-repo radxa-build radxa-pkg radxa-docs 2、硬件知识 Rad…