SpringCloud核心功能

       今天我们谈一谈SpringCloud的核心功能,要知道核心功能是什么,必须搞清楚这个的概念,什么是核心,核心即是本质,为什么会出现技术,是因为这个世界上人每天都要面对太多的问题需要解决,解决问题的方法五花八门,久而久之人们针对各类问题总结出了一系列解决问题的方法,即是形成技术的初形。每种技术都有其核心功能就解决某种问题的独有手段。
SpringCloud在微服务领域决对是集大成者的一种解决方案。曾几何时由于微服务只是个技术标准,没有技术边界,导致这个领域衍生出五花八门的技术,总体上是一片军阀割据的局面。直到SpringCloud正式后这种局面得到改善,SpringCloud正以独有的方式收复各路军阀,使各种技术得到真正的容合。

一、Spring Cloud概念

       Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

二、 Spring Cloud核心组件:Eureka

  1. Eureka.Server
    全局业务服务注册中心,主要功能是把零散的服务整体管理起来,服务与服务之间通过注册中心的服务名称调用,在应用中Eureka以集群模式部署,当集群中有分片出现故障时,那么Eureka就转入自我保护模式。它允许在分片故障期间继续提供服务的发现和注册,当故障分片恢复运行时,集群中其他分片会把它们的状态再次同步回来
  2. Eureka.client
    主要处理服务的注册与发现。客户端服务通过注解和参数配置的方式,嵌入在业务应用程序的代码中,在应用程序运行时,Eureka客户端自动向Eureka.Server注册自身的信息,并周期性地发送心跳来更新它的服务租约。

三、 Spring Cloud核心组件:Ribbon

       服务消费者Ribbon是一个基于HTTP和TCP的客户端负载均衡器,它可以在根据RibbonServerList中记录的服务实例列表以轮询的方式访问服务达到均衡的作用。当Ribbon和Eureka联合使用时,Ribbon的服务实例清单RibbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中心中获取服务端列表。同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来去定服务端是否已经启动。在客户端负载均衡中,所有客户端节点都维护着自己要访问的服务端清单,而这些服务端的清单来自于Eureka.Server。在客户端负载均衡中也同样需要心跳数据去维护服务端清单的健康性,但这个步骤需要与服务注册中心配合完成。
通过Spring Cloud Ribbon的封装,我们在微服务架构中使用客户端负载均衡调用只需要如下两步:
服务提供者只需要启动多个服务实例并且注册到一个注册中心或是多个相关联的服务注册中心
服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用。

四、 Spring Cloud核心组件:Fegin

Fegin和Ribbon起到的作用一样,但Fegin机制是使用了动态代理。
1)、首先,对某个接口定义了@FeginClient注解,Fegin就会针对这个接口创建一个动态代理。
2)、接着调用接口的时候,本质就是调用Fegin创建的动态代理
3)、Fegin的动态代理会根据在接口上的@RequestMapping等注解,来动态构造要请求的服务的地址,针对这个地址,发起请求、解析响应。

五、 Spring Cloud核心组件:Hystrix

       在微服务架构中,存在着那么多的服务单元,若一个单元出现故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的雪崩现象,这样的架构相较传统架构更加不稳定。为了解决这样的问题,产生了断路器等一系列的服务保护机制。
在分布式架构中,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延
Hystrix具备服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能
Hystrix使用舱壁模式实现线程池的隔离,它会为每一个依赖服务创建一个独立的线程池,这样就算某个依赖服务出现延迟过高的情况,也只是对该依赖服务的调用产生影响,而不会拖慢其他的依赖服务

六、 Spring Cloud核心组件:Zuul

       Spring Cloud Zuul通过与Spring Cloud Eureka进行整合,将自身注册为Eureka服务治理下的应用,同时从Eureka中获得了所有其他微服务的实例信息
对于路由规则的维护,Zuul默认会将通过以服务名作为ContextPath的方式来创建路由映射
Zuul提供了一套过滤器机制,可以支持在API网关无附上进行统一调用来对微服务接口做前置过滤,已实现对微服务接口的拦截和校验

七、Spring Cloud归纳总结

       Eureka:任何服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从而知道其他服务在哪里。
Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台。
Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
Hystrix:发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题
Zuul:如果前端、移动端要调用后端系统,统一从Zuul网关进入,由Zuul网关转发请求给对应的服务。

上一篇 微服务技术的历史和未来发展趋势

下一篇 SpringCloud-Eureka服务注册中心

SpringCloud终极教程之核心讲解

源代码地址:https://github.com/crexlb/cre.springcloud.examples

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黒木涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值