SpringCloud 简单的了解

什么是SpringCloud ?

基于 Spring Boot 的 Spring 集成应用程序,它利用 Spring Boot 的开发便利性简化了分布式系统的开发,提供与外部系统的集成。 如服务注册与发现、配置中心、负载均衡、断路器、消息总线、数据监控等;换句话说:Spring Cloud 提供了构建分布式系统所需的“全家桶”。
Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。


个人理解:
springcloud是一种架构,一种思想,分布式,云架构,不专注于CRUD;springcloud就相当于乐高积木


核心组件含:
Eureka:服务注册与发现。
Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。

springCloud学习笔记整理(简单了解)

1.分布式

分布式的概念:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。

分布式架构的优缺点:

优点:

  • 降低服务耦合

  • 有利于服务升级和拓展

缺点:

  • 服务调用关系错综复杂

2.微服务

微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。因此,可以认为微服务是一种经过良好架构设计的分布式架构方案 。

其中常见的组件包括:

3.总结
  • 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统

  • 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝

  • 微服务:一种良好的分布式架构方案

    ①优点:拆分粒度更小、服务更独立、耦合度更低

    ②缺点:架构非常复杂,运维、监控、部署难度提高

  • SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件

4.Eureka注册中心

服务注册中心:用于管理微服务提供者的注册与发现的组件。在分布式微服务架构中,服务注册中⼼用于存储服务提供者地址信息、服务发布相关的属性信息,消费者通过主动查询和被动通知的方式获取服务提供者的地址信息,不再需要通过硬编码⽅式得到提供者的地址信息。

Eureka注册中心

①Eureka 包含两个组件:Eureka Server 和 Eureka Client

②每⼀个Eureka Server都是⼀个集群可以相互注册

③Eureka Client作为服务提供者向Eureka Server中注册服务,Eureka Server接受到注册事件会在集群和分区中进⾏数据同步,

Eureka Client作为消费端(服务消费者)可以从Eureka Server中获取到服务注册信息,进⾏服务调⽤。

④微服务启动后,会周期性地向Eureka Server发送⼼跳(默认周期为30秒)以续约⾃⼰的信息

⑤Eureka Server在⼀定时间内没有接收到某个微服务节点的⼼跳,Eureka Server将会注销该微服务节点(默认90秒)

⑥Eureka Client会缓存Eureka Server中的信息。即使所有的Eureka Server节点都宕掉,服务消费者依然可以使⽤缓存中的信息找到服务提供者

5.Eureka注册

Eureka server依赖

<dependencies><!--Eureka server依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies>

Eureka server客户端配置

#euraka客户端配置(和Server交互)
eureka:instance:hostname: localhost #当前Eureka实例的主机名client:service-url: #配置客户端所交互的EurekadefaultZone: http://${eureka.instance.hostname}}:8761/eurekaregister-with-eureka: false #当前自己就是server,不需要注册自己fetch-registry: false #查询获取注册中心的服务信息,自己就是Server,所以不需要获取

eureka-server服务编写一个启动类时一定要添加一个@EnableEurekaServer注解,开启eureka的注册中心功能:

Eureka-Clien依赖和配置

#Eureka-Clien依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
​
#Eureka-Clien配置
ureka:client:service-url:defaultZone: http://localhost:端口/eureka
6.服务拉取和负载均衡

给RestTemplate这个Bean添加一个@LoadBalanced注解可实现服务列表拉取实现负载均衡

// 写在启动类或者通过@Configuration实现自动配置
@Bean
@LoadBalanced
public RestTemplate restTemplate(){return new RestTemplate();
}
7.Ribbon负载均衡

Ribbon 底层采用了一个拦截器,拦截了请求服务发出的http请求,对地址做了修改

基本流程如下:

  • 拦截我们的RestTemplate请求http://userservice/user/1

  • RibbonLoadBalancerClient会从请求url中获取服务名称,也就是user-service

  • DynamicServerListLoadBalancer根据user-service到eureka拉取服务列表

  • eureka返回列表,localhost:8081、localhost:8082

  • IRule利用内置负载均衡规则,从列表中选择一个,例如localhost:8081

  • RibbonLoadBalancerClient修改请求地址,用localhost:8081替代userservice,得到http://localhost:8081/user/1,发起真实请求

负载均衡策略

负载均衡的规则都定义在IRule接口中,而IRule有很多不同的实现类:

不同规则的含义如下:

