Springcloud 注册中心Eureka(注册中心)

Eureka是Netflix的五大组件之一,用于服务注册与发现。SpringCloud将其集成在spring-cloud-netflix中。

Eureka包含两个组件:Eureka Server 和Eureka Client。

Eureka Server提供服务注册,各个服务启动之后会中Eureka Server进行服务注册,这样Eureka Server中的服务列表会存储所有可用的服务信息,服务节点可以通过管理界面直观看到。

Eureka Client是基于服务提供者的一个客户端,服务提供者将其服务信息注册到注册中心中,可以在管理界面看到所有注册到注册中心的服务信息。

代码演示:

//导入Eureka依赖
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka</artifactId>
      <version>1.4.6.RELEASE</version>
</dependency>
//创建Eureka注册中心服务,在启动类中添加@EnableEurekaServer注解,用户表示该服务是注册中心
@SpringBootApplication
@EnableEurekaServer //开启EurekaServer 服务端的启动类,可以接受别人注册进来
public class EurekaServer_7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer_7001.class,args);
    }
}
//添加配置信息
#服务端口
server:
  port: 7001

#应用名称
spring:
  application:
    name: dept-eureka-7001

#Eureka配置
eureka:
  instance:
    hostname: localhost1
  client:
    register-with-eureka: false #是否向Eureka注册(由于自己就是注册中心,所以不需要注册)
    fetch-registry: false #检索服务
    service-url:
      defaultZone: http://localhost2:7002/eureka/,http://localhost3:7003/eureka/ #服务注册地址,我这里是搭建的集群,所以需要向其他注册中心注册

管理界面演示:
在这里插入图片描述
Eureka Client演示:

//导入依赖
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-eureka</artifactId>
   <version>1.4.6.RELEASE</version>
</dependency>
//创建服务提供者项目,在启动类添加@EnableEurekaClient注解,表示这是EurekaClient
@SpringBootApplication
@EnableEurekaClient //表示这是EurekaClient
@EnableDiscoveryClient//这个注解用于获取注册中心的服务信息
public class Application8001 {
    public static void main(String[] args) {
        SpringApplication.run(Application8001.class,args);
    }
}
//添加配置文件
#Eureka配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost1:7001/eureka/,http://localhost2:7002/eureka/,http://localhost3:7003/eureka/

效果演示:
在这里插入图片描述
Application中就会显示注册的服务。

  • Eureka自我保护机制
    默认情况下,一定时间内EurekaServer没有收到实例心跳(默认90秒),这是EurekaServer会将实例从服务列表移除。但是短时间内丢失大量的实例心跳,Eureka会触发自我保护机制。当保护机制触发时,管理界面会出现红色的警告消息:
    EMERGENCY!EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT.RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEGING EXPIRED JUST TO BE SAFE
    从警告中我们可以看到,虽然Eureka收不到实例心跳,但它认为该实例还是健康的,Eureka会保护这些实例,不会将其从服务列表中移除。

该保护机制的目的是为了避免网络故障,在发生网络故障时,服务与注册中心之间无法正常通信,但服务本身是健康的,不应该将其从服务列表中移除。自我保护机制让集群更加健壮。
开启/关闭自我保护机制

eureka.server.enable-self-preservation=false
  • Eureka与Zookeeper对比
    谈到这个问题我们首先要知道什么是CAP原则。
    C(Consistency):数据一致性。分布式系统中,所有数据都有副本,无论是否从副本中取数据,从哪个副本中取数据,结果都是一样的。保证所有地方数据都是一样的就是数据一致性。但是由于网络故障等原因,出现副本写入失败,就会导致数据不一致。满足数据一致性就是要保证所有数据都是同步的。
    A(Availability):可用性。只要用户发起请求,服务器必须做出响应。我们获取数据时,都能正常获取到想要的数据(允许可接受范围内的网络延迟)。也就是说,要保证任何时候获取数据都能正常响应。
    P(Partition Tolerance):分区容错性。当网络发生通信故障时,集群任然可用,不会因为某个节点挂掉或者出现问题而影响系统的正常运行。
    一般来说,P是必须要保证的,C、A是根据实际情况来进行取舍。

Zookeeper:保证CP
Zookeeper是保证数据一致性,但是不是保证强一致性。
比如:用户A提交数据,Zookeeper在过半节点操作成功之后就返回,当用户B从其他节点获取数据,这是该节点还没有完成数据更新,用户B就获取不到最新数据。
可以在用户获取数据之前进行sync操作,就是各个节点先与主节点同步一下数据,再去取,这样就能保证数据的强一致性。
关于可用性:Zookeeper在master节点因为网络故障等原因与其他节点失去联系,这是剩余节点会重新选举master,选举的时间太长,需要30-120s,而且选举期间集群是不可用的状态。
Eureka:保证AP
就是针对Zookeeper出现的问题,Eureka优先保证可用性。
大规模网络部署时,失败是在所难免的。在向注册中心查询服务列表是,可以容忍返回的是几分钟前的数据,但是不能忍受服务直接down掉。Eureka保证即使有服务挂掉,也有信息返回,依然可以提供服务注册与发现,只是信息不是最新的。

作为注册中心,最重要的是保证可用性,如果可以接受短时间内的数据不一致,使用Eureka比较合适

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值