Eureka简单入门与案例

1. Eureka 介绍

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能
Eureka包含两个组件:Eureka Server和Eureka Client。

1.1 Eureka Server(注册中心服务端)

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

  • 注册中心服务端主要对外提供了三个功能

    1)服务注册
    服务提供者启动时,会通过Eureka Client 向Eureka Server 注册信息,Eureka Server 会存储该服务的信息,Eureka Server 内部有二层缓存机制来维护整个注册表.
    2)提供注册表
    服务消费者在调用服务时,如果Eureka Client 没有缓存注册表的话,会从 Eureka Server 获取最新的注册表
    3)同步状态
    Eureka Client 通过注册,心跳机制和Eureka Server 同步当前客户端的状态.

1.2 Eureka Client(注册中心客户端)

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。Eureka Client 会拉取,更新和缓存 Eureka Server 中的信息,因此当所有的Eureka Server 节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者,但是当服务有更改的时候会出现信息不一致.

  • Register:服务注册
    服务的提供者,将自身注册到注册中心,服务提供者也是一个Eureka Client ,当Eureka Client 向 Eureka Server 注册时,它提供自身的元数据,比如 IP地址,端口号,运行状况指示符 URL,主页等.
  • Renew:服务续约
    在应用启动后,将会向Eureka Server发送一次心跳来续约,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒,连续三次)。
  • Cancel:服务下线
    Eureka Client 在程序关闭时向Eureka Server 发送取消请求,发送请求后,该客户端实例信息将从Eureka Server 的实例注册表中删除.该下线请求不会自动完成,它需要调用一下内容.
DiscoveryManager.getInstance().shutdownComponent();

Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。

综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性

2. eureka 运行机制

  • 注册
    应用启动时,会连接注册中心进行注册,如果无法连接注册中心,它会一次一次的反复进行注册,直到成功为止.
  • 拉取
    每个服务都会从注册中心拉取注册表,每30秒回重新拉取一次注册表进行更新
  • 心跳
    客户端会每30秒向eureka server 发送异常心跳数据,eureka 连续3次收不到心跳,认为该节点已经死掉,会从注册表删除服务.
  • 自我保护模式
    由于网络不稳定,造成85%以上的服务器出现心跳异常,这时会进入自我保护模式,所有服务都不删除,直到网络恢复,会自动退出自我保护模式.

3.eureka 和 zookeeper 区别

  • eureka
    - 强调 AP – 可用性,分区容错性
    - 集群 – 对等结构
  • zookeeper
    - 强调 CP – 一致性,分区容错性
    - 集群 – 主从结构

分布式领域的CAP理论

  • C – Consistency 一致性
    写操作之后的读操作,必须返回该值,要实现这一功能,那必须在写后同步到其它节点才算写入成功,这无疑降低了性能,也就是失去了A 可用性.
  • A – Availability 可用性
    其实就是高可用,关注程序的性能,响应时间,要保证高可用必然要丢弃数据的一致性
  • P – Partition tolerance 分区容错性
    表示分布式系统在一部分服务不可用时依然可以向外提供服务。

CAP 理论提出这三者不可兼得,而P分区容错性是不可或缺的.

  • eureka为什么选择AP,这跟他的功能有关,他只专注于服务注册和发现,并不会出现数据的竞态条件:(竞态条件: 有同时多个线程竞争同一数据,可能会发生数据不正确的问题)
    在这里插入图片描述

如图:每个client只会向一个eureka server注册,所以并不会出现数据竞态条件,eureka server只需要将其它节点的数据来取过来就好,并不会出现在别的节点拉取到和自己不一致的数据的问题。
就算出现了,数据不一致问题,比如一个client宕机后重启链接了其它节点。因为是用于服务注册,只要覆盖就旧数据就好了。
eureka保证的是最终一致性,最终所有eureka server中的数据会保持一致.所以因为eureka专注于服务注册发现,可用放弃C来保证A,同时也不需要复杂的选举算法,性能也要高于zookeeper.

4.Eureka 的入门案例

1.创建 eureka server 项目(springBoot)
2.配置 application.yml文件
在这里插入图片描述

  • eureka 集群服务器之间,通过 hostname 来区分
  • eureka.server.enable-self-preservation
    eureka 的自我保护状态
  • eureka.client.register-with-eureka=false
    不向自身注册
  • eureka.client.fetch-registry=false
    不从自身拉取注册信息
  • eureka.instance.lease-expiration-duration-in-seconds
    最后一次心跳后,间隔多久认定微服务不可用,默认90

3.配置启动程序

  • 添加 @EnableEurekaServer

4.启动,并访问测试
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值