SpringCloud1.5.X - Day04 Eureka Ribbon 知识点详解

前三篇文章主要搭建了微服务的eureka服务端 , 服务提供者和服务消费者 , 其中eureka , ribbon我们只是学会如何使用 , 本文主要详细介绍一下这这两个的知识点!

  • 废话不多说 , 开始描述:
    ---------------------------------------------------------------------------------------------------------------------
  1. Eureka

    1. Eureka的服务提供者:
      Eureka服务治理体系支持跨平台,虽然我们前文使用了Spring Boot来作为服务提供者,但是对于其他技术平台只要支持Eureka通信机制,一样也是可以作为服务提供者,换句话说,服务提供者既可以是Java写的,也可以是python写的,也可以是js写的。这些服务提供者将自己注册到Eureka上,供其它应用发现然后调用,这就是我们的服务提供者,服务提供者主要有如下一些功能:
      1. 服务注册
        服务提供者在启动的时候会通过发送REST请求将自己注册到Eureka Server上,同时还携带了自身服务的一些元数据信息。Eureka Server在接收到这个REST请求之后,将元数据信息存储在一个双层结构的Map集合中,第一层的key是服务名,第二层的key是具体服务的实例名
      2. 服务同步
        再说服务同步之前,我先描述一个场景:首先我有两个服务注册中心,地址分别是http://localhost:8888和http://localhost:9999,然后我还有两个服务提供者,地址分别是http://localhost:8080和http://localhost:8081,然后我将8080这个服务提供者注册到8888这个注册中心上去,将8081这个服务提供者注册到9999这个注册中心上去,此时我在服务消费者中如果只向8888这个注册中心去查找服务提供者,那么是不是只能获取到8080这个服务而获取不到8081这个服务?
        答案是消费者可以获取到两个提供者提供的服务。具体原因已经展示过,感兴趣可以研究
      3. 服务续约
        在注册完服务之后,服务提供者会维护一个心跳来不停的告诉Eureka Server:“我还在运行”,以防止Eureka Server将该服务实例从服务列表中剔除,这个动作称之为服务续约,关于服务续约的配置:在这里插入图片描述
    2. 服务消费者
      消费者主要是从服务注册中心获取服务列表,拿到服务提供者的列表之后,服务消费者就知道去哪里调用它所需要的服务了,我们从下面几点来进一步了解下服务消费者。
      1. 获取服务
        当我们启动服务消费者的时候,它会发送一个REST请求给服务注册中心来获取服务注册中心上面的服务提供者列表,而Eureka Server上则会维护一份只读的服务清单来返回给客户端,这个服务清单并不是实时数据,而是一份缓存数据,默认30秒更新一次,如果想要修改清单更新的时间间隔,可以通过eureka.client.registry-fetch-interval-seconds=30来修改,单位为秒(注意这个修改是在eureka-server上来修改)。另一方面,我们的服务消费端要确保具有获取服务提供者的能力,此时要确保eureka.client.fetch-registry=true这个配置为true。
      2. 服务调用
        服务消费者从服务注册中心拿到服务提供者列表之后,通过服务名就可以获取具体提供服务的实例名和该实例的元数据信息,客户端将根据这些信息来决定调用哪个实例,我们之前采用了Ribbon,Ribbon中默认采用轮询的方式去调用服务提供者,进而实现了客户端的负载均衡。
      3. 服务下线
        服务提供者在运行的过程中可能会发生关闭或者重启,当服务进行正常关闭时,它会触发一个服务下线的REST请求给Eureka Server,告诉服务注册中心我要下线了,服务注册中心收到请求之后,将该服务状态置为DOWN,表示服务已下线,并将该事件传播出去,这样就可以避免服务消费者调用了一个已经下线的服务提供者了。
    3. 服务注册中心
      服务注册中心就是Eureka提供的服务端,它提供了服务注册与发现功能。
      1. 失效剔除
        上面我们说到了服务下线问题,正常的服务下线发生流程有一个前提那就是服务正常关闭,但是在实际运行中服务有可能没有正常关闭,比如系统故障、网络故障等原因导致服务提供者非正常下线,那么这个时候对于已经下线的服务Eureka采用了定时清除:Eureka Server在启动的时候会创建一个定时任务,每隔60秒就去将当前服务提供者列表中超过90秒还没续约的服务剔除出去,通过这种方式来避免服务消费者调用了一个无效的服务。
      2. 自我保护
        在这里插入图片描述
        这个警告实际上就是触发了Eureka Server的自我保护机制。Eureka Server在运行期间会去统计心跳失败比例在15分钟之内是否低于85%,如果低于85%,Eureka Server会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败,对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。我们在单机测试的时候很容易满足心跳失败比例在15分钟之内低于85%,这个时候就会触发Eureka的保护机制,一旦开启了保护机制,则服务注册中心维护的服务实例就不是那么准确了,此时我们可以使用eureka.server.enable-self-preservation=false来关闭保护机制,这样可以确保注册中心中不可用的实例被及时的剔除。
  2. Ribbon

  • 详细说一下负载均衡 , 负载均衡分为服务端的负载均衡和客户端的负载均衡
        1. 服务端 将客户端发来的请求通过Nginx负载均衡服务器发送到不同的上游服务器去处理,这种负载均衡就是一种典型的服务端负载均衡,负载均衡是我们处理高并发、缓解网络压力和进行服务端扩容的重要手段之一,但是一般情况下我们所说的负载均衡通常都是指服务端负载均衡,服务端负载均衡又分为两种,一种是硬件负载均衡,还有一种是软件负载均衡。
            (1). 硬件负载均衡: 主要通过在服务器节点之间安装用于负载均衡的设备,常见的如F5。
            (2). 软件负载均衡: 则主要是在服务器上安装一些具有负载均衡功能的软件来完成请求分发进而实现负载均衡,常见的就是Nginx。
        2. 客户端: 在客户端负载均衡中,所有的客户端节点都有一份自己要访问的服务端清单,这些清单统统都是从Eureka服务注册中心获取的。在Spring Cloud中我们如果想要使用客户端负载均衡,方法很简单,开启@LoadBalanced注解即可,这样客户端在发起请求的时候会先自行选择一个服务端,向该服务端发起请求,从而实现负载均衡
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Aloneii

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

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

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

打赏作者

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

抵扣说明:

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

余额充值