<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Eureka on 小蜜蜂</title>
        <link>https://xumf.net/tags/eureka/</link>
        <description>Recent content in Eureka on 小蜜蜂</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Tue, 01 May 2018 13:16:53 +0800</lastBuildDate><atom:link href="https://xumf.net/tags/eureka/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Eureka</title>
            <link>https://xumf.net/blog/eureka/</link>
            <pubDate>Tue, 01 May 2018 13:16:53 +0800</pubDate>
            <guid>https://xumf.net/blog/eureka/</guid>
            <description>&lt;h1 id=&#34;eureka&#34;&gt;Eureka&#xA;&lt;/h1&gt;&lt;p&gt;配置中心核心功能：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;集中化管理&lt;/li&gt;&#xA;&lt;li&gt;版本管理&lt;/li&gt;&#xA;&lt;li&gt;动态更新&lt;/li&gt;&#xA;&lt;li&gt;权限控制&lt;/li&gt;&#xA;&lt;li&gt;环境隔离&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;基本功能：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;服务发现&#xA;eureka客户端可以向eureka服务端获取服务实例列表&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;服务注册&#xA;eureka客户端启动的时候&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;三级缓存&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;读缓存 ReadOnlyCache&lt;/li&gt;&#xA;&lt;li&gt;写缓存 WriteCache&lt;/li&gt;&#xA;&lt;li&gt;注册表缓存&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;自我保护机制&#xA;在网络通讯产生问题时，避免大量正常客服端实例被清除&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;eureka 自我保护机制服务端相关影响配置&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;eureka&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;server&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;enable-self-preservation&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# 默认true，开启自我保护&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;renewal-percent-threshold&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0.85&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# 续约百分比阈值，默认0.85&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;renewal-threshold-update-interval-ms&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;900000&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# 更新阈值的时间间隔，默认15分钟&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;eureka 自我保护机制客户端相关影响配置&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;eureka&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;instance&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;lease-renewal-interval-in-seconds&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# 客户端续约间隔，默认30秒&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;lease-expiration-duration-in-seconds&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;90&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# 服务过期时间，默认90秒&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;客户端服务注册流程&#34;&gt;客户端服务注册流程&#xA;&lt;/h4&gt;&lt;p&gt;每当有客服端服务启动时，客户端会根据配置eureka服务端的地址，向服务端发起注册动作，服务端收到注册请求，会更新注册表缓冲信息，增加新的客户端信息到注册表缓冲，然后将注册表信息更新到写缓存。&lt;/p&gt;&#xA;&lt;h4 id=&#34;客户端读取数据流程&#34;&gt;客户端读取数据流程&#xA;&lt;/h4&gt;&lt;ol&gt;&#xA;&lt;li&gt;客户端查看本地缓存是否存在&#xA;&lt;ol&gt;&#xA;&lt;li&gt;存在：直接返回本地缓存中的数据&lt;/li&gt;&#xA;&lt;li&gt;不存在：请求服务端获取数据&#xA;&lt;ol&gt;&#xA;&lt;li&gt;获取读缓存，存在直接返回；不存在直接进入下一步&lt;/li&gt;&#xA;&lt;li&gt;获取写缓存，存在直接返回，并且将数据更新到读缓存；不存在直接进入下一步&lt;/li&gt;&#xA;&lt;li&gt;获取注册表缓存，存在直接返回，并且将数据更新到读缓存与写缓存&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h4 id=&#34;缓存更新场景&#34;&gt;缓存更新场景&#xA;&lt;/h4&gt;&lt;p&gt;注册表更新场景：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;服务实例注册&lt;/li&gt;&#xA;&lt;li&gt;服务实例注销&lt;/li&gt;&#xA;&lt;li&gt;服务实例续约（心跳）&lt;/li&gt;&#xA;&lt;li&gt;服务实例状态变更&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;写缓存更新场景：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;每当注册表发生变化时，写缓存会被同时更新到最新的注册表信息&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;读缓存更新场景：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;每隔30s会同步写缓存数据&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h4 id=&#34;eureka-中服务实例的状态主要包括以下几种&#34;&gt;Eureka 中服务实例的状态主要包括以下几种：&#xA;&lt;/h4&gt;&lt;ul&gt;&#xA;&lt;li&gt;UP：服务实例正常运行，可接收请求。&#xA;&lt;ul&gt;&#xA;&lt;li&gt;当eureka服务实例发起服务注册时&lt;/li&gt;&#xA;&lt;li&gt;当eureka服务实例发起心跳，进行续期成功后，保持UP状态&lt;/li&gt;&#xA;&lt;li&gt;当eureka服务实例启动成功后，将状态从STARTING更改为UP&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;DOWN：服务实例不可用。&#xA;&lt;ul&gt;&#xA;&lt;li&gt;当eureka服务实例主动注销&lt;/li&gt;&#xA;&lt;li&gt;当eureka实例在规定的时间（默认90s）内没有发送心跳消息&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;STARTING：服务实例正在启动。&#xA;&lt;ul&gt;&#xA;&lt;li&gt;当服务器启动时&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;OUT_OF_SERVICE：服务实例被手动下线，不可用。&#xA;&lt;ul&gt;&#xA;&lt;li&gt;通过Eureka的管理接口或者UI，可以手动将状态从UP更改为OUT_OF_SERVICE&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;UNKNOWN：服务实例状态未知。&#xA;&lt;ul&gt;&#xA;&lt;li&gt;当网络分区时（网络问题导致服务之间无法通讯），Eureka服务端无法确认服务实例的状态时，就会将状态改为 UNKNOWN&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;eureka各端缓存应用交互&#34;&gt;Eureka各端缓存应用交互&#xA;&lt;/h4&gt;&lt;pre class=&#34;mermaid&#34; style=&#34;visibility:hidden&#34;&gt;sequenceDiagram&#xA;    participant Client as 客户端&#xA;    participant LocalCache as 本地缓存&#xA;    participant EurekaServer as Eureka 服务器&#xA;    participant ServiceInstance as 服务实例&#xA;&#xA;    Client-&gt;&gt;LocalCache: 1. 检查本地缓存&#xA;    alt 缓存有效&#xA;        LocalCache--&gt;&gt;Client: 返回缓存的服务实例&#xA;    else 缓存无效或过期&#xA;        Client-&gt;&gt;EurekaServer: 2. 请求服务实例信息&#xA;        EurekaServer-&gt;&gt;EurekaServer: 3. 检查读缓存&#xA;        alt 读缓存有效&#xA;            EurekaServer--&gt;&gt;Client: 返回读缓存的服务实例&#xA;        else 读缓存过期&#xA;            EurekaServer-&gt;&gt;EurekaServer: 4. 从写缓存加载最新数据&#xA;            EurekaServer--&gt;&gt;Client: 返回最新的服务实例&#xA;        end&#xA;        Client-&gt;&gt;LocalCache: 5. 更新本地缓存&#xA;    end&#xA;    Client-&gt;&gt;ServiceInstance: 6. 调用目标服务实例&#xA;    Client-&gt;&gt;EurekaServer: 7. 定时拉取最新服务实例&#xA;    EurekaServer--&gt;&gt;Client: 返回最新的服务实例&#xA;    Client-&gt;&gt;LocalCache: 8. 更新本地缓存&lt;/pre&gt;</description>
        </item></channel>
</rss>
