springCloud

一.springCloud简介
Spring Boot擅长的市集成,把世界上最好的框架集成到自己的项目中.它是为服务的基石.
SpringCloud也是一样,把非常流行的微服务的技术整合在一起,它包含许多技术组件,相当与一个技术栈.
spring cloud 包含了:
注册中心 Eureka,consul,Zookeeper
负载均衡:Ribbon
熔断器: Hystrix
服务通信:Feign
网关: Gateway
配置中心:config 配置管理开发工具包, 现在还有百度的disconf 携程的Appolo
消息总线:Bus
集群状态等
SpringCloud的版本:
springCloud是一系列框架组合,为了避免与框架版本产生混淆,采用新的版本命名方式,形式为大版本名+子版本名
子版本名称三种:
SNAPSHOT:快照版本,尝鲜版,随时可能修改
M版本:MileStone,M1表示第一个里程碑版本,一般同时标注PRE,表示预览版
SR,ServiceRelease SR1表示第一个正式版本,同时标注GA(Generally Available),稳定版
SpringCloud与SpringBoot版本匹配关系:
| SpringBoot | SpringCloub |
|–1.2.X |Angel版本–|
| 1.3.X |Brixton版本 |
|1.4.x |Camden版本|
|1.5.x | Dalston版本、Edgware|
|2.0.x |Finchley版本|
|2.1.x |Greenwich GA版本 (2019年2月发布)|
鉴于SpringBoot与SpringCloud关系,SpringBoot建议采用2.1.x版本

二.服务调用方式
常用远程调用方式:
1.RPC:远程调用过程
基于Socket
自定义数据格式
速度快,效率高
典型代表:Dubbo,WebService
2.Http:网络传输协议
基于TCP/IP
规定数据传输格式
缺点是消息封装比较臃肿,传输速度比较慢
优点是对服务的提供和调用方式没有任何技术限定,自由灵活,更符合微服务理念
RPC和Http的区别:RPC是根据语言API来定义,而不是根据基于网络的应用来定义
HTTP客户端工具
常见的Http客户端工具:HttpClient,OKHttp,URLConnection
Spring的RestTemplate
1.RestTemplate是Rest的Http客户端模板工具类
2.对基于Http的客户端进行封装
3.实现对象与json的序列化与反序列化
4.不限定客户端类型,目前常用的3种客户端都支持:HttpClient,OKHttp,JDK原生URLConnection(默认方式)

SpringCloud注册中心Eureka
在前后端分离架构中,服务层被拆分成了很多的微服务,微服务的信息如何管理? SpringCloud中提供注册中心来管理微服务信息.
为什么要注册中心:
1.微服务数量众多,要进行远程调用就需要知道服务端的ip地址和端口,注册中心帮助我们管理这些服务的ip和端口.
2.微服务会实时上报自己的状态,注册中心将统一管理这些微服务的状态,将存在的问题和服务踢出服务列表,客户端获取到可用的服务进行调用,
Eureka注册中心
Spring Cloud Eureka 是对Netflix公司的Eureka的第二次封装,它实现了服务治理的功能,SpringCloudEureka提供服务端与客户端,服务端即是Eureka服务注册中心,客户端完成微服务向Eureka服务的注册与发现.
服务端指的是:就是当前的注册中心,需要自己搭建.
客户端指的是:向注册中心注册的微服务.
1.Eureka Server是服务端,负责管理各微服务节点的信息和状态.
2.在微服务上部署EurekaClient程序,远程访问EurekaServer将自己注册在EurekaServer
3.微服务需要调用另一个微服务时从EurekaServer中获取服务调用地址,进行远程调用.
入门案例:
搭建EurekaServer环境,创建一个Eureka_Server工程,分三步:
1.Eureka-server搭建工程eureka_server
2.服务提供者-注册服务,
3.服务消费者,发现服务

在启动类中声明当前应用为Eureka服务,使用@EnableEurekaServer注解或者@EnableDiscoveryClient
二者区别是: @EnableEurekaServer只适用于Eureka注册中心
@EnableDiscoverClient注册中心适用于多种注册中心

服务端的自我保护模式:
如果当前处于开启的状态,那么在server中注册的某一个client,就算突然连接不上了,server也不会马上把该client从注册表中清理.
如果当前处于关闭的状态,那么在server中注册的某一个client,突然连接不上了,server会马上把该client从注册表中清理.
在开发阶段会关闭自我保护,上线阶段会开启

