1、什么是 Spring Cloud?
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如 服务发现注册
、配置中心
、智能路由
、消息总线
、负载均衡
、断路器
、数据监控
等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
2、为什么要使用Spring Cloud?
由于单体结构的应用随着系统复杂度的增高,带来了如下问题
- 代码结构混乱
- 开发效率变低
- 排查解决问题成本高
3、Spring Cloud的优缺点?
4、 Spring Cloud和Spring Boot的区别?
- SpringBoot专注于快速方便的开发单个个体微服务。
- SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务
- SpringBoot可以离开SpringCloud独立使用开发项目, 但是SpringCloud离不开SpringBoot ,属于依赖的关系
- SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。
5、Spring Cloud 和dubbo区别?
- 服务调用方式
- dubbo是RPC
- SpringCloud采用Rest Api
- 注册中心
- dubbo 是nacos、zookeeper
- SpringCloud是eureka,也可以是nacos、zookeeper
- 服务网关
- dubbo本身没有实现,只能通过其他第三方技术整合,
- SpringCloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。
6、spring cloud断路器的作用是什么?
答:在分布式架构中,断路器模式的功能也相似。当服务单元出现故障(类似于电器短路)时,通过断路器故障监控(类似于熔断保险丝)将错误响应返回给调用器,而不是长时间等待。这样,由于调用故障服务,线程就不会被长期占用,也不会被释放,以避免故障在分布式系统中的传播。
7、spring cloud的核心组件有哪些?
答:(1)Eureka:发现服务注册;(2)Feign:拼接请求基于动态代理机制,根据注释和选择的机器 url 地址,发起请求;(3)Ribbon:实现负载均衡,从多台服务机器中选择一台;(4)Hystrix:提供线程池,不同的服务采用不同的线程池,实现不同服务调用的隔离,避免服务雪崩的问题;(5)Zuul:网关管理,由 Zuul 向相应服务转发网关请求。
8、spring 如何注册cloud服务?
答:第一,服务发布时,指定相应的服务名称,在注册中心注册服务(eureka zookeeper);二是增加注册中心@EnableEurekaServer,服务用@EnableDiscoveryClient,然后用ribbon或feign直接调用服务发现。
9、微服务优点是什么??
答:(1)每个服务都足够内聚,代码易于理解;(2)提高开发效率,一项服务只做一件事;(3)微服务可以由小团队单独开发;(4)微服务是松耦合的,是有功能意义的服务;(5)可以用不同的语言开发,面向接口编程;(6)易于与第三方集成;(7)微服务只是业务逻辑的代码,不会和HTML一起使用。CSS或其它界面组合;(8)可灵活搭配,连接公共库和独立库。
10、微服务的缺点是什么?
答:(1)分布式系统的责任;(2)多服务运维难度,随着服务的增加,运维压力也在增加;(3)系统部署依赖;(4)服务间通信成本;(5)数据一致性;(6)系统集成测试;(7)性能监控。
11、什么是Spring Cloud Bus?
答:Spring Cloud Bus是基于消息代理的分布式系统消息总线。它利用轻量级消息代理来连接各个分布式节点,实现节点之间的消息传递和事件驱动。Spring Cloud Bus的核心思想是通过消息广播机制,使得一次配置更新可以触发所有相关节点的配置刷新,从而实现分布式系统的配置管理]和动态更新。
12、springcloud断路器的作用是什么?
答:当一个服务调用另一个服务由于网络原因或自身原因出现问题时,调用者将等待被调用者的响应 当更多的服务要求这些资源导致更多的请求等待时,就会出现连锁效应(雪崩效应)。断路器完全打开:一段时间内 达到一定次数不能调用 并且多次监测无恢复迹象 断路器完全打开 那么下一个请求就不会要求服务了。半开:短时间内有恢复迹象,断路器会向服务发出部分请求,正常调用时断路器会关闭;关闭:服务处于正常状态时,可以正常调用。
13、什么是服务熔断?什么是服务降级?
答:在复杂的分布式系统中,微服务之间的相互呼叫可能会导致服务堵塞的各种原因。在高并发场景下,服务堵塞意味着线程堵塞,导致当前线程不可用,服务器线程全部堵塞,导致服务器崩溃。由于服务之间的呼叫关系是同步的,它将导致整个微服务系统的服务雪崩。为了解决微服务的调用响应时间过长或不可用,占用越来越多的系统资源,导致雪崩效应,需要进行服务熔断和服务降级。
所谓服务熔断,是指某个服务故障或异常在一起,类似于显示世界“保险丝”当异常情况被触发时,整个服务将被直接熔断,而不是等到服务加班。
服务熔断相当于我们电闸的保险丝,一旦发生服务雪崩,整个服务将被熔断。通过维护自己的线程池,当线程达到阈值时,将启动服务降级。如果其他请求继续访问,则直接返回fallback的默认值。
14、负载平衡的意义是什么?
答:负载平衡旨在优化资源使用,最大吞吐量,最小响应时间,避免任何单一资源过载。使用多个组件来平衡负载,而不是通过冗余来提高可靠性和可用性。
15、SpringBoot和SpringCloud有什么联系和区别?
答:SpringBoot是Spring推出的基于Maven的解决方案,用于解决传统框架配置文件的冗余和复杂的装配组件,旨在快速构建单个微服务;SpringCloud专注于解决各微服务、服务间通信、熔断、负载平衡等之间的协调配置问题。
不同的技术维度,而Spring Cloud依赖于Spring Boot,Spring Boot不依赖Spring Cloud,甚至可以和Dubbo优秀的综合开发。
16、Hystrix是如何实现它的目标的?
Hystrix 通过:
- 将所有调用封装到一个HystrixCommand或hystrix观察者的对象中,通常在一个单独的线程中执行(这是命令模式的一个例子)。
- 时间的调用比你定义的阈值要长。有一个默认值,但是对于大多数依赖项,您可以通过“属性”来定制这些超时,这样它们就会比每个依赖项的99.5%的性能稍微高一些。
- 维护每个依赖项的一个小线程池(或信号量);如果它变得满了,那么就会立即拒绝请求这个依赖项的请求,而不是排队。
- 测量成功、失败(客户端抛出的异常)、超时和线程拒绝。
- 在一段时间内,如果服务的错误百分比超过了一个阈值,就会触发一个断路器来停止对特定服务的所有请求,无论是手动的还是自动的。
- 当一个请求失败时执行回退逻辑,被拒绝,超时,或短路。
- 监控指标和配置在接近实时的情况下发生变化。