什么是 Spring Cloud?
Spring Cloud是一个微服务框架,它提供了全套的分布式系统解决方案。
使用 Spring Cloud 有什么优势
将单体服务拆分所带来的问题:
- 服务实例太多怎么办
- 服务调用关系太杂乱怎么办
- 服务访问出错了怎么办
- 配置信息散落在各个服务中怎么办
- 服务调用链路太长怎么办
等等会带来一系列的问题。
使用spring cloud提供的一些组件。
*微服务* | *Spring Cloud与Netflix OSS* |
---|---|
配置管理 | Spring Config Server |
服务发现 | Spring Cloud Netflix Eureka |
负载平衡 | Spring Cloud Netflix Ribbon |
API网关 | Spring Cloud Zuul |
API网关 | Spring Cloud Gateway |
安全问题 | Spring Cloud Security |
集中化日志记录 | 自建ELK |
集中的度量 | Spring Spectator & Atlas |
分布式跟踪 | Spring Cloud Sleuth |
弹性和容错性 | Netflix Hystrix, Netflix Turbine, & Netflix Ribbon |
自动伸缩和自我修复 | - |
打包、部署和调度。 | Apache Maven. Spring Cloud没有真正的调度程序。 |
作业管理 | Spring Batch |
单例应用程序。 | Spring Cloud Cluster |
服务注册和发现是什么意思?Spring Cloud 如何实现?
服务注册:它指的是将服务实例的信息注册到服务注册中心。实例的信息一般包括ip地址、端口号、注册时间等信息。
服务发现:通过服务注册中心来查询和发现可用的服务实例。一般是获取可用目标服务的IP地址、端口号等信息列表,通过负载均衡的方式进行服务的调用。
spring cloud通过eureka来实现服务注册和发现。Eureka 服务注册和发现可以在这种情况下提供帮助。由于所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器完成查找。
spring cloud怎样实现负载均衡?
我们可以使用spring cloud提供的ribbon组件来实现负载均衡。
什么是 Hystrix?它如何实现容错?
Hystrix是Netflix开源的一个库,用于在分布式系统中实现容错性。它主要用于处理分布式系统中的服务间依赖关系,以确保系统在面对依赖故障或高负载时能够继续提供有限的功能而不完全崩溃。Hystrix通过提供以下功能来实现容错:
1.降级(Fallback)
当一个依赖的服务发生故障或超时时,Hystrix可以提供一个备用的、降级的响应,而不是返回错误或抛出异常或者让客户端一直在那里等待。这有助于保持系统的一部分功能继续可用,而不会因依赖服务的问题而受到影响。说白了就是在对应的业务方法上添加相应的注解,并指定fallback方法在出现问题的时候进行回调。
2.熔断(Circuit Breaker)
Hystrix引入了熔断器的概念,类似于电路中的熔断器。如果某个依赖的故障率超过了一定的阈值,Hystrix会打开熔断器,暂时阻止对该依赖的请求,以减轻负载和避免连锁故障。在一段时间后,熔断器会尝试半开状态,允许一部分请求通过,如果成功,就继续关闭熔断器,否则保持打开。
3.资源隔离(Thread Pooling and Request Batching)
Hystrix允许为不同的依赖服务配置独立的线程池,以确保某个依赖服务的问题不会影响到整个系统的线程资源。此外,Hystrix还支持请求批处理,可以将多个请求合并为一个,减少对依赖服务的负载。
4.实时监控和度量
Hystrix提供了实时监控和度量功能,可以通过仪表盘查看依赖服务的性能指标,如请求成功率、失败率、响应时间等。这有助于运维人员及时发现和解决问题。
5.自动恢复
一旦依赖服务的故障率降低到可接受水平,Hystrix会自动恢复对该服务的正常请求处理,不再触发熔断机制。
6.超时处理
Hystrix可以配置每个依赖服务的超时时间,如果请求超时,它会被视为失败,并根据熔断策略进行处理。
总的来说,Hystrix通过熔断、降级、资源隔离等策略,以及实时监控和度量来实现容错。它允许开发者在分布式系统中更好地处理依赖服务的故障,提高系统的可用性和稳定性。然而,需要注意的是,Hystrix在Netflix的官方GitHub仓库中已经宣布停止维护,推荐使用更先进的容错和断路器库,如Resilience4j或Sentinel。
什么是 Hystrix 断路器?我们需要它吗?
和上面的回答保持一致就可以了。
什么是 Netflix Feign?它的优点是什么?
Feign是Netflix开发的一个基于注解的轻量级HTTP客户端,它使得编写服务间的HTTP通信变得更加简单和优雅。
Netflix Feign具有以下几个优势:
声明式API:Feign允许开发人员通过接口和注解定义服务间的API调用。通过简单的接口定义,Feign可以自动生成调用目标服务的HTTP请求,使得服务间的通信定义更加清晰和易于理解。
集成负载均衡:Feign内部集成了Ribbon负载均衡器,可以通过配置和注解实现对多个服务提供实例的负载均衡。开发人员不需要手动处理服务实例的选择,Feign会自动根据负载均衡策略选择并调用合适的服务实例。
整合容错处理:Feign还集成了Hystrix容错处理框架,可以通过注解和配置实现服务调用的容错机制。当目标服务发生故障或响应超时时,Feign可以根据配置进行熔断、降级或重试等操作,提高了系统的可靠性和稳定性。
简化HTTP通信:Feign封装了底层的HTTP通信细节,开发人员只需要关注业务逻辑,无需手动处理HTTP请求和响应。Feign提供了丰富的注解,使得开发人员可以方便地定义请求的URL、方法、参数、Header等信息,大大简化了HTTP通信的编写和管理。
可扩展性:Feign提供了扩展点,开发人员可以通过自定义注解、解码器、编码器等来扩展和定制Feign的功能。这使得Feign可以适应各种业务场景和需求,提供更灵活和定制化的解决方案。
综上所述,Netflix Feign的优势在于简化了服务间的HTTP通信,提供了声明式API和集成了负载均衡和容错处理,可以大大简化和优化服务调用的编写和管理。
什么是 Spring Cloud Bus?我们需要它吗?
我们将微服务中的配置文件集中存储在远程Git仓库,并且通过配置中心微服务从Git仓库拉取配置文件,当用户微服务启动时会连接配置中心获取配置信息从而启动用户微服务。
如果我们更新Git仓库中的配置文件,那用户微服务是否可以及时接收到新的配置信息并更新呢?答案是不会。
Spring Cloud Bus 是 Spring Cloud 中一个用于服务之间通信的组件。它基于消息中间件实现,可以实现配置的动态刷新和事件的广播通知,提高配置的实时性和可靠性。
因为要想要服务的调用实时知道你的配置信息发生变化,说白了,你还是需要手动执行命令去获取git仓库中的配置的。使用命令:curl -X POST http://localhost:8080/actuator/bus-refresh。所以在实际生产环境中使用的比较少。
标签:面试题,服务,Hystrix,Netflix,spring,Feign,Cloud,Spring,cloud From: https://www.cnblogs.com/dongyaotou/p/18360507