EurekaServer的高可用:
1.环境搭建,EurekaServer高可用环境搭建需要两个EurekaServer,它们互相向对方注册.如果在本机启动两个Eureka需要注意两个EurekaServer的端口要不一样.
在这里插入图片描述1.在实际使用时EurekaServer至少部署两台服务器,实现高可用.
2.两台EurekaServer互相注册
3.微服务需要连接两台EurekaServer注册,当其中一台EurekaServer死掉也不会影响服务的注册与发现
4.微服务会定时向EurekaServer发送心跳,报告自己的状态.
5.微服务从注册中心获取服务地址一RESTFul方式发起远程调用.
配置如下:
1.配置端口
server:
port:${PORT:50101}
2.Eureka服务端的交互地址配置:
erueka:
client:
registwithEureka:true (服务注册 是否将自己注册到Eureka中)
fetcheRegistry:true (服务发现.是否从Eureka中获取注册信息)
serviceUrl:客户端与Eureka服务端的交互地址,高可用状态配置对方的地址,单机状态配置自己(如果不配置默认本机8761端口)
default Zone: $ {EUREKA_SERVER:http://eureka:50102/eureka/}
配置hostname:
Eureka组成高可用,两个Eureka互相向对方注册,这里需要通过域名或者主机名访问
完整的eureka配置
eureka:
client:
registerWithEureka: true #服务注册,是否将自己注册到Eureka服务中
fetchRegistry: true #服务发现,是否从Eureka中获取注册信息
serviceUrl: #Eureka客户端与Eureka服务端的交互地址,高可用状态配置对方的地址,单机状态配置自己(如果不配置则默认本机8761端口)
defaultZone: ${EUREKA_SERVER:http://eureka02:50102/eureka/}
server:
enable-self-preservation: false #是否开启自我保护模式
eviction-interval-timer-in-ms: 60000 #服务注册表清理间隔(单位毫秒,默认是60*1000)
instance:
hostname: ${EUREKA_DOMAIN:eureka01}

服务注册
1.在服务中添加依赖
< denpendency>
< groupid >
org.springframework.cloud
</ groupid>
< artifactid>
spring-cloud-starter-netflix-eureka-client
</ artifactid>
</ denpendency>
2.在application.yml中配置
eureka:
client:
registerWithEureka: true #服务注册开关
fetchRegistry: true #服务发现开关
serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址,多个中间用逗号分隔
defaultZone: ${EUREKA_SERVER:http://localhost:50101/eureka/}
instance:
prefer-ip-address: true #将自己的ip地址注册到Eureka服务中
ip-address: ${IP_ADDRESS:127.0.0.1}
instance-id: ${spring.application.name}: $ {server.port} #指定实例id
3.在启动类中添加注解@EnableDiscoverclient
负载均衡springcloud Ribbon:
1.Ribbon简介:
它是一个基于Http.Tcp的客户端负载均衡器.
2.什么是负载均衡?
负载均衡是微服务架构中必须使用的技术,通过负载均衡来实现系统的高可用,集群扩容等功能,负载均衡可通过硬件设备及软件来实现,硬件比如:F5,Array等,软件比如:LVS,Nginx等
负载均衡架构图:
在这里插入图片描述用户请求先到达负载均衡器,负载均衡器根据负载均衡算法将请求转发到微服务.负载均衡算法有:轮询,随机,加权轮询,加权随机,地址哈希等算法,负载均衡器维护一份服务列表,根据负载均衡算法将请求转发到相应的微服务上,所以负载均衡可以为微服务集群分担请求,降低系统的压力.
2.什么是客户端负载均衡?
上图是服务端负载均衡,客户端负载均衡与服务端负载均衡的区别在于客户端要维护一份服务列表,Ribbon从Eureka Server获取服务列表,Ribbon根据负载均衡算法直接请求到具体的微服务,中间省去了负载均衡服务。
如下图是Ribbon负载均衡的流程图:
在这里插入图片描述
1.在消费微服务中使用ribbon实现负载均衡,ribbon先从EurekaServer中获取服务列表.
2.Ribbon根据负载均衡的算法去调用微服务
客户端负载均衡与服务端负载均衡的区别:
服务注册列表维护的位置,如果是由单独的服务器维护的,则是服务端负载均衡,如果是由自己维护的则是客户端负载均衡.
2.对于服务端的负载均衡,当前请求的代理转发,或者说对于负载均衡进行服务器选择,是由单独的一台服务器做的 ,是服务端负载均衡.
而客户端对于负载均衡在进行服务器选择的时候是由自己选择的
(服务端通过Nginx实现,客户端的负载均衡是由Ribbon实现的,是由自己维护的注册列表信息.)
注意:使用RestTemplate远程调用时,在Resttemplat的方法上使用@LoadBalanced注解开启负载均衡.
熔断器SpringCloud Hystrix
1.Hystrix简介(Hystrix已经过时,可以使用sentinal,阿里提供的,实现服务限流和降级)

Hystrix的作用是什么:
Hystrix用于服务降级,服务隔离等操作,可以非常有效的防止服务雪崩,提高系统的整体弹性.

雪崩效应:
1.微服务中,一个请求可能需要多个微服务接口才能实现,会形成复杂的调用链路.
2.如果某服务出现异常,请求阻塞,用户得不到响应,容器中线程不会释放,于是越来越多的用户请求堆积,越来越多的线程阻塞.
3.单服务器支持线程和并发数有限,请求如果一直阻塞,会导致服务器资源耗尽,从而导致所有其他服务都不可用,从而形成雪崩效应.
Hystrix解决雪崩问题的手段,主要是服务降级,线程隔离.

熔断器工作原理:
熔断器的原理非常简单,类似于电力过载保护器.
熔断器状态机有三个状态:
1.closed:关闭状态,所有请求正常访问
2.Open:开启状态,所有请求都会被降级
(1)Hystrix会对请求情况计数,当一定时间失败请求百分比达到阀值,则被触发熔断,断路器完全关闭.
(2)默认失败比例的阀值是50%,请求次数最低不少于20次.
3.HalfOpen:半开状态
(1)Open状态不是永久的,默认五秒,五秒后进入半开状态.
(2)半开状态:熔断器会判断下一次请求的返回情况,如果成功,熔断器切回closed状态,如果失败,熔断器切回open状态.
threshold reached到达阀值
under threshold 阀值以下
在这里插入图片描述翻译之后的图片
在这里插入图片描述

熔断器的核心:线程隔离和服务降级
1.线程隔离:是指Hystrix为每个服务调用一个小的线程池,如果线程池用尽,调用立即被拒绝,默认不采用排队.
2.服务降级(兜底方法):优先保证核心业务,而非核心服务不可用或者弱可用.触发Hystrix服务降级的情况:线程池已满,请求超时.
线程隔离和服务降级后,用户请求故障时,线程不会被阻塞,更不会无休止的等待或者看到系统奔溃,至少可以看到执行结果(熔断机制)

引入熔断的依赖坐标:
< dependency>
< groupId>org.springframework.cloud< /groupId>
< artifactId>spring-cloud-starter-netflix-hystrix</ artifactId>
</ dependency>
熔断器的开启:在启动类添加注解@EnableCircuitBreaker

编写服务降级的处理方法: 使用@HystrixCommand定义fallback方法
熔断触发的方法,要与相对应方法的返回值参数与接受参数相同.

配置熔断策略:
1.常见的熔断策略配置
2.熔断后休眠时间:sleepWindoeinMilliseconds
3.熔断触发最小请求次数:requestVolumeThreshold
4.熔断触发错误比例阀值:errorThresholdPercentage
5.熔断超时时间:timeoutinMilliseconds

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud是一个用于构建分布式系统的开发工具集合。它提供了一些常用的组件和框架,包括服务注册和发现、负载均衡、断路器、分布式配置等等。在使用Spring Cloud时,有一些常见的错误和注意事项需要注意。 首先,关于Spring Boot和Spring Cloud版本对应错误。在使用Spring Cloud时,需要确保Spring Boot和Spring Cloud的版本兼容。不同版本之间可能存在依赖冲突或不兼容的情况,因此需要根据官方文档或者相关文档来选择合适的版本。 另外,Spring Cloud Config是一个用于集中管理和动态获取配置的工具。它支持从Git、SVN或本地文件系统中获取配置文件,并提供了服务器和客户端支持。你可以通过官方使用说明文档了解更多关于Spring Cloud Config的详细信息。 此外,关于选择使用Nacos还是Eureka作为服务注册和发现组件的问题。Nacos是一个功能更强大的服务注册和发现组件,它整合了Spring Cloud Eureka、Spring Cloud Config和Spring Cloud Bus的功能。使用Nacos可以实现配置的中心动态刷新,而不需要为配置中心新增集群或使用消息队列。另一方面,Eureka是Spring Cloud原生全家桶的一部分,相对来说更加稳定一些。选择使用哪个组件需要根据具体的需求和项目特点来决定。 综上所述,Spring Cloud是一个用于构建分布式系统的开发工具集合,它提供了一些常用的组件和框架。在使用Spring Cloud时,需要注意Spring Boot和Spring Cloud版本的兼容性,并可以使用Spring Cloud Config来动态获取配置。同时,可以选择使用Nacos或Eureka作为服务注册和发现组件,具体选择需要根据项目需求来决定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值