美文网首页后台开发笔记
Eureka服务注册与发现机制

Eureka服务注册与发现机制

作者: Figo_OU | 来源:发表于2021-01-20 22:39 被阅读0次

1. Eureka与传统无服务注册中心对比

1.1. 无服务注册中心:
-1.1.1. 需要知道在代码中hard code请求具体的ip、端口和具体的路由。
2. 当接口系统服务器不固定,随时可能增删机器时,我们得频繁修改nginx或者代码。

            @Autowired
            private RestTemplate restTemplate;
            
            @GetMapping("index")
            public Object getIndex(){
                return restTemplate.getForObject("http://localhost:8090/",String.class,"");
            }

1.2. eureka
1. 服务提供者启动时:定时向Eureka-server注册自己的服务信息(服务名、ip、端口等)

     2. 服务消费者启动时:后台定时拉取eureka-server中存储的服务信息。
  
     3. ```
        #yml文件配置
        spring:
          application:
            name: helloserver
        ```
  
     4. ```
        //服务调用代码
        @Autowired
        private RestTemplate restTemplate;
        
        @GetMapping("index")
        public Object getIndex(){
        //HELLOSERVER为服务名
            return restTemplate.getForObject("http://HELLOSERVER/",String.class,"");
        }
        ```
调用流程

2. eureka提供zone的概念。

  1. 如果消费者是在广东,而服务器有在广东、上海、背景,那么可以在配置文件中设置分区。使服务响应更加高效。
      eureka.client.availability-zones.beijing:zone-1
      eureka.client.service-url.zone = http://localhost:100001/eureka

3. 当有多个服务提供者(简称服务)注册到注册中心时,我们消费者去调用可以会调用到不同的服务中去。

4. client服务启动时服务如何注册到eureka中?

  - 在client初始化的时候,会初始化一大堆的定时任务。
  -  定时任务中,包含了一个叫HeartBeat的定时任务。
  -  心跳(heartbeat)定时任务启动后,会定时的给服务注册中心发起一次请求(应该是请求自身服务),判断当前服务实例有没有注册到eureka上面去。如果没有注册,将返回404回来。如果已经注册,将返回服务实例是否正常的结果。
  -  如果请求返回404 。那么将调用register方法,将当前服务实例注册到eureka中。

5. 服务端如何保存这些信息?

  • 通过给eureka服务器发送http请求,从而来将自己的服务实例存放到register(一个concurrentHashMap)中。

6. 消费者如何根据服务名称发现服务实例?

  • 启动时通过后台的定时任务,定期从eurekaServer拉取服务信息,缓存到消费者本地内存中。

7. 如何构建高可用的eureka集群?

在eureka的高可用状态下,这些注册中心是对等的,他们会将互相将注册在自己的实例同步给其他的注册中心。

  1. eureka有什么机制防止在同步过程中陷入同步循环(不断同步实例到其他注册中心)?
    在发送同步信息时,会带上isReplication参数,用于判断是客户端发过来的数据。还是其他注册中心同步过来的数据。如果isReplication为true则将跳过注册步骤。

8. 心跳和服务剔除机制是什么?

  • 心跳:客户端定期发送心跳请求包到eurekaServer
  • 一旦出现心跳长时间没有发送,那么eureka会采用剔除机制,将服务实例改为Down状态。
  • 前提是eureka没有开始保护机制,如果enable-self-preservation:true开启了保护机制,那么即使超时,eureka也不会将服务下线。

9. eureka自我保护模式是什么?

  • 在配置文件中配置enable-self-preservation:true,即开启了保护机制,那么即使超时没有给服务发送心跳,eureka也不会将服务下线。
    默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。
    Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。
    综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。

10. Eureka注册表多级缓存架构有了解过吗?

11. 微服务注册中心的注册表如何更好的防止读写并发冲突?

12. Nacos&Eureka&Zookeeper集群架构都有脑裂问题吗?

13.eureka服务名称区分大小写吗?

不区分。

相关文章

网友评论

    本文标题:Eureka服务注册与发现机制

    本文链接:https://www.haomeiwen.com/subject/dlrewktx.html