zoukankan      html  css  js  c++  java
  • 服务注册与发现—Eureka初探

    一:Eureka简介

      Eureka的意思是(因找到某物,尤指问题的答案而高兴) 我发现了,我找到了,作为一个服务注册和发现中心的名字确实很贴切啊。

      Eureka包含两个组件,Eureka Server和Eureka Client,Eureka Server提供服务发现的能力,其实理解为注册更适合,因为Eureka Server不会主动去寻找发现,而是各个微服务启动的时候,向Eureka Server注册自己的信息,例如IP地址,端口号,服务名称等等,Eureka Server会把微服务的信息存储起来。微服务启动之后,会周期性的(默认30s)向Eureka Server发送心跳以续约自己的租期。如果Eureka Server在一定时间内(默认90s)没有收到某个微服务的心跳,则会注销该微服务实例。

      默认情况下,Eureka Server同时也是Eureka Client,多个微服务之间可以通过复制的方式,来实现服务注册表中数据的同步,Eureka Client也会缓存服务注册表中的信息,这样的好处是,不用每次请求都查询Eureka Server,降低了Eureka Server的压力,也降低了请求的延迟。其次,即使Eureka Server宕机了,消费者依然能依靠自己的缓存信息,找到服务提供者,提高了系统的可用性。但是依然存在Eureka Server宕机之后,某些微服务出现不可用情况却无法监测到,Eureka Client的缓存无法更新,影响系统的可用性。所以要使用集群让Eureka Server具有高可用性。

    二:Eureka Server

      1、引入Eureka依赖:spring-cloud-starter-eureka-server

      2、在启动类添加注解:EnableEurekaServer

      3、配置文件:

    #单机配置
    server:
        port: 8761
    eureka:
        client:
    #是否将自己注册在Server上,默认true,由于当前应用是Server,所以设为false
            registerWihEureka: false 
    #是否需要从Server获取注册信息,默认true,由于当前Server是单节点,不需要同步注册信息,所以设为false
            fetchRegistry: false 
            serviceUrl:
    #与Eureka Server交互的地址,服务注册和查询都依赖这个地址,默认的地址是http://localhost:8761/eureka/,多个地址可以使用,号隔开
                defaultZong: http://localhost:8761/eureka/ 
    
    #集群配置
    #是否注册到Server和是否从Server上获取注册信息都是用默认的true
    spring:
        application:
            name: microserver-discovery-eureka-ha
    server:
        port: 8761
    eureka:
        instance:
            hostname: peer1
        client:
            serviceUrl:
    #另一个注册中心的地址
                defaultZong: http://localhost:8762/eureka/  
    Server配置

    三、服务注册

      1、引入Eureka依赖:spring-cloud-starter-eureka

      2、在启动类添加注解:@EnableDiscoveryClient 或@EnableEurekaClient

      3、配置文件:

    #是否注册到Server和是否从Server上获取注册信息都是用默认的true
    spring:
        application:
    #指定注册到Server的应用名称
            name: microserver-provider-user
    eureka:
        instance:
    #将自己的ip地址注册到Server,如果不配置或者设为false,则标识注册微服务所在的hostname到Server
            prefer-ip-address: true
        client:
            serviceUrl:
    #注册中心的地址,多个地址用英文逗号隔开
                defaultZong: http://localhost:8762/eureka/  
    Client配置

    四:为Eureka Server添加用户认证

      1、添加spring-boot-starter-security依赖

      2、配置文件:

    #Server配置
    #如果不设置这段内容,默认账户是user,密码是随机值,会在启动时打印出来
    security:
        basic:
            enable: true #开启基于HTTP basic的认证
        user:
            name: user
            password: password12
    
    #Client配置
    eureka:
        client:
            serviceUrl:
                defaultZong: http://user:password12@localhost:8761/eureka/
    配置文件

    五:元数据

      Eureka的元数据有两种:标准元数据和自定义元数据
      标准元数据:主机名、IP地址、端口号、状态页和健康检查等信息,这些信息都会被发布在服务注册表中,用于服务之间的调用。
      自定义元数据:可以使用eureka.instance.metadata-map配置,这些元数据可以在远程客户端中访问,但是一般不改变客户端行为,除非客户端知道该元数据的含义

    六:Eureka server REST端点

      很多REST端点,我的理解是,主要用于其他语言的微服务或者页面调用操作Eureka的,比如注册发现注销,查看当前某个或所有微服务实例。这个可以用的时候再去了解需要用的那个接口。

    七:Eureka的自我保护模式

      默认情况下,Eureka Server在90秒内没有收到某个微服务的心跳,就会注销该微服务,但是,当网络分区发生故障的时候,多个微服务与Server无法正常通信,注销行为就显得比较危险了,因为微服务本身其实是可用的,而且在相关微服务没有宕机的情况下,服务注册表中的信息也没有变动,缓存也不需要更新。直接注销掉多个微服务会导致系统可用性下降。

      所以,Eureka通过“自我保护模式”来解决这个问题,当Eureka Server在短时间内丢失过多客户端时,这个节点就会进入自我保护模式,保护服务注册表中的信息,不在删除服务注册表中的数据,也就是不会注销任何微服务,当网络故障恢复后,该节点会自动退出自我保护模式。

      自我保护模式是宁可保留不健康的微服务,也不盲目注销掉健康的微服务,在spring Cloud中,可以使用eureka.servrer.enable-self-preservation =  false禁用自我保护模式。

    八:多网卡环境下的ip选择

      对于多服务器网卡,某些情况需要指定IP,将指定IP注册到Eureka Server上,保证微服务的可用性。spring cloud提供了按需选择IP的能力。

      1:按名称忽略网卡

    #按名称忽略网卡
    #忽略docker0网卡和veth开头的网卡
    spring:
        cloud:
            inetutils:
                ignored-interfaces:
                    - docker0
                    - veth.*
    eureka:
        instance:
            prefer-ip-address: true
    
    #使用正则表达式指定ip地址
    spring:
        cloud:
            inetutils:
                preferredNetworks:
                    - 192.168
                    - 10.0
    eureka:
        instance:
            prefer-ip-address: true
    
    #只使用站点本地网址
    spring:
        cloud:
            inetutils:
                useOnlySitelocalInterfaces: true
    eureka:
        instance:
            prefer-ip-address: true
    
    #手动指定ip地址
    eureka:
        instance:
            prefer-ip-address: true
            ip-adress: 127.0.0.1
    配置IP选择

    九:Eureka的健康检查

      在Eureka首页,可以在status栏看到微服务的运行情况,应用状态有UP,DOWN,OUT_OF_SERVICE,UNKNOWN四个状态,只有标记UP的微服务才会被请求。但是标记UP的微服务并不一定正常,比如数据源发生问题,并不能正常工作。不是UP的微服务也不一定有问题,比如只是因为网络原因,无法向Server发送心跳导致被注销。

      要更真实的了解微服务的健康状态,需要启用Eureka的健康检查,这样,微服务就会将自己的健康状态传播到Server。这个健康检查也只能确定UP状态的微服务是否真的正常运行。开启健康检查需要在微服务配置:

    eureka:
        client:
            helathcheck:
                enable: true
    开启健康检查

      在某些场景下,可能需要更细粒度的健康检查,可以通过实现com.netflix.appinfo.Health-CheckHandler接口

  • 相关阅读:
    python2
    python1
    jmeter基础使用
    LoadRuuner资源监控
    UI自动化
    MYSQL增删改查添加外键
    DW网页代码笔记
    Linux常用命令(常用)
    Linux常用命令大全(全全全!!!)
    第十二章 : shell 环境
  • 原文地址:https://www.cnblogs.com/yanghanwen/p/12081237.html
Copyright © 2011-2022 走看看