Java-Springcloud

Springcloud

服务发现框架Eureka

服务发现

  • 服务提供者

    • 提供一些自己能够执行的服务给外界
  • 服务消费者

    • 需要使用一些别人提供的服务的“用户”
  • 服务中心

    • 服务提供者与消费者之间的桥梁,服务提供者可以将自己的服务注册到服务中心,而服务消费者可以到服务中心寻找到自己所需要的服务的服务提供者

负载均衡Ribbon

RestTemplate

  • 是spring提供的一个访问http服务的客户端类,各个微服务之间就是通过Resttemplate远程调用eureka中已注册的服务

Ribbon是什么,为什么需要ribbon

  • ribbon是一个负载均衡器,运行消费端
  • 微服务间为了实现高可用,同一个功能可能会提供多个微服务,如秒杀系统,当大量请求涌入时,如果请求都集中在其中某个微服务,而其他的可以实现相同功能的微服务却没有被调用到,那么为了实现高可用的集群也就失去了作用,ribbon负载均衡就是为了解决整个问题了,在消费者端获取到了服务列表后,根据请求在内部使用负载均衡算法,对多个系统进行调用,不会出现某个系统处理所有请求,而其他系统不干活的情况

Nginx和ribbon的对比

  • nginx是一种集中式的负载均衡,将所有请求都集中起来再进行负载均衡

Ribbon的集中负载均衡算法

  • RoundRobbonRule:轮询策略。默认采用的策略,若经过一轮轮询没有找到可用的服务提供者,会再进行一轮轮询,最多轮询十轮,若最终还是没有找到,则返回null
  • RandomRule:随机策略,从所有可用的服务提供者中随机选择一个
  • RetryRule:重试策略,先按照轮询策略获取服务提供者,若获取失败,则在指定的时限内重试,默认为500毫秒
  • 还有其他一些算法,也可自定义负载均衡算法

远程调用Open Feign

什么是feign,为什么需要feign

  • 有了eureka、resttemplate和ribbon进行微服务间的调用很不方便,使用feign就可以实现像调用代码一样进行各个服务间的调用

熔断与降级Hystrix

在分布式环境下,各个服务间可能会存在相互依赖的关系,如A服务调用服务B,而B服务调用了服务C,当A处理一个业务时,由于某些原因服务C挂掉了,大量请求就会在服务C阻塞,而调用了服务C的服务B得不到服务C的响应,服务B也阻塞了,就这样几个服务全部都阻塞,当这些被阻塞的请求越来越多时,消耗占用系统的线程、IO等资源,当资源被消耗完后程序也就崩溃了

以上情况发生时就会发生服务雪崩,也就是当一个服务调用出现了问题时,其他依赖于该服务的服务也会出现问题,造成所有服务不可用的问题

熔断是服务雪崩的一种有效解决方案,当指定时间内的请求失败率达到设定阈值时,系统向通过断路器直接将此请求链路断开

虽然会影响一部分服务 但是不至于造成服务雪崩,确保其他服务可以正常调用

熔断即是Hystrix中的断路器模式,可以使用@HystrixCommand注解来标注某个方法,这样当调用时间超过指定时间时,断路器将会中断这个方法的调用

服务降级是指当服务调用失败了,为了更好的用户体验,通过执行另外一种代码逻辑来给用户友好的回复

微服务网关Zuul

在分布式环境下,服务之间的相互调用是通过Eureka Server进行访问的,是服务提供者的统一入口,整个应用中存在很多消费者需要用户进行调用,用户可通过网关zuul这个统一入口对消费者工程进行调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值