一、Netflix Eureka

一、Netflix Eureka(GitHub已停更)

        Eureka是Netflix开源的一款提供服务注册和发现的产品,Spring Cloud对其进行了封装。它是一个基于REST服务的,服务注册与发现的组件,避免了服务之间的直接调用,方便后续的水平扩展、故障转移等。

        服务中心这么重要的组件一但挂掉将会影响全部服务,因此需要搭建Eureka集群来保持高可用性,生产中建议最少两台。随着系统的流量不断增加,需要根据情况来扩展某个服务,Eureka内部已经提供负载均衡的功能,只需要增加相应的服务端实例既可。Eureka有一个心跳检测机制,如果某个实例在规定的时间内没有进行通讯则会自动被剔除掉,避免了某个实例挂掉而影响服务。因此使用了Eureka就自动具有了注册中心、负载均衡、故障转移的功能。

    1、Eureka原理

        服务提供者向注册中心注册服务,并每隔30秒发送一次心跳。如果Eureka在90秒后还未收到服务提供者发来的心跳时,那么它就会认定该服务已经死亡就会注销这个服务。这里注销并不是立即注销,而是会在60秒以后对在这个时间段内“死亡”的服务集中注销,如果立即注销,势必会对Eureka造成极大的负担。这些时间参数都可以人为配置。

        Eureka还有自我保护机制,如果在15分钟内超过85%(默认阙值是85%)的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,所以不会再接收心跳,也不会删除服务。

    2、内部组件

        (1)、Eureka Client:一个Java客户端,用于简化与 Eureka Server 的交互(通常就是微服务中的客户端和服务端)

        (2)、Eureka Server:提供服务注册和发现的能力(通常就是微服务中的注册中心),里面有一个注册表,保存了各个服务所在的机器和端口号

    3、配置

eureka:
  client:
#是否将自己注册到Eureka Server,默认为true
    registerWithEureka: false
#是否从Eureka Server获取注册信息,默认为true。集群时决定Server在初始化时是否立即全量同步其他节点的服务信息
    fetchRegistry: false
    service-url:
     #Eureka Server和Eureka Client在启动时需要指定Zone,它会优先请求自己Zone的Eureka Server获取注册列表,其会默认使用 defaultZone。
     defaultZone: ${eureka.client.service-url.defaultZone}
  instance:
    ip-address: ${eureka.instance.ip-address}
    prefer-ip-address: ${eureka.instance.prefer-ip-address}
    instance-id: ${eureka.instance.instance-id}
    #自定义心跳监测
    health-check-url: http://${eureka.instance.instance-id}/actuator/health

    4、注解

        (1)、@EnableEurekaClient

            启用Eureka客户端,基于spring-cloud-commons,可以支持eureka、consul、zookeeper等等。

        (2)、@EnableDiscoveryClient

            启用发现客户端,基于spring-cloud-netflix,支持eureka、zookeeper、consul

        (3)、@EnableEurekaServer

            启用Eureka服务端。

    5、Eureka集群

        Eureka Server组成的集群,保证AP(CAP定理):

            Eureka Server:Server 1 部署在A机房,Server 2 部署在B机房,Server 3 部署在C机房,Server 4 部署在D机房

            Eureka Client:Client 1 ,Client 2 ,Client 3 ,Client 4

        Eureka Server相互之间不区分主节点和从节点,所有的节点都是平等的。节点通过彼此互相注册来提高可用性,每个Server节点需要添加一个或多个有效的serviceUrl指向其他Server节点。Eureka Server之间的服务同步是异步执行的。同时Server之间的同步只会传播一次,它们通过Header里的一个参数来表明是来自Client的请求还是Server的请求。如果是Server的请求,那么接收到此请求后不会再进行传播。

        (1)、Server 4 与Server 1 互相注册,所以可以通过Server 1 调用Client 3(这里是指直接通过),也就是Client 4 可以发现Client 3。

        (2)、Server 1、Server 3、Server 4 都相互注册,但Server 3 和Server 4 没有相互注册,所以Client 3 和Client 2 是互相发现不了的。

        (3)、如果Client 2 也在Server 1 上注册,那么Client 2 只能跟Server 1、Server 3 其中一个交互,只有跟Server 1 交互才可以发现Client 3,跟Server 3 交互发现不了Client 3。

    6、配置文件

eureka:
  instance:
    ip-address: 192.168.250.32
    prefer-ip-address: true
    instance-id: 192.168.250.4:9028
  client:
    service-url:
      defaultZone: http://eureka-0.eureka.thc-dev-ucbj-dev4.svc.syzx.thc.local:8080/eureka/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值