SpringCloud学习笔记(1)--工具

本文详细介绍了SpringCloud的核心组件,包括Eureka服务注册与发现、Ribbon负载均衡、Hystrix熔断机制、Feign声明式客户端、Zuul API网关、Config配置中心、Bus消息总线以及Sleuth+Zipkin链路跟踪。同时,阐述了各组件的功能、应用场景及优缺点,帮助读者深入理解SpringCloud的微服务架构。
摘要由CSDN通过智能技术生成

SPRING CLOUD

微服务整体解决方案,框架集,全家桶而不是一个单独的框架.

包括:
1.eureka 注册中心
2.ribbon 负载均衡 重试
3.hystrix 降级 熔断
4.htstrix dashboard 仪表盘,hystrix数据监控
5.turine 聚合监控数据
6.feign 声明式客户端,整合ribbon(默认启用)/hystrix(不推荐)
7.zuul api网关,统一的调用入口,统一的权限校验;整合ribbon(默认启用负载均衡,默认不启用重试);整合hystrix(默认启用降级熔断,但需要自己写降级代码)
8.config 配置中心,默认git(github/码云/…)存储,但是也可以用本地存储或数据库存储
9.bus 消息总线,配置刷新
10.sleuth+zipkin 链路跟踪

1.eureka

注册中心(是微服务的核心)
eureka    VS     zookeeper
  A       P          C
可用性  分区容错性  一致性
对等结构集群     主从结构集群

注册/拉取

服务启动后每30s尝试连接一次eureka,并把地址向注册中心注册,
而eureka每30s刷新一次地址值,即从服务器拉取一次地址值.
调用其他服务,从注册中心发现其他服务的地址.

心跳及自我保护模式:

服务每30s发送一次心跳数据,eureka每30s接收一次心跳数据
连续三次丢失服务的心跳,就会删除其注册信息

eureka 的自我保护状态:
心跳失败的比例,在15分钟内是否低于85%,如果出现了低于的情况,Eureka Server会将当前的实例注册信息保护起来,同时提示一个警告,一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据。也就是不会注销任何微服务

2.ribbon(不会单独使用)

底层是使用 RestTemplate 进行 Rest api 调用;
RestTemplate 是用来调用其他微服务的工具类,封装了远程调用代码,提供了一组用于远程调用的模板方法;
负载均衡 - @LoadBalanced rt.getForObject(“http://service-id/…”);
重试 - spring-retry依赖,yml配置参数,代码配置超时时间参数.

3.hystrix - 快速失败达到系统容错的目的(不会单独使用)

降级 - HystrixCommand(fallbackMethod = “降级方法”), 实现降级代码
熔断 - 只要加了降级 熔断就默认配置
10s - 20次 - 50%失败执行降级代码 - 触发熔断
半开状态, 尝试发送一次请求,失败继续保持打开状态,成功自动关闭断路器恢复正常

4.hystrix dashboard

仪表盘, hystrix数据监控
actuator暴露监控端点: hystrix.stream

5.turbine

聚合监控数据
app-config:配置服务id(多个)
cluster-name-expression: new String("集群名")

6.feign

声明式客户端:只需要声明一个远程调用接口
通过接口可以调用远程服务
@FeignClient("调用的远程服务名")
public interface ItemFeignClient(){
	@GetMapping("/{orderId}") -- 指出访问远程服务的那个路径 以及 传递的参数
	JsonResult<List<Item>> getItem(String orderId);
}

feign + ribbon
	已经启用ribbon的负载均衡和重试
	默认配置:
	ConnectTimeout:1000
	ReadTimeout:1000
	MaxAutoRetries:0
	MaxAutoRetriesNextServer:1

feign + hystrix
	feign 默认不启用 hystrix

	启用hystrix: 
		启用: feign.hystrix.enable = true
		添加完整 hystrix 依赖,添加actuator 依赖
		添加 @EnableCircuitBreaker
		添加降级代码
			@FeignCilent(name = "服务id", fallback = 降级类)
			定于降级类,实现声明式客户端接口
			只要实现降级就有了熔断
		添加暴露监控端点 h.s

7.zuul(neflix公司写的,springcloud 进行集成)

	--springcloud自己开发了一个网关:spring cloud gatway
api网关

统一的调用入口(向后台转发)
	配置路由规则(默认配置):
	zuul:
		routes:
			服务id: /服务id/**
			item-service:/item-service/**
			
统一的权限校验 
	继承ZuulFilter抽象类,添加自定义过滤器
	@Component 交给spring管理
	
zuul + ribbon
	默认自动启用负载均衡
	默认不启用重试
		启用重试 - 
			zuul.retryable = true
			添加spring-retry 依赖
			重试的参数配置

zuul + hystirx
	zuul已经集成了hystrix,默认启用hystrix
	但是实现降级:
		实现 FallbackProvide 接口,定义降级类
		@component 交给spring管理
	暴露监控端点: h.s

zuul + filter过滤器
	定义过滤器,继承 ZuulFilter抽象类
	过度设计:返回值 Object
	zuul的第五个过滤器 向context(ctx) 对象放了serviceid
	想要使用服务id 必须在第五个过滤器后添加自定义过滤器

zuul + cookie过滤

8.feign 和 zuul 的区别

	1>都可以实现调用服务 都可以整合 hystrix ribbon
	
	2>feign
		后台微服务之间调用 后台的每个服务想要调用其他服务都要添加feign
		
	3>zuul
		部署在最前面,作为整个系统的入口

	4>feign不推荐使用 hystrix:
			每个位置添加 降级 熔断(复杂)
			特殊应用 自己添加断路器(例如热水器)
			绝大多数应用统一在前面(zuul)添加断路器(例如家庭电箱)
		
	5>zuul不推荐使用重试: 
			后面服务太多,重试一下要执行太多服务
			会对后台整条调用链路造成很大压力
			而服务之间的调用(feign)可以设置重试 影响一台而不是所有

9.config 配置中心(默认使用git存储)

1>相当于一个整个系统的中心服务
2>所有的配置文件不在项目中,而是放在配置中心
3>所有服务启动时都要去连接配置中心 从中下载配置 得到配置根据配置去启动	
4>方便管理维护配置,统一维护和管理配置文件
5>配置中心不直接保存配置文件,而是默认存放到一个git仓库(官方推荐)
	连接git仓库,从中下载所有配置文件.充分的利用了git仓库中代码存储管理功能,对配置文件进行管理维护

一.GitHub
		1.注册: - wz4j - wuze19976
		2.将项目保存到本地仓库 commit
		3.将项目上传到git仓库 push
		4.从git仓库拉取项目 pull


二.客户端从配置中心获取配置
	添加 config client 依赖
	添加 bootstrap.yml 配置文件,指定 连接的配置中心服务id和下载的配置文件	
		
三.refresh配置动态刷新:
	(只能对一台服务器指定刷新配置)
	1.添加actuator依赖,暴露 refresh刷新 端点
	2. @RefreshScope 指定到需要重新注入数据的对象
	3. @ConfigurationProperties 根据配置文件刷新
	4.向 refresh 刷新端点发送 post 请求		
	
	只能刷新一些自定义配置,一些基础配置不允许刷新,例如:
		server.port
		application.name
		eureka.client.service-url.defaultZone
		...........

10.BUS 消息总线 配置刷新

Q:---> 如何配置所有服务器同时执行刷新?
	1.不能每个服务都配置刷新 --> 服务器太多,操作复杂
	2.--->使用 BUS工具(消息总线)
		1>同时多态服务器执行配置刷新
		2>BUS 是一个 :消息队列服务器/消息中间件服务器(重要)的 连接器
		3>配置中心向BUS工具发送一条刷新指令的消息,
			  BUS将指令发送给所有的服务器,服务器执行指令,
			  重新连接配置中心,刷新配置信息
		4>只有一个解耦作用
		5>本质上是由消息队列服务器来完成

11. sleuth + zipkin --链路监控/链路跟踪

-- 链路越来越大 微服务越来越多 调用关系非常复杂 调用链路非常长

1>sleuth
	添加 sleuth 依赖 -- 就可以产生链路跟踪日志,日志发送到 rabbitmq
	
	a--->b--->c--->d
	[服务id,请求id,span id,是否发送到zipkin]
	a,26fe1621w1f6a 26fe1621w1f6a false  
	b,26fe1621w1f6a 156ds1fs++e1f false  
	c,26fe1621w1f6a 1561651651sf1 false
	d,26fe1621w1f6a 1f5e5f16ads6f false
	默认链路跟踪数据的 10% 传递到 zipkin 分析展现

2>zipkin
	zipkin client 依赖
	rabbitmq 依赖 和连接信息
	zipkin-server-2.12.9-exec.jar
	执行 zipkin 启动命令

消息中间件优点:

解耦

冗余〈存储):有些情况下处理数据的过程会失败,造成数据丢失,可使用消息中间件进行数据持久化;

扩展性:消息中间件解耦了应用的处理过程,所以提高消息入队和处理的效率是很容易的,只要另外增加处理过程即可,不需要改变代码,也不需要调节参数。

削峰: 在访问量剧增的情况下,程序不会因为突发的超负荷请求而崩溃。

可恢复性: 当系统一部分组件失效时,不会影响到整个系,消息中间件降低了进程间的耦合度,所以即使 个处理消息的进程挂掉,加入消息中间件中的消息仍然可以在系统恢复后进行处理。

顺序保证: 在大多数使用场景下,数据处理的顺序很重要,大部分消息中间件支持一定程度上的顺序性

缓冲: 在任何重要的系统中,都会存在需要不同处理时间的元素。消息中间件通过个缓冲层来帮助任务最高效率地执行,写入消息中间件的处理会尽可能快速 该缓冲层有助于控制和优化数据流经过系统的速度。

异步通信: 在很多时候应用不想也不需要立即处理消息,消息中间件提供了异步处理机制,允许应用把 些消息放入消息中间件中,但并不立即处理它,在之后需要的时候再慢慢处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值