内置负载均衡规则类规则描述
RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
AvailabilityFilteringRule对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。 (2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的<clientName>.<clientConfigNameSpace>.ActiveConnectionsLimit属性进行配置。
WeightedResponseTimeRule为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
BestAvailableRule忽略那些短路的服务器,并选择并发数较低的服务器。
RandomRule随机选择一个可用的服务器。
RetryRule重试机制的选择逻辑

默认的实现就是ZoneAvoidanceRule,是一种轮询方案

自定义负载均衡策略

通过定义IRule实现可以修改负载均衡规则,有两种方式:

  1. 代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:

@Bean
public IRule randomRule(){return new RandomRule();
}

  1. 配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:

userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 

注意,一般用默认的负载均衡规则,不做修改。

饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。

而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon:eager-load:enabled: trueclients: userservice

使用SpringCloud的优缺点


优点:
(1)前后端分离开发,便于快速开发
(2)采用去中心化思想,服务之间采用Restful等轻量级通讯,比ESB更轻量
(3)利于扩展模块,乐高积木一般
(4)Springcloud的节点不会影响另一个节点
(5)适于互联网时代,产品迭代周期更短,如果用来做电商网站的话,性能是非常好的


缺点:

配置复杂,节点多,涉及的知识点多,所以治理成本高,不利于维护系统,且对团队挑战大

SpringCloud常见问题

服务注册和发现是什么意思?Spring Cloud 如何实现?

当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。
Eureka 服务注册和发现可以在这种情况下提供帮助。由于所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器完成查找,因此无需处理服务地点的任何更改和处理。
或者使用Nacos!!!!

SpringBoot和SpringCloud的区别?

(1)Springboot是单体个体的开发,Springcloud是分布式(多个)的开发
(2)SpringBoot可以离开SpringCloud独立使用开发项目, 但是SpringCloud离不开SpringBoot ,属于依赖的关系.
(3)SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。

负载均衡的意义什么?

负载均衡里面提供了轮巡算法机制(默认),可以最大化吞吐量,优化资源的使用,最小化响应时间并避免任何单一资源的过载。可能会通过冗余来提高可靠性和可用性。
第二的话可以利用权重分配机制(就是根据服务器的性能来分配,提高资源的使用)
它的意义的话就是让请求均分到同一服务的每个节点上。
Feign接口的话就默认开启了Ribbon负载均衡(一般情况下,是用于一个服务的多个节点上才使用)

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

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

相关文章

Zilliz@阿里云:大模型时代下Milvus Cloud向量数据库处理非结构化数据的最佳实践

大模型时代下的数据存储与分析该如何处理?有没有已经落地的应用实践? 为探讨这些问题,近日,阿里云联合 Zilliz 和 Doris 举办了一场以《大模型时代下的数据存储与分析》为主题的技术沙龙,其中,阿里云对象存储 OSS 上拥有海量的非结构化数据,Milvus(Zilliz)作为全球最有…

飞致云开源社区月度动态报告(2023年9月)

自2023年6月起&#xff0c;中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》&#xff0c;旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况&#xff0c;以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源大屏…

django_auth_ldap登录权限

用户登录权限分为三种&#xff0c;通过is_active,is_staff,is_superuser标识。可以对组赋予对应的权限。 设定active组、staff组和superuser组分别对应三种权限。在不同组权限下的登录情况如下&#xff1a; 当用户不属于任何一组&#xff1a; 登录失败&#xff0c;提示如图&a…

MonkeyRunner测试步骤

首先把安卓SDK的 环境变量给配置好&#xff0c;这里就不再多解释&#xff0c;自己google 然后将自己的安卓设备打开调试模式&#xff0c;USB连接至电脑&#xff0c;运行CMD,输入命令adb devices 查看你的安卓设备的ID&#xff08;ID后面写程序会调用&#xff09;&#xff0c;…

容器启动报错

容器启动报错 docker: Error response from daemon: driver failed programming external connectivity on endpoint XXX 如下&#xff1a; 据百度&#xff1a; 在docker启动后在&#xff0c;再对防火墙firewalld进行操作&#xff0c;就会发生上述报错 详细原因&#xff1a…

在EXCEL中构建加载项之创建加载项的目的及规范要求

【分享成果&#xff0c;随喜正能量】一句南无阿弥陀佛&#xff0c;本是释迦牟尼佛所证的无上正等正觉法&#xff0c;洒在娑婆世界的众生海中&#xff0c;只为末世众生能够以信愿之心抓住此救命稻草&#xff0c;要知道今世人此生的处境&#xff0c;可能只剩这道要么极乐要么三涂…

【DTEmpower案例操作教程】向导式建模

DTEmpower是由天洑软件自主研发的一款通用的智能数据建模软件&#xff0c;致力于帮助工程师及工科专业学生&#xff0c;利用工业领域中的仿真、试验、测量等各类数据进行挖掘分析&#xff0c;建立高质量的数据模型&#xff0c;实现快速设计评估、实时仿真预测、系统参数预警、设…

Android 导入ncnn-android-yolov8-seg : 实现人体识别和人像分割

1. 前言 上篇文章我们在Android中使用OpenCV实现了人脸识别&#xff0c;这篇文章我们使用OpenCVYOLOv8NCNN 来实现人像分割的功能。 首先来看下效果&#xff0c;这里会识别出人体&#xff0c;并会用蓝色的框框出来&#xff0c;并会有标签标注识别出的物体是什么&#xff0c;概…

038:mapboxGL 旋转地图(rotateTo)

第038个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中旋转地图。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共68行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xiaozhuan…

1.centos7 安装显卡驱动、cuda、cudnn

安装conda 参考 python包 2.安装conda python库-CSDN博客3.Cenots Swin-Transformer-Object-Detection环境配置-CSDN博客 1.安装显卡驱动 步骤1&#xff1a;安装依赖 yum -y install kernel-devel yum -y install epel-release yum -y install gcc 步骤2&#xff1a;查询显…

python学习之路

python 初识python下载python安装python安装成功 idea中配置python环境并运行我的idea是2022版和上一个有点区别VSCode搭建Python开发环境(含Python环境搭建) 学习python 初识python 当我了解python时我决定试一试 首先了解一下什么是python,推荐廖雪峰老师的官网 python简介 …

深度使用了下 Serverless,太丝滑了

在 Serverless 架构下&#xff0c;开发者只需编写代码并上传&#xff0c;云平台就会自动准备好相应的计算资源&#xff0c;完成运算并输出结果&#xff0c;从而大幅简化开发运维过程。 云函数和 FaaS 最近在开发自己的小项目的时候&#xff0c;因为各种原因使用上了云函数这个…

力扣每日一题(+日常水几道题)

每日一题1333. 餐厅过滤器 - 力扣&#xff08;LeetCode&#xff09; 简单的按规则排序,去除几个不满足的条件然后排序返回即可 #include<algorithm> class Solution { public:vector<int> filterRestaurants(vector<vector<int>>& restaurants, …

找不到名称 “$“。是否需要安装 jQuery 的类型定义? 请尝试使用 `npm i --save-dev @types/jquery`。

vitevue3环境 1、安装jQuery npm install --save jquery 2、在main.ts文件进行配置 declare const window: any; import jQuery from jquery; window.$ window.jQuery jQuery; 注意&#xff1a;需要声明window属性&#xff1b; 要不然会报错&#xff1a;类型“Window &am…

Kafka:介绍和内部工作原理

展示Kafka工作方式的简单架构。 什么是Kafka&#xff1f;为什么我们要使用它&#xff1f;它是消息队列吗&#xff1f; •它是一个 分布式流处理平台或分布式 提交日志*。*•Kafka通常用于实时流数据管道&#xff0c;即在系统之间传输数据&#xff0c;构建不断流动的数据转换系统…

【记录文】Android自定义Dialog实现圆角对话框

圆角的dialog还是蛮常用的&#xff0c;demo中正好用上了 自定义Dialog&#xff0c;代码中可以设置指定大小与位置 /*** author : jiangxue* date : 2023/9/25 13:21* description :圆角的矩形*/internal class RoundCornerView(context: Context,view: Int, StyleRes theme…

B树和B+树的介绍和对比,以及MySQL为何选择B+树

在计算机科学中&#xff0c;B树和B树是常用的数据结构&#xff0c;用于在大规模数据集上进行高效的插入、删除和查找操作。它们在数据库管理系统、文件系统等许多实际应用中发挥着重要作用。本文将深入介绍B树和B树的结构特点、实际应用方面以及它们的优缺点&#xff0c;并最后…

零代码编程:用ChatGPT批量将多个文件夹中的视频转为音频

有多个文件夹中的 视频&#xff0c;都要批量转换成音频格式。 转换完成后要删除视频。虽然现在已经有很多格式转换软件可以实现这个功能&#xff0c;但是需要一个个文件夹的操作&#xff0c;还要手动去删除视频。用ChatGPT来写一个批量自动操作程序吧&#xff1a; 输入提示词如…

【通意千问】大模型GitHub开源工程学习笔记(2)

使用Transformers来使用模型 如希望使用Qwen-chat进行推理,所需要写的只是如下所示的数行代码。请确保你使用的是最新代码,并指定正确的模型名称和路径,如Qwen/Qwen-7B-Chat和Qwen/Qwen-14B-Chat 这里给出了一段代码 from transformers import AutoModelForCausalLM, Aut…

朴素贝叶斯深度解码:从原理到深度学习应用

目录 一、简介贝叶斯定理的历史和重要性定义例子 朴素贝叶斯分类器的应用场景定义例子常见应用场景 二、贝叶斯定理基础条件概率定义例子 贝叶斯公式定义例子 三、朴素贝叶斯算法原理基本构成定义例子 分类过程定义例子 不同变体定义例子 四、朴素贝叶斯的种类高斯朴素贝叶斯&a…