Spring Cloud常用组件简介

前言:
大家都知道Spring Cloud是一套微服务框架,既然是服务于微服务,其核心的组件也就是解决微服务的核心问题;

核心问题:

  1. 服务很多,客户端怎么访问?(Zuul、Gateway)
  2. 服务很多,怎么管理这些服务?(Eureka、Consul、Nacos)
  3. 服务很多,服务之间怎么通信?(Feign、OpenFeign、Dubbo)
  4. 服务挂掉怎么办? (Hystrix、Sentinel)

其他问题:

  • 服务很多,怎么管理配置?(Spring Cloud Config、Spring Cloud Bus、Nacos)
  • 如何保障服务安全?(Spring Cloud Security)
  • 如何与缓存(Redis)及中间件(MQ)通信?(Spring Cloud Stream)

服务条目与技术:

微服务条目落地技术
服务开发SpringBoot,Spring MVC
服务配置与管理Netflix公司的Archaius 、阿里的Diamond、Nacos等
服务注册与发现Eureka、Consul、Zookeeper、Nacos等
服务调用Rest、RPC、gRPC、Dubbo
服务限流熔断Hystrix、Envvoy、Sentinel等
负载均衡Ribbon、Nginx等
服务接口调用Feign、OpenFeign、Consul等
消息队列kafka、RabbitMQ、ActiveMQ、RocketMQ等
服务配置中心管理SpringCloudConfig、Chef、Nacos等
服务路由(API网关)Zuul、Gateway等
服务监控Zabbix、Nagios、Metrics、Specatator等
全链路追踪skywalking、Zipkin、Brave、Dapper等
服务部署Docker、OpenStrack、Kubernetes等
数据流操作开发包SpringCloud Stream(封装与Redis,Rabbit,kafka等发送接收消息)
时间消息总线SpringCloud Bus

结构简图:

Zuul/Gateway路由
请求资源
Ribbon均衡负载
Hystrix熔断控制
服务注册
Hystrix熔断控制
服务注册
Hystrix熔断控制
服务注册
外部请求
Feign
Eureka_Server
Eureka_Client1
Eureka_Client2
Eureka_Client3
  • 外部请求:
    来自移动端(Android、IOS…)、浏览器客户端等发起的HTTP请求。

  • Zuul/Gateway:
    Zuul和Gateway都用作路由网关,但Gateway更简单、高效(毕竟是亲儿子)。
    作用是可以为外部请求提供统一的访问接口,减少耦合配置,外部不需要关注后台多种服务的类别划分及IP端口。

  • Feign  查看笔记
    用于微服务之间的通信,集成了负载均衡(Ribbon)及熔断器(Hystrix)。从代码层面来说可以减少代码的冗余,一个功能接口开放出来,其他模块都调用就行了,也便于后期维护。

  • Eureka_Server
    是服务的注册中心,注册表中会记录各个服务(Eureka_Client)的信息,负责管理所有的服务资源,Eureka_Server注册中心会根据Feign的请求信息及负载均衡规则确定具体的服务。

  • Ribbon
    作用是负载均衡,在高可用的情况下某一类服务会部署多个,以达到高并发,高可用性的目的,默认以 轮询 的方式去为服务分配请求,比如有服务1、服务2、服务3都属于A类服务,陆陆续续来了6个A类服务的请求,那么就会依次分配给1、2、3、1、2、3,也可以自定义其他负载均衡策略,如 服务响应时长、自定义权重、随机、Hash等。

  • Eureka_Client
    其本质就是一个个的Spring Boot项目,分布式的架构下会将项目中的独立功能模块解耦出来作为一个Spring Boot项目,Spring Boot项目启动后会根据配置将自己注册到指定的Eureka_Server服务注册中心(有集群需要,可注册到多个注册中心),这样在外部调用的时候找到具体的服务了。

  • Hystrix
    Hystrix是一个熔断、降级的框架。

底层原理是为每个类型的服务创建独立的线程池,前面有说到注册中心会根据外部请求规则筛选服务,那么是根据什么规则呢?其实最主要的是服务的可用性,服务无法响应或延时较高,则会调整熔断器的状态,需要注意的是当服务熔断后,注册中心并不会立即清除该服务,而是启动安全模式,保存该服务状态信息,等待服务正常后解除安全模式。

服务熔断服务降级有什么区别?
服务熔断和服务降级都是为了在分布式系统中应对异常情况,保障系统的高可用性和稳定性。它们的主要区别在于触发原因、管理目标层次、实现方式以及触发后的处理方式。以下是详细介绍:
触发原因不同。服务熔断通常是由于某个服务(下游服务)出现故障或响应异常引起的,如错误率超出阈值或请求超时等;服务降级则更多是基于整体系统负载的考虑,主动进行资源优化和功能降级。
管理目标层次不同。服务熔断通常是一个框架级别的处理,每个微服务都需要,没有特定的层级;服务降级则一般需要对业务有层级之分,通常从最外围服务开始。
实现方式不同。服务熔断通过中断对故障服务的请求来保护系统稳定性,防止故障的传播;服务降级则是通过降低非核心功能的优先级或关闭一些服务来应对异常情况。
触发后的处理方式不同。服务熔断在触发后,会直接调用服务降级方法;服务降级则每次都会先调用原服务方法,如果失败才会执行降级方法。
总的来说,服务熔断更侧重于快速恢复和保护系统稳定性,而服务降级则侧重于资源优化和保障核心业务运行。在实际应用中,两者通常结合使用,以提高整个系统的稳定性和可用性。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值