Java学习笔记(十九)

SpringCloud是基于SpringBoot的微服务框架,专注于服务治理,涵盖服务注册与发现、负载均衡、熔断降级等。与Dubbo相比,SpringCloud更注重整体微服务架构。服务熔断通过Hystrix实现,当服务不可用时,进行服务降级,返回默认值。服务注册和发现中,Eureka遵循AP原则,确保高可用。Zuul和SpringCloudGateway作为服务网关,提供路由、安全和限流等功能。Ribbon和Feign则是两种不同的客户端负载均衡器,Feign简化了调用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Cloud

什么是Spring Cloud?

Spring cloud 应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成,更专注于服务治理。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。

Spring Cloud和Dubbo的区别

Dubbo关注的领域是Spring Cloud的一个子集。Dubbo专注于服务治理,其在服务治理、灰度发布、流量分发方面比Spring Cloud更全面。Spring Cloud覆盖整个微服务架构领域。

Dubbo使用RPC调用效率高一些,Spring Cloud使用HTTP调用效率低,使用更简单。

REST和RPC的区别

REST风格的系统交互更方便,RPC调用服务提供方和调用方之间依赖太强。

REST调用系统性能较低,RPC调用效率比REST高。

REST的灵活性可以跨系统跨语言调用,RPC只能在同语言内调用。

REST可以和Swagger等工具整合,自动输出接口API文档。

SpringCloud如何实现服务的注册和发现

服务在发布时,指定对应的服务名(服务名包括了IP地址和端口) 将服务注册到注册中心(eureka或者zookeeper)。

这一过程是springcloud自动实现 只需要在main方法添加@EnableDisscoveryClient 同一个服务修改端口就可以启动多个实例。

调用方法:传递服务名称通过注册中心获取所有的可用实例 通过负载均衡策略调用(ribbon和feign)对应的服务。

什么是服务熔断和服务降级?
 

熔断机制:是应对雪崩效应的一种微服务链路保护机制。当某个微服务不可用或者响应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现,Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内调用20次,如果失败,就会启动熔断机制。
​ 服务降级:一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然会出现局部的错误,但可以避免因为一个服务挂机,而影响到整个架构的稳定性。

​ Hystrix相关注解:

@EnableHystrix:开启熔断

@HystrixCommand(fallbackMethod=”XXX”):声明一个失败回滚处理函数XXX,当被注解的方法执行超时(默认是1000毫秒),就会执行fallback函数,返回错误提示。

项目中zuul常用的功能

提供动态路由
提供安全、鉴权处理
跨域处理
全局动态路由的hystrix(熔断、降级、限流)处理
服务网关的作用

简化客户端调用复杂度,统一处理外部请求。

数据裁剪以及聚合,根据不同的接口需求,对数据加工后对外。

多渠道支持,针对不同的客户端提供不同的网关支持。

遗留系统的微服务化改造,可以作为新老系统的中转组件。

统一处理调用过程中的安全、权限问题。

Spring Cloud中的网关有:Zuul和Spring Cloud Gateway,最新版本中推荐使用后者。

ribbon和feign区别

​ Ribbon添加maven依赖 spring-starter-ribbon

使用@RibbonClient(value=“服务名称”) ,使用RestTemplate调用远程服务对应的方法。

​ feign添加maven依赖 spring-starter-feign

服务提供方提供对外接口 调用方使用 在接口上使用@FeignClient(“指定服务名”)

1.启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的@EnableFeignClients。
2.服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
3.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。 Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

ribbon的负载均衡策略

1.RoundRobinRule: 轮询策略

2.RandomRule: 随机策略

3.BestAvailableRule: 最大可用策略,即先过滤出故障服务器后,选择一个当前并发请求数最小的;

4.WeightedResponseTimeRule: 带有加权的轮询策略,对各个服务器响应时间进行加权处理,然后在采用轮询的方式来获取相应的服务器;

简述什么是CAP,并说明Eureka包含CAP中的哪些?

**CAP理论:**一个分布式系统不可能同时满足C (一致性),A(可用性),P(分区容错性).由于分区容错性P在分布式系统中是必须要保证的,因此我们只能从A和C中进行权衡.

Eureka 遵守 AP:

1.Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。
2.而Eureka的客户端在向某个Eureka 注册或查询时,如果发现连接失败,则会自动切换至其他节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查的信息可能不最新的不保证强一致性。
Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?

Zookeeper保证了CP(C:一致性,P:分区容错性)

​ Eureka保证了AP(A:高可用)

链路跟踪Sleuth
​ 当我们项目中引入Spring Cloud Sleuth后,每次链路请求都会添加一串追踪信息,格式是[server-name, main-traceId,sub-spanId,boolean]:

1.server-name:服务结点名称。
2.main-traceId:一条链路唯一的ID,为TraceID。
3.sub-spanId:链路中每一环的ID,为SpanID。
4.boolean:是否将信息输出到Zipkin等服务收集和展示。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值