Spring Cloud组件总结

Spring Cloud组件总结

微服务

微服务是将一个大的单体应用,根据服务拆分为多个功能专一的轻量服务。
各个微服务之间可以使用不同的语言和数据库,服务之间通过HTTP进行调用。

  • 服务能很容易的横线扩展

  • 服务之间松耦合

  • 服务简单,内聚度高,开发效率高

  • 微服务通信

  • 数据一致性

  • 调用性能监控

  • 多服务运维

Spring Cloud与dubbo

dubbo与zookeeper实现了服务发现和RPC调用。而spring cloud是定位于微服务治理全家桶。
像配置中心、熔断器、服务网关等,spring cloud都有相应的组件实现,而dubbo则需要其他中间件的配合。

注册中心

微服务集群服务数量很多,如果通过配置指定依赖的服务的地址,当节点上下线的时候,会大大增加维护成本。
而注册中心提供服务注册和服务发现的功能。
每一个微服务都会向注册中心组成自己所提供的服务,并且从注册中心查询所需服务的地址。
每一个节点也会向注册中心上报健康情况,动态更新服务列表。

Eureka

Eureka是spring cloud的注册中心组件。
如上所说,其他服务会通过Eureka客户端连接到Eureka服务端,保持心跳,把自己的信息注册到注册中心。

  • 高可用:使用Eureka集群,不同的Eureka节点之间相互注册,通过注册中心本身来监控Eureka节点的更新
  • 自我保护模式:如果Eureka在一段时间里没有收到某服务的心跳,会进入自我保护模式。
    并不会清除该服务的注册信息并正常对外提供。
    直到心跳恢复正常才会退出自我保护模式,更新服务列表。简单来说就好有比没有好
  • Eureka与ZooKeeper:如果zookeeper的主节点挂了要进行选举,在选举期间是无法对外提供服务的,重于一致性。
    Eureka的各个节点之间是平等的,只要有节点正常就能对外提供服务,重于可用性。

客户端均衡负载

Ribbon

Ribbon是spring cloud的客户端均衡负载组件。
Ribbon会从注册中心获取服务的全部节点信息,使用轮询去均衡请求各个节点。
使用@LoadBalanced注解开启均衡负载。

  • Ribbon与Nginx:Nginx是在反代的过程中均衡负载,请求的流量会经过nginx。Ribbon是客户端请求时直接均衡负载到服务端。

声明式web客户端

Feign

Feign是一个声明式web客户端,帮助我就构造请求HTTP接口。
与Ribbon结合,就能实现轮询的声明式HTTP请求接口。

配置中心

微服务集群节点众多,与注册中心一样,需要一样统一的配置中心对不同服务的配置进行管理和更新。
配置中心基于git,通过git能原始实现对配置文件的版本控制。

熔断器

在分布式系统里,如果其中有一个服务不可用,服务请求阻塞直到超时,占用服务的全部线程,导致整个服务不可用。
新的服务不可用又会导致别的服务不可用,最后连锁效应导致整个服务集群发生雪崩效应。

  • 隔离:熔断器会隔离不同服务之间的影响

  • 监控:熔断器会对每次调用的成功失败、时间进行记录

  • 熔断:熔断器监控服务的失败数或者失败率达到一定的值,会对这个服务进行熔断,不再请求这个服务

  • 降级:熔断器在熔断后服务会进行降级,调用备用的降级方法,维持服务的可用性

  • 关闭:熔断器关闭,请求正常

  • 打开:发现某个服务不可用,熔断该服务,熔断器处于打开状态

  • 半开:熔断的一段时间后,会将部分请求发给接口

Hystrix

Tomcat默认只有一个线程池来处理请求,会导致服务雪崩。
Hystrix会给每一个服务配一个线程池,通过线程池隔离不同的服务。除此以外还可以使用信号量方式。

服务网关

服务网关通过路由转发,统一暴露微服务集群的接口。
并且在服务网关里实现与业务逻辑无关的,如鉴权、限流、缓存、监控、统计等功能。

Zuul、Zuul2与Gateway

Zuul基于Servlet是BIO,Zuul2基于netty是NIO,Gateway是spring cloud推出的第二代网关,同样是NIO,用于替代zuul。

消息总线

可与配置中心结合,实现配置实时更新。

组件发音

  • Eureka [jʊ'ri:kə]
  • Ribbon [ˈrɪbən]
  • Feign [fen]
  • Hystrix [hɪst'rɪks]
  • Zuul [zulu]
  • Sleuth [sluθ]
  • Turbine [ˈtɜ:rbaɪn]

参考文章:

SpringCloud面试题(总结最全面的面试题!!!)

拜托!面试请不要再问我Spring Cloud底层原理

SpringCloud面试题

SpringCloud各个组件说明


Spring Cloud组件总结
https://cellargalaxy.github.io/posts/分布式/6.Spring Cloud组件总结/
作者
cellargalaxy
发布于
2020年7月17日
许可协议