歡迎光臨
每天分享高質量文章

註冊中心 Eureka 原始碼解析 —— 登錄檔 InstanceRegistry 類關係

本文主要基於 Eureka 1.8.X 版本

  • 1. 概述

  • 2. 類圖

  • 3. LookupService

  • 4. LeaseManager

  • 5. InstanceRegistry

  • 6. AbstractInstanceRegistry

  • 7. PeerAwareInstanceRegistry

  • 8. PeerAwareInstanceRegistryImpl

  • 666. 彩蛋


友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群討論技術和原始碼。
友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群討論技術和原始碼。
友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群討論技術和原始碼。


1. 概述

本文主要簡介 登錄檔 InstanceRegistry 的類關係,為後文的應用實體註冊發現Eureka-Server 叢集複製做整體的鋪墊。

推薦 Spring Cloud 書籍

  • 請支援正版。下載盜版,等於主動編寫低階 BUG 。

  • 程式猿DD —— 《Spring Cloud微服務實戰》

  • 周立 —— 《Spring Cloud與Docker微服務架構實戰》

  • 兩書齊買,京東包郵。

推薦 Spring Cloud 影片

  • Java 微服務實踐 – Spring Boot

  • Java 微服務實踐 – Spring Cloud

  • Java 微服務實踐 – Spring Boot / Spring Cloud

2. 類圖

  • com.netflix.eureka.registry.AwsInstanceRegistry,主要用於亞馬遜 AWS,跳過。

  • com.netflix.eureka.registry.RemoteRegionRegistry,筆者暫時不太理解它的用途。目前猜測 Eureka-Server 叢集和叢集之間的註冊資訊的互動方式。查閱官方資料,《Add ability to retrieve instances from any remote region》 在做了簡單介紹。翻看目前網路上的部落格、書籍、專案實戰,暫時都沒提及此塊。估摸和亞馬遜 AWS 跨區域( region ) 機制有一定關係,先暫時跳過。有瞭解此塊的同學,麻煩告知下筆者,萬分感謝。TODO[0009]:RemoteRegionRegistry。

  • 藍框部分,本文主角。

3. LookupService

com.netflix.discovery.shared.LookupService,查詢服務介面,提供簡單單一的方式獲取應用集合(com.netflix.discovery.shared.Applications) 和 應用實體資訊集合( com.netflix.appinfo.InstanceInfo )。介面程式碼如下:

public interface LookupService<T> {

   Application getApplication(String appName);

   Applications getApplications();

   List getInstancesById(String id);

   InstanceInfo getNextServerFromEureka(String virtualHostname, boolean secure);

}
  • 在 Eureka-Client 裡,EurekaClient 繼承該介面。

  • 在 Eureka-Server 裡,com.netflix.eureka.registry.InstanceRegistry 繼承該介面。

4. LeaseManager

com.netflix.eureka.lease.LeaseManager,租約管理器介面,提供租約的註冊、續租、取消( 主動下線 )、過期( 過期下線 )。介面程式碼如下:

public interface LeaseManager<T> {

   void register(T r, int leaseDuration, boolean isReplication);

   boolean cancel(String appName, String id, boolean isReplication);

   boolean renew(String appName, String id, boolean isReplication);

   void evict();

}

5. InstanceRegistry

com.netflix.eureka.registry.InstanceRegistry應用實體登錄檔介面。它繼承了 LookupService 、LeaseManager 介面,提供應用實體的註冊發現服務。另外,它結合實際業務場景,定義了更加豐富的介面方法。介面程式碼如下:

public interface InstanceRegistry extends LeaseManager<InstanceInfo>, LookupService<String> {

   // ====== 開啟與關閉相關 ======

   void openForTraffic(ApplicationInfoManager applicationInfoManager, int count);

   void shutdown();

   void clearRegistry();

   // ====== 應用實體狀態變更相關 ======

   void storeOverriddenStatusIfRequired(String appName, String id, InstanceStatus overriddenStatus);

   boolean statusUpdate(String appName, String id, InstanceStatus newStatus,
                        String lastDirtyTimestamp, boolean isReplication)
;

   boolean deleteStatusOverride(String appName, String id, InstanceStatus newStatus,
                                String lastDirtyTimestamp, boolean isReplication)
;

   Map overriddenInstanceStatusesSnapshot();

   // ====== 響應快取相關 ======

   void initializedResponseCache();

   ResponseCache getResponseCache();

   // ====== 自我保護樣式相關 ======

   long getNumOfRenewsInLastMin();

   int getNumOfRenewsPerMinThreshold();

   int isBelowRenewThresold();

   boolean isSelfPreservationModeEnabled();

   public boolean isLeaseExpirationEnabled();

   // ====== 除錯/監控相關 ======
   List> getLastNRegisteredInstances();

   List> getLastNCanceledInstances();
}

6. AbstractInstanceRegistry

com.netflix.eureka.registry.AbstractInstanceRegistry,應用物件登錄檔抽象實現

這裡先不拓展開,《Eureka 原始碼解析 —— 應用實體註冊發現》系列 逐篇分享。

7. PeerAwareInstanceRegistry

com.netflix.eureka.registry.PeerAwareInstanceRegistry,PeerAware ( 暫時找不到合適的翻譯 ) 應用物件登錄檔介面,提供 Eureka-Server 叢集內註冊資訊的同步服務。介面程式碼如下:

public interface PeerAwareInstanceRegistry extends InstanceRegistry {

   void init(PeerEurekaNodes peerEurekaNodes) throws Exception;

   int syncUp();

   boolean shouldAllowAccess(boolean remoteRegionRequired);

   void register(InstanceInfo info, boolean isReplication);

   void statusUpdate(final String asgName, final ASGResource.ASGStatus newStatus, final boolean isReplication);
}

8. PeerAwareInstanceRegistryImpl

com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl,PeerAware ( 暫時找不到合適的翻譯 ) 應用物件登錄檔實現類

這裡先不拓展開,《Eureka 原始碼解析 —— Eureka-Server 叢集》系列 逐篇分享。

666. 彩蛋

知識星球

本文是一篇簡介( 啪啪啪,打臉 ),如果胖友比較著急想瞭解原理,可以閱讀 攜程 ——《深度剖析服務發現元件Netflix Eureka》 先,寫的非常非常非常不錯。

快馬加鞭,更新 《Eureka 原始碼解析 —— 應用實體註冊發現 (一)之註冊》 ing …

胖友,分享我的公眾號( 芋道原始碼 ) 給你的胖友可好?

贊(0)

分享創造快樂