SpringCloud入门使用

SpringCloud: 微服务架构(一堆技术,大概21种之多)
服务: 一个Tomcat就指一个服务,指一个应用程序
微服务的概念: (单,微,独)
在这里插入图片描述

分布式: 把一个大项目,根据业务需求拆分成多个服务,部署在不同的服务器上,分布式开发,分布式部署
高并发: 系统运行过程中,短时间内遇到大量请求
高可用: 侧重备份机器, 利用集群中系统 的冗余,当系统中某台机器发生损坏的时候,其他后备的机器可以迅速的接替它来启动服务。在极端的环境下,也可以正常提供服务,哪怕是网线断了
负载均衡: 假如一台机器不能满足高并发的请求访问,那么就两台,两台还满足不了就增加到三台,这种方式我们称之为水平扩展,如何实现请求的平均分配便是负载均衡了。
集群: 就是把多个相同的代码搭建到多台服务器上.集群之后必须负载均衡;想要负载均衡必须集群
rpc: 远程过程调用协议。一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。比较正式的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。那么我们至少从这样的描述中挖掘出几个要点:
cap: 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

一致性(Consistency) (等同于所有节点访问同一份最新的数据副本)
可用性(Availability)(每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据)
分区容错性(Partition tolerance)(以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。)


微服务注册中心Eureka

原理图解
3

Eureka就好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。Eureka说白了就是一个注册服务中心。
1.导jar包
2.加注解
3.加配置(yml)

创建EurekaServer服务端时勾选会自动导入Eureka的jar包

在这里插入图片描述

在启动类上加注解@EnableEurekaServer
在这里插入图片描述

注册到Eureka的服务,目前有一个
在这里插入图片描述


Eureka客户端

<!-- Eureka客户端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

在这里插入图片描述

消费者从Eureka获取服务
在这里插入图片描述
在这里插入图片描述

服务续约

服务提供者在Eureka注册后,会维持一个心跳,告诉EurekaServer:“我还活着”。这个我们称为服务的续约(renew);
修改服务续约

eureka:
  instance:
    lease-expiration-duration-in-seconds: 2 # 2秒即过期
    lease-renewal-interval-in-seconds: 1 # 1秒一次心跳

负载均衡Ribbon

将请求分到不同的服务器(轮询,随机),默认方式是轮询

在这里插入图片描述
在这里插入图片描述

源码追踪

这个类通过提供者名称帮我们获得了Ip和端口号
在这里插入图片描述

继续追踪,可以看到,我们的两次请求分发到了不同的服务器
在这里插入图片描述
在这里插入图片描述

修改负载均衡的规则的方法
在这里插入图片描述
user-service: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
格式是:{服务名称}.ribbon.NFLoadBalancerRuleClassName,值就是IRule的实现类。

重试机制

因为服务剔除的延迟,consumer并不会立即得到最新的服务列表,此时再次访问你会得到错误提示:
在这里插入图片描述

因此Spring Cloud 整合了Spring Retry 来增强RestTemplate的重试能力,当一次服务调用失败后,不会立即抛出异常,而是再次重试另一个服务。
当访问到某个服务超时后,它会再次尝试访问下一个服务实例,如果不行就再换一个实例,如果不行,则返回失败。切换次数取决于MaxAutoRetriesNextServer参数的值

在这里插入图片描述

引入spring-retry依赖

<dependency>
	<groupId>org.springframework.retry</groupId>  
	<artifactId>spring-retry</artifactId>
</dependency>

Hystrix熔断器

在这里插入图片描述

Hystrix相当于服务隔离,在高并发领域,分布式系统中,可能因为一个小功能扛不住压力宕机了,导致其他服务也跟着宕机,最终导致整个系统宕机,采用Hystrix处理,可以有效保护其他服务正常提供服务
服务器超过1s就会熔断
服务降级: 当服务繁忙时,如果服务出现异常,不是粗暴的直接返回报错,而是返回一个友好的提示,虽然拒绝了用户的访问,但是会返回一个结果
Hystrix工作机制

测试
pom文件内导入熔断器的坐标

<dependency>  
	<groupId>org.springframework.cloud</groupId>    
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId> 
</dependency>

在消费者启动类添加注解,开启熔断
在这里插入图片描述

声明一个失败时的回滚函数
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

优化
在这里插入图片描述

重试机制的默认时间和熔断的默认时间均为1000ms,所以先执行了熔断机制,因此,重试机制的时间要小于熔断的默认时间
在这里插入图片描述

Feign 远程调用

把Rest的请求进行隐藏,不用自己拼接url,拼接参数, 一切都交给feign去做,大大简化了调用服务时的代码.但是Feign的使用限制于SpringCloud的项目,RestTempLate的使用场景更为广泛
导入依赖

<dependency> 
	<groupId>org.springframework.cloud</groupId> 
	<artifactId>spring-cloud-starter-openfeign</artifactId> 
</dependency>

开启feign功能

在这里插入图片描述

feign客户端
在这里插入图片描述
调用
在这里插入图片描述

ZUUL 网关

三个必须具备的功能:鉴权,动态路由,负载均衡
在这里插入图片描述

使用
添加zuul依赖
在这里插入图片描述

在启动类添加注解,开启zuul功能
在这里插入图片描述

zuul整合Eureka客户端,实现动态路由,默认路由规则,服务名称的本身
在这里插入图片描述

zuul实现请求鉴权,我们一般通过zuul提供的过滤器实现
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值