SpringCloud微服务笔记
分布式配置中心的特点:
统一管理:
配置中心服务器负责配置的管理(新增、修改、删除、发布),集成了配置中心客户端的微服务程序可以统一从配置中心
服务端拉取配置,从而实现整个微服务系统的统一配置管理
区分环境:
一个微服务应用中的某些配置项,在不同的环境(开发、测试、生产)通常是不同的,作为分布式配置中心需要具有隔离不
同的,作为分布式配置中心需要具有隔离不同环境的功能,使得同一个微服务在不同环境能拉取到对应的配置
实时刷新:
当配置中心服务端中的配置发生了修改时,配置中心客户端需要能实时监听到配置的改变,使得微服务应用程序可以实时
获取到最新配置,并且不用重新部署应用程序
权限控制:
在配置中心中,可以针对不同的角色或用户设置对应的权限,比如张三可以新建配置项,但不能发布配置;比如小明可以查看
配置项,但不能修改配置
版本控制:
在使用配置中心的过程中,难免会出现误操作,而这个时候就需要进行版本回退,所以作为配置中心,是一定要支持版本控制的
灰度发布:
在需要发布一项配置时,如果需要发布到多个实例(集群),那么此时可以只发布到部分实例,待测试通过后,再发布到全部实例,
这就是配置的灰度发布
常见的配置中心组件:
spring Cloud Config
阿里Nacos
携程Apollo
谷歌consul
注册中心的特点及什么是注册中心:
注册中心介绍:
注册中心相当于微服务架构中的地址通讯录,每个微服务会将服务及其地址注册到注册中心,服务消费者在调用某个微服务
之前会先注册中心查找服务地址,然后进行调用
注册中心的特点:
服务的自动注册:
微服务应用在启动时,通过注册中心客户端组件,将服务相关信息自动注册给注册中心服务端
服务的健康检查:
当已经注册到注册中心的微服务实例宕机后,注册中心服务端能发现实例已经宕机,并把相关信息从注册中心删除掉
服务的自动发现:
服务消费者需要能实时监听到注册中心中服务信息的变更,以能在真正调用服务时不会出现错误
常见的注册中心组件:
Zookeeper
Eureka
Nacos
Consul
服务网关特点及介绍:
什么是服务网关:
服务网关是整个微服务架构中对外的统一入口,所有的客户端都能通过统一的网关使用微服务,服务网关起到了隔离外部访
问和内部系统的作用,服务网关是微服务架构中的一个标配组件。
服务网关的特点:
高并发:
作为微服务架构中的对外入口,必须能支持高并发,能承担更高的并发量,并保证高性能
安全:
服务网关具有权限认证、黑名单、白名单等保证网关安全的功能
路由转发:
服务网关能根据请求和配置将请求在高压办法到对应的后端微服务上去
监控于限流:
作为整个系统的流量入口,服务网关要能监控流量情况,遇到突发情况时能及时限流,保证整个系统的稳定
灰度发布:
当某个微服务有新版本更新上线时,可以利用服务网关进行流量的切换,实现该微服务的灰度发布
服务重试:
当服务网关调用某个服务失败后,可以通过服务网关设置充实策略来重新调用该服务
服务别名:
可以在服务网关中给某个或某些微服务设置别名,从而对外屏蔽内部微服务相关信息
常见的服务网关组件:
Kong
Zuul
Spring Cloud Gateway
负责均衡特点及介绍:
什么是负载均衡:
负载均衡是指将访问流量根据负载均衡算法分发到后端服务器的流量分发控制服务,通过负载均衡可以提高微服务的
可用性以及性能
常见负载均衡算法:
简单轮询:
将请求按顺序分发给后端服务器上,不关心服务器当前状态,比如后端服务器的性能、当前的负载
加权轮询:
根据服务器自身的性能给服务器设置不同的权重,将请求按顺序和权重分发给后端服务器,可以让性能高的机器
处理更多的请求
简单随机:
将请求随机分发给后端服务器上,请求越多,各个服务器接收到的请求越平均
加权随机:
根据服务器自身的性能给服务器设置不同的权重,将请求按各个服务器的权重随机分发给后端服务器
一致性哈希:
根据请求的客户端ip、或请求参数通过哈希算法得到一个数值,利用该数值取模映射出对应的后端服务器,这样
能保证同一个客户端或相同参数的请求每次都使用同一台服务器
最小活跃数:
统计每台服务器上当前正在处理的请求数,也就是请求活跃数,将请求分发给活跃数最少的后台服务器
常见负载均衡组件:
nginx
lvs
ribbon
RPC调用特点及介绍:
什么是RPC调用:
RPC就是远程过程调用,对于Java程序而言,RPC就是远程方法调用,表示一个方法调用远程的另外一个方法,微服务架
构中一个服务调用另外一个服务就可以用RPC调用
RPC调用与HTTP调用区别:
HTTP调用使用的是HTTP协议,是网络7层中的应用层协议,HTTP协议规定了数据传输的格式,Resutful风格就可以通过
HTTP协议来实现,RPC不是网络层面的协议,而是更上层的更灵活的通信协议,RPC调用可以自定义数据格式、数据传输方式,
只要能保证调用到远程方法即可
常用的RPC调用组件或框架
Doubbo
gRPC
Thrift
Feign
服务熔断的特点及介绍:
什么是服务熔断:
服务熔断是指,当服务A调用的某个服务B不可用时,上游服务A为了保证自己不受影响,从而不再调用服务B,直接返回一个
结果,减轻服务A和服务B的压力,直到服务B恢复
什么是熔断器:
实现熔断功能的叫熔断器,代表组件为Hystrix、Sentinel
熔断器的三种状态:
Closed:关闭状态
当调用失败次数达到阈值时则启动熔断器
Open:打开状态
此时不会真正的调用下游服务,而是直接返回,当过了某段时间后,熔断器会进入到半打开状态
Haif-Open:半打开状态
此时会有部分请求访问下游服务,如果这些请求都调用成功了,则认为下游服务恢复了,那么则关闭熔断器,否则熔断器
回到打开状态
服务降级的特点及介绍:
什么是服务降级:
服务降级是指,当发现系统压力过载时,可以通过关闭某个服务,或限流某个服务来减轻系统压力,这就是服务降级
服务降级与服务熔断的区别:
1、都是为了防止系统崩溃
2、都让用户体验到某些功能暂时不可用
3、熔断是下游服务故障触发的,降级是为了降低系统负载
什么是服务雪崩:
服务A调用服务B,服务B调用服务C,此时大量请求突然调用服务A,假如服务A本身能抗住这些请求,但是服务C扛不住,导致
服务C请求堆积,从而服务B请求堆积,从而服务A不可用,这就是服务雪崩·,解决方式就是服务降级和服务熔断。
服务限流的特点及介绍:
什么是服务限流:
服务限流是指在高并发请求下,为了保护系统,可以对访问服务的请求进行数量上的限制,从而防止系统不被大量请求压垮,
在秒杀中,限流是非常重要的
常用的限流算法:
固定窗口计时器
滑动窗口计时器
令牌桶
漏桶
全局锁的特点及介绍:
什么是全局锁:
全局锁,就是我们常说的分布式锁,是分布式、微服务架构中的一种锁机制,通过全局锁可以很好的在分布式系统中互斥使用
共享资源
全局锁的实现原理:
Zookeeper:利用Zookeeper的watch机制与临时节点特性
Redis:利用Redis的消费订阅机制与数据超时特性
常见的全局锁实现组件:
Redisson
Curator
控制总线的特点及介绍:
什么是控制总线:
控制总线也称消息总线,是微服务系统中用来连接系统中所有服务节点的,微服务中的所有服务节点可以通过控制总线来进
行通讯
控制总线的应用场景:
目前,Spring Cloud Bus就是控制总线的具体实现,某个微服务可以通过Spring Cloud Bus来广播事件,而其他微服务可以收到
事件并进行相关处理。
分布式事务的特点及介绍:
什么是分布式事务:
在一次请求中,所涉及的分散在多个微服务上的操作要保证同时成功或同时失败,这就是分布式事务,比如创建订单减库存、银
行转账等
实现分布式事务的方式:
直接通过数据库
通过消息队列
两阶段提交
三阶段提交
分布式事务中的三个角色:
事务协调器
事务管理者
资源管理者
常见的分布式事务框架
seata
lcn
bytetcc
服务安全的特点及介绍:
什么是服务安全:
对于一个企业来说,微服务系统中的服务安全性越来越重要,服务的认证和授权是企业必需具备的,Spring Cloud Security是Spring Cloud
提供的微服务安全组件
服务安全的特性:
1、可扩展、可配置的认证和授权
2、单点登录
3、防止会话固定、点击劫持、跨网站请求伪造等攻击
4、与Servlet API集成
链路追踪的特点及介绍:
什么是链路追踪:
链路追踪为微服务系统提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等功能,可以帮助开发者快速分析和诊断微
服务架构下的性能瓶颈
链路追踪的功能:
分布式调用链查询和诊断
应用性能实时汇总
分布式拓扑动态发现
多语言开发程序接入
丰富的下游对接场景
常见的链路追踪的技术:
Sleuth
Zipkin
集群管理的特点及介绍:
什么是集群管理:
集群管理是指,对于微服务系统中的某个服务集群所提供的针对集群管理的功能,Spring Cloud Cluster的职责就是集群管理
集群管理有哪些功能
领导者选举
一致性存储
集群状态管理
一次性tokens
事件驱动的特点及介绍:
什么是事件驱动:
事件驱动就是消息驱动,在·Spring Cloud中提供了Spring Cloud Steam来实现事件驱动,有了事件驱动,在微服务系统中可以更方便
的通过发送消息来进行通信
事件驱动中的概念:
目标绑定器,目标指的是kafka或rabbitmq
绑定桥梁,连接消息系统和应用程序
消息,应用程序和消息系统之间传递的数据
事件驱动的特点:
异步处理
流量削峰
服务解耦
云连接器的特点及介绍:
什么是云连接器:
云连接器可以用来更方便的连接部署在云上的各种服务,Spring Cloud中Spring Cloud Connectors就是云连接器的组件实现
目前支持的云平台:
Spring Cloud Cloud Foundry
Spring Cloud Heroku
函数计算的特点及介绍:
什么是函数计算:
函数计算也被称为函数式编程,是实现Serverless的一种手段,企业如果能使用函数计算大大节约成本,在Spring Cloud中提供
了Spring Cloud Function来开发基于云平台的函数计算
函数计算的特点:
支持响应式等编程风格
输入输出类型透明转化
流数据处理
同一个jvm中运行多版本函数
打包函数到指定云平台
版本框架:springboot 3.3.4——springCloud2023.0.3——springCloudAlibaba 2023.0.3.2
组件版本:Nacos 2.4.3——Sentinel 1.8.8——Seata 2.2.0
SpringCloud需要的版本依赖:
<dependency>
<groupId>org.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2023.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
需安装对应配置文件nacos
启动方法:nacos——bin 使用cmd启动(在导航栏中输入cmd回车即可),输入口令: startup.cmd -m standalone
对应端口:在启动后的对话框中找到prot:的键值一般为8848(在亮起的Nacos logo的右边),在服务器中输入localhost:对应端口号/nacos即可访问
注册中心——服务注册:
步骤1:
启动微服务
核心:
SpringBoot 微服务web项目启动
步骤2:
引入服务发现依赖
核心:
spring-cloud-starter-alibaba-nacos-discovery
步骤3:
配置Nacos地址
核心:
spring.cloud.nacos.sever-addr=127.0.0.1:8848
步骤4:
查看注册中心效果
核心:
访问http://localhost:8848/nacos
步骤5:
集群模式启动测试
核心:
单机情况下通过改变端口模拟器服务集群
注册中心-远程调用-实现步骤:
注册中心宕机,远程调用还能成功吗?
如果是第一次调用注册中心宕机,则远程调用不能成功
如果已经调用过注册宕机,则远程调用能成功
步骤1:
引入负载均衡依赖
核心:
spring-cloud-starter-loadbalancer
步骤2:
测试负载均衡API
核心:
LoadBalancerClient
步骤3:
测试远程调用
核心:
RestTemplate
步骤4:
测试负载均衡调用
核心:
@LoadBalanced
注册中心大致步骤:
1.引入spring-cloud-stater-ablibaba-nacos-discovery依赖,配置Nacos地址
2.@EnableDisscoveryClient开启服务发现功能
扩展:
1.DiscoveryClient 获取服务实例列表
2.LoadBalancerClient 负载均衡选择一个实例
(需要引入spring-cloud-starter-loadbalancer)
3.RestTemplate 可以发起远程调用
配置中心:
Nacos中的数据集和applicaton.properties有相同的配置项,哪个生效?
先导入优先,外部优先
基本应用:
引入依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<dependency/>
application.properties配置:
spring.cloud.nacos.server-addr=127.0.0.1:8848
spring.config.import=nacos:service-order.properties
创建 data-id(数据集):
数据集: service-order.properties
内容: order.timeout=10min
order.auto-confirm=7d
动态刷新:
使用步骤:
@Value("${xx}")获取配置+@RefreshScope实现自动刷新
@ConfigurationProperties 无感自动刷新
NacosConfigManager监听配置变化
数据隔离:
需要描述
项目有多套环境: dev,test,prod
每个微,服务,同一种配置,在每套环境的值都不一样
如: database.properties
如: common.properties
项目可以通过切换环境,加载本环境的配置
难点:
区分多套环境
区分多种微服务
区分多种配置
按需加载配置
大致步骤:
1.引入 spring-cloud-starter-alibaba-nacos-config 依赖,配置Nacos地址
2.添加数据集(data-id),使用spring.config.import导入数据集
3.@Value + @RefreshScope 取值 + 自动刷新
4.@ConfiguratonProperties 批量绑定自动更新
5.NacosConfingManager 监听配置变化
扩展:
配置优先级:
namespace区分环境、group区分微服务、data-id区分配置 实现 数据隔离+环境切换
OpenFeign:
Declarative REST Client
·声明式 REST 客户端 vs 编程式 REST 客户端 (RestTemplete)
·注解驱动
·指定远程地址: @FeignClient
·指定请求方式: @GetMapping、@PostMapping、@DeleteMapping ...
·指定携带数据: @RequestHeader、@RequestParam、@RequestBody ...
·指定结果返回: 响应模型
xml配置:
<dependency>
<groupld>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
超时控制:
订单服务向商品服务发送请求,当商品服务器宕机,将会无法连接或者无法读取或速度慢,此时如果订单服务
一直死等可能会出现服务雪崩,商品服务的卡慢导致订单服务卡慢,导致整个服务都在卡慢,一个服务的不可用导
致整个服务的雪崩,解决方式:超时控制
两种超时:
connectTimeout:连接超时
建立连接——发送请求——处理业务——返回数据
readTimeout:读取超时
Sentinel(服务保护(限流、熔断降级)):
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Spring Cloud Alibaba Sentinel以流量为切入
点、从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。
定义资源:
主流框架自动适配(Web Servlet、Dubbo、Spring Cloud、Spring WebFlux、Reactor);
所有Web接口均为资源
编程式: SphU API
声明式: @SentineLResource
定义规则:
流量控制 (FlowRule)
熔断降级 (DegradeRule)
系统保护 (SystemRule)
来源访问控制 (AuthorityRule)
热点参数 (ParamFlowRule)
工作原理:
用户——资源(Sentinel检查)——规则——违反——否——放行——结束
|
是抛出异常——兜底处理——无——默认错误——结束
|
有——执行fallback——结束
java -jar sentinel-dashboard-1.8.8.jar 启动Sentinel命令在soft文件下
流控规则(FlowRule)
客户端发送大量请求到App,Sentinel可以选择放行业务或者限流丢弃的请求,限制多余请求,从而保护系统
资源不被耗尽
直接策略
直接对一个端口进行访问量限制
链路策略
适用于秒杀策略,当一个端口被过多访问后会对其进行限制,对其他端口没有限制
关联策略
当两个端口在流控中心被关联时,一个端口被访问过多的次数后突然访问另一个则会被限制
流控效果(FlowRule)
快速失效(直接拒绝)
只有快速失败支持流控模式(直接、关联、链路)的设置,设置后请求每秒只能通过对应设置的请求数
Warm Up(预热/冷启动)
匀速排队,在系统没有反应过来之前会根据系统负载力来处理请求,在系统彻底反应过来后每秒可以处
理对应设置的请求数
匀速排队:
如果每秒设置请求数量为2个,那么后端每次只能处理两个,多余的请求不超过预定等待时间会在后边排队
等待,保证每一个请求都得到相应,超过的会被丢弃
熔断降级(DegradeRule)
熔断降级作为保护自身的手段,通常在客户端(调用端)进行配置,其作用:切断不稳定调用,快速返回不积压,避免雪
崩效应,在规定sentinel的簇点链路下选择对用的服务url点击熔断进行选择
慢调用比例:
在规定的时间内访问目标服务器,如果超出访问时常,当次数到达设定次数后将会进行熔断,客户端直接调用
兜底回调,设定熔断时常内不再访问服务端,在设置的熔断时间过后正常访问,如果有一次超出设定时常继续熔断
异常比例:
在设定时间内客户端访问服务端,如果客户端返回报错,达到对应比例后,将会进行熔断,客户端直接调用兜底
回调,设定熔断时常内不再访问服务端,在设置的熔断时间过后正常访问,如果有一次报错继续熔断
异常数:
在设定统计时常内,异常数到达设定异常次数,将会进行熔断,客户端直接调用兜底回调,设定熔断时长内不再
访问服务端,设置熔断时间过后正常访问,如果有一次报错继续熔断
热点规则
常用于秒杀抢购,对不同用户的限制和商品的限制
网关:
predicate -断言
spring:
cloud:
gatewat
routes:
- id: after_route
uri: https://example.org
predicates:
- Cookie=mycookie,mycookievalue
filters(过滤器):
rewirtePath(l路径重写):
这个规则的作用是将所有指定开头的路径重写为去掉指定开头部分的路径,例如:/api/product/items,则
会被重写为:/items
AddResponseHeader(定义相应头):
他可以定义对应的响应头,在相应头中设置参数与值
再filters前加上default会变成默认的及所有服务都可享用该过滤器
