Eureka的学习,及与Zookeeper的区别

假如想象 提交于 2019-11-28 01:58:45

SpringCloud02

demo–>Dept
(1) 实体类—> springCloud-api
(2) 提供者—> springcloud-provider–> Mapper Service Controller
(3) 消费者—> springCloud-consumer–> Controller (不应该有Service层)

RestTemplate(模板) 供我们直接使用!提供多种便捷访问远程Http服务的方法,是一种简单的Restful服务模板

​ 要注册到Spring中!(@Configuration 想要什么返回什么 方法@Bean)

​ Controller 中直接使用 RestTemplate (@Autowired)

​ 消费者写一个请求(@RequestMapping)

​ 通过restemplat.get/postForobject(“url”, (传的对象/实体) ,返回值.class)

Eureka服务注册与发现

2.1 什么是Eureka

  • 遵循的是AP原则
  • Eureka是Netflix的一个子模块,也是核心模块之一,是一个基于REST的服务,功能类似于Dubbo的注册中心,Zookeeper

2.2 Eureka原理

  • 采用C-S的架构设计,Eureka Server作为服务注册功能的服务器,是服务注册中心
  • 系统中的其他微服务,使用 Eureka的客户端(Eureka Client)(在应用启动后,会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期没有接收到某个节点的心跳,此时已经注册了,则从服务注册表中把这个服务节点移除,默认90秒) 连接到Eureka Server并维持心跳连接,并通过Eureka Server来监控各个微服务是否正常运行

2.3 聊聊Eureka的自我保护机制

  • 默认情况下,如果EurekaServer在一定时间内没有收到某个微服务实例的心跳,也就是说这个微服务有可能崩了,EurekaServer将会注销该实例,默认90秒。但是当网络分区故障发生时,微服务与Eurake之间无法正常通行,但是微服务本身是健康的,此时不应该注销这个服务,Eureka会启动自我保护机制,当 EurekaServer 在短时间丢失过多客户端时,EurekaServer 就会保护注册表中的信息,不再注销服务注册表中的服务,当网络故障恢复后,EurekaServer 会自动退出自我保护模式。
  • 在SpringCloud中,可以使用 eureka.server.enable-self-preservation=false 禁用自我保护模式(不推荐)

2.4 Eureka的使用步骤

  • 首先编写Eureka Server ,导入依赖,编写配置文件,编写启动类,添加注解

     <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
                <version>1.4.6.RELEASE</version>
    </dependency>
     
     -------------------------------------------------------------------------------------
         
    server:
      port: 7001
    
    #Eureka配置
    eureka:
      instance:
        hostname: eureka7001.com #Eureka服务端的实例名称
      client:
        register-with-eureka: false # 表示是否向eureka注册中心注册自己
        fetch-registry: false #fetch-registry如果为false,则表示自己为注册中心
        service-url:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    
    --------------------------------------------------------------------------------------
    
        //启动之后,访问 http://localhost:7001/
    @SpringBootApplication
    @EnableEurekaServer //EnableEurekaServer 服务端的启动类,可以接受别人注册进来~
        
    
  • 其次,将provider注册到注册中心,导入依赖,编写配置文件,启动类添加注解

     <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
                <version>1.4.6.RELEASE</version>
     </dependency>
     
     <!--actuator完善监控信息-->
     <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>
    
    --------------------------------------------------------------------------------------
    
    #Eureka的配置,服务注册到哪里
    eureka:
      client:
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka/
      instance:
        instance-id: springcloud-provider-dept8001 # 修改eureka上的默认描述信息!
        prefer-ip-address: true  # true,可以显示服务的IP地址 ~
        
    #info配置
    info:
      app.name: liyuehhh-springcloud
      company.name: blog.yuestudy.com
    --------------------------------------------------------------------------------------
    
    @EnableEurekaClient //在服务启动后自动注册到Eureka中!
    
    

    2.5 Eureka集群

    如:7001端口挂载 7002 7003
    #EurekaServer的配置文件
    defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
    
    #provider的配置文件
    eureka:
      client:
        service-url:
      defaultZone:http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
    

    2.6 CPA原则及对比Zookeeper

    (1)C:强一致性 A:可用性 P:分区容错性 (三进二,也就是说一个分布式系统不可能同时满足这三个特性,分区容错性必须满足)

    (2)Zookeeper:CP

    ​ 当向注册中心查询服务列表时,我们可以接受注册中心返回的是几分钟以前的注册信息,但是不能接受服务直接down掉,Zookeeper会出现这样的情况:当master节点由于网络故障而与其他节点失去联系时,剩余节点会重新进行leader选举,但是选举leader的时间太长,且选举期间整个集群都是不可用的,就会倒是在这个期间注册服务瘫痪。。。。

    (3) Eureke:AP

    Eureka能够避免上述问题,它保证了可用性,Eureka的各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务,Eureka的客户端在向某个Eureka注册时,如果发现来连接失败,则会自动切换到其他节点,有效的保证了注册服务的可用性,另外还要上述提到的保护机制,

    所以,Eureka可以很好的应对因网络故障导致部分节点失去的情况,而不会像Zookeeper一样,使整个注册服务瘫痪

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!