• (2-3)Eureka详解


    基础架构

    • 服务注册中心 
    • 服务提供者
    • 服务消费者

    服务治理

      服务提供者

        服务注册。在服务注册时,需要确认一下eureka.client.registerwith-eurek=ture参数是否正确,默认是true,若设置为false将不会启动注册操作。

        服务同步。两个服务提供者的服务信息是一样的

        服务续约。主要看两个主要属性

    #定义服务续约任务的调用间隔时间,默认为30秒
    eureka.instance.lease-renewal-interval-in-seconds=30
    #定义服务失效的时间,默认为90秒
    eureka.instance.lease-expiration-duration-in-secodes=90

      服务消费者

      获取服务

        当服务消费者启动的时候,会发送一个REST请求给服务注册中心,来获取服务注册清单。为了性能考虑,Eureka Server会维护一份只读的服务清单来返回给客户端,同时该缓存清单会

      每隔30秒更新一次。

        获取服务是服务消费者的基础,所以必须确保eureka.client.fetch-registry=ture(该值默认是true)。可以通过 eureka.client.registry-fetch-interval-seconds=30参数修改缓存清单的更新时间。

      服务调用

        服务消费者在获取的服务清单后,通过服务名可以获得具体提供服务的实例名和该实例的元数据信息。因为有这些服务实例的详细信息,所以客户端可以根据自己的需要决定具体调用哪个

      实例,在Ribbon中会默认采用轮询的方式进行调用,从而实现客户端的负载均衡。

        对于访问实例选择,Eureka中有Region和Zone的概念,一个Region中可以包含多个Zone,每个服务客户端需要被注册到一个Zone中,所以每个客户端对应一个Region和一个Zone。

      服务下线

        在客户端程序中,当服务实例进行正常的关闭操作时,它会出发一个服务下线的REST请求给Eureka Server,告诉服务注册中心“我要下线了”。服务端在接受到请求后,讲该服务状态置为下线并

      把该下线事件传播出去。

      服务注册中心

      失效剔除

        有时服务实例不是正常下线的,而服务注册中心并未收到“服务下线”的请求。为了从服务列表讲这些无法提供服务的实例剔除,Eureka Server在启动的时候会创建一个定时任务,默认每隔60秒

      将当前清单中超时(默认90秒)没有续约的服务剔除出去。

      自我保护

        在服务注册中心的信息面板中出现类似下面的红色警告信息:

        实际上,该警告就出发了Eureka Server的自我保护机制。Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况Eureka Server会将当前实例注册

      信息保护起来,让这些实例不会过期,尽可能保护这些注册信息。

        在本地调试的时候很容易触发注册中心的保护机制,这会使得注册中心维护的服务实例不那么准确。所以我们再本地进行开发的时候,可以用eureka.server.enable-self-preservation=false参数

      来关闭保护机制,保证注册中心将不可用的实例正确剔除。

     配置详解:

      Eureka客户端的配置主要非为两个方面

    • 服务注册相关的配置信息,包括服务注册中心的地址、服务获取的间隔时间、可用区域等。
    • 服务实例相关的配置信息,包括服务实例的名称、IP地址、端口号、健康检查路径等。

      服务注册类配置:

      指定注册中心:

        eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

      注册高可用的富足注册中心时:

        eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2/1112/eureka/

      为服务注册中心加入校验:

        eureka.client.serviceUrl.defaultZone=http://<username>:<password>@localhost:1111/eureka

      服务实例类配置:

      元数据:

        我们可以通过eureka.instance.<properties>=<value>的格式对标准化元数据直接进行配置。其中<properties>就是EurekaInstanceConfigBean对象中的成员变量名。对于自定义元数据,可以通

      过eureka.instance.metadataMap.<key>=<value>格式进行配置。比如:

        eureka.instance.metadataMap.zone=shanghai

       实例名配置:

        它是区分统一服务中不同实例的唯一标识。在Netflix Eureka 的原生实现中,实例名采用主机名作为默认值。这样的设置使得在同一个主机上无法穷的那个多个相同的服务实例。在Spring Cloud

      Eureka的配置中,针对同一主机中启动多实例的情况,采用如下默认规则

        ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${SERVER.PORT}}

        对于实例名的命名规则,我们可以通过eureka.instance.instanceId参数来进行配置。虽然可以在命令行中指定不同的server.port来启动,但是还是略显麻烦。我们可以直接通过设置

      server.port=0或者使用随机数server.port=${random.int[10000,19999]}来让Tomcat启动的时候才用随机端口。但是这个时候Eureka Server的实例名都是相同的,这会使得只有一个服务实例能够正常

      体统服务。对于我这个问题,我们就可以通过设置实例名规则来解决:

        erueka.instance.instanceId=${spring.application.name}:${random.int}

    参考:

     [1] 《SpringCloud微服务实战》,电子工业出版社,翟永超

  • 相关阅读:
    Django-xadmin
    Django-DRF框架中认证与权限
    Django-DRF视图集
    Django-DRF序列化器
    javascript
    web-api
    ES6语法
    Redis缓存雪崩、击穿、穿透
    Jetbrains IDEA 系列软件最新crack方案
    jmeter设置代理服务器录制脚本
  • 原文地址:https://www.cnblogs.com/happyflyingpig/p/8003715.html
Copyright © 2020-2023  润新知