1. 程式人生 > >基於Spring Cloud教程微服務架構--服務中心Eureka

基於Spring Cloud教程微服務架構--服務中心Eureka

1. 構建服務中心

  • Spring Cloud Eureka 是 Spring Cloud Netflix 微 服 務 套 件 中 的 一 部 分, 它 基 於 Netflix Eureka 做 了 二 次 封 裝, 主 要 負 責 完 成 微 服 務 架 構 中 的 服 務 治 理 功 能。
  • Spring Cloud 通 過 為 Eureka 增 加 了 Spring Boot 風 格 的 自 動 化 配 置, 我 們 只 需 通 過 簡 單 引 入 依 賴 和 注 解 配 置 就 能 讓 Spring Boot 構 建 的 微 服 務 應 用 輕 鬆 地 與 Eureka 服 務 治 理 體 系 進 行 整 合。 – 服 務 注 冊: 微服務向服務中心註冊服務 – 服 務 發 現: 呼叫微服務時通過服務中心進行定址(負載均衡,輪詢機制等)

2. 服務註冊與服務發現

  • Spring Cloud Eureka, 使 用 Netflix Eureka 來 實 現 服 務 注 冊 與 發 現, 它 既 包 含 了 服 務 端 組 件, 也 包 含 了 客 戶 端 組 件

Eureka 服 務 端, 我 們 也 稱 為 服 務 注 冊 中 心。 它 同 其 他 服 務 注 冊 中 心 一 樣, 支 持 高 可 用 配 置

Eureka 客 戶 端, 主 要 處 理 服 務 的 注 冊 與 發 現。 客 戶 端 服 務 通 過 注 解 和 參 數 配 置 的 方 式, 嵌 入 在 客 戶 端 應 用 程 序 的 代 碼 中, 在 應 用 程 序 運 行 時, Eureka 客 戶 端 向 注 冊 中 心 注 冊 自 身 提 供 的 服 務 並 周 期 性 地 發 送 心 跳 來 更 新 它 的 服 務 租 約。

3. Eureka服務中心搭建

3.1 新建spring boot 專案

  • 訪問spring官網,進入https://spring.io/projects 在這裡插入圖片描述

3.2 pom檔案引入依賴

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.2.RELEASE</version>
		<relativePath/>
<!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.RC2</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

3.3 EurekaServerApplication.java程式碼

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

	public static void main(String[] args) {
		new SpringApplicationBuilder(EurekaServerApplication.class).web(true).run(args);
	}
}

3.3 Application.yml配置

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

3.4 Eureka資訊面板

  • 服務中心啟動後,訪問預設地址http://localhost:8761/

在這裡插入圖片描述

4. Eureka的服務治理機制

4.1服務提供者

  • 服務註冊:“服 務 提 供 者” 在 啟 動 的 時 候 會 通 過 發 送 REST 請 求 的 方 式 將 自 己 注 冊 到 Eureka Server 上, 同 時 帶 上 了 自 身 服 務 的 一 些 元 數 據 信 息。Eureka Server 接 收 到 這 個 REST 請 求 之 後, 將 元 數 據 信 息 存 儲 在 一 個 雙 層 結 構 Map 中;

  • 服務同步:通 過 服 務 同 步, 兩 個 服 務 提 供 者 的 服 務 信 息 就 可 以 通 過 這 兩 臺 服 務 注 冊 中 心 中 的 任 意 一 臺 獲 取 到;

  • 服務續約:在 注 冊 完 服 務 之 後, 服 務 提 供 者 會 維 護 一 個 心 跳 用 來 持 續 告 訴 Eureka Server:“ 我 還 活 著”, 以 防 止 Eureka Server 的“ 剔 除 任 務” 將 該 服 務 實 例 從 服 務 列 表 中 排 除 出 去, 我 們 稱 該 操 作 為 服 務 續 約( Renew)。

關 於 服 務 續 約 有 兩 個 重 要 屬 性, 我 們 可 以 關 注 並 根 據 需 要 來 進 行 調 整: leureka.instance.lease-renewal-interval-in-seconds = 30 leureka.instance.lease-expiration-duration-in-seconds = 90

4.2 服務消費者

  • 獲取服務:當 我 們 啟 動 服 務 消 費 者 的 時 候, 它 會 發 送 一 個 REST 請 求 給 服 務 注 冊 中 心, 來 獲 取 上 面 注 冊 的 服 務 清 單。 為 了 性 能 考 慮, Eureka Server 會 維 護 一 份 只 讀 的 服 務 清 單 來 返 回 給 客 戶 端, 同 時 該 緩 存 清 單 會 每 隔 30 秒 更 新 一 次。

  • 服務呼叫:服 務 消 費 者 在 獲 取 服 務 清 單 後, 通 過 服 務 名 可 以 獲 得 具 體 提 供 服 務 的 實 例 名 和 該 實 例 的 元 數 據 信 息。客 戶 端 可 以 根 據 自 己 的 需 要 決 定 具 體 調 用 哪 個 實 例, 在 Ribbon 中 會 默 認 採 用 輪 詢 的 方 式 進 行 調 用, 從 而 實 現 客 戶 端 的 負 載 均 衡。

  • 服務下線:所 以 在 客 戶 端 程 序 中, 當 服 務 實 例 進 行 正 常 的 關 閉 操 作 時, 它 會 觸 發 一 個 服 務 下 線 的 REST 請 求 給 Eureka Server, 告 訴 服 務 注 冊 中 心:“ 我 要 下 線 了”。 服 務 端 在 接 收 到 請 求 之 後, 將 該 服 務 狀 態 置 為 下 線( DOWN), 並 把 該 下 線 事 件 傳 播 出 去。

4.3 服務註冊中心

  • 失效剔除:Eureka Server 在 啟 動 的 時 候 會 創 建 一 個 定 時 任 務, 默 認 每 隔 一 段 時 間( 默 認 為 60 秒) 將 當 前 清 單 中 超 時( 默 認 為 90 秒) 沒 有 續 約 的 服 務 剔 除 出 去。

  • 自我保護:Eureka Server 在 運 行 期 間, 會 統 計 心 跳 失 敗 的 比 例 在 15 分 鍾 之 內 是 否 低 於 85%, 如 果 出 現 低 於 的 情 況( 在 單 機 調 試 的 時 候 很 容 易 滿 足, 實 際 在 生 產 環 境 上 通 常 是 由 於 網 絡 不 穩 定 導 致), Eureka Server 會 將 當 前 的 實 例 注 冊 信 息 保 護 起 來, 讓 這 些 實 例 不 會 過 期, 盡 可 能 保 護 這 些 注 冊 信 息。

注意:在 這 段 保 護 期 間 內 實 例 若 出 現 問 題, 那 麼 客 戶 端 很 容 易 拿 到 實 際 已 經 不 存 在 的 服 務 實 例, 會 出 現 調 用 失 敗 的 情 況, 所 以 客 戶 端 必 須 要 有 容 錯 機 制, 比 如 可 以 使 用 請 求 重 試、 斷 路 器 等 機 制。

在這裡插入圖片描述

5. Eureka的配置

5.1 Eureka 客 戶 端 的 配 置

主 要 分 為 以 下 兩 個 方 面

  1. 服 務 注 冊 相 關 的 配 置 信 息, 包 括 服 務 注 冊 中 心 的 地 址、 服 務 獲 取 的 間 隔 時 間、 可 用 區 域 等。 在這裡插入圖片描述
  2. 服 務 實 例 相 關 的 配 置 信 息, 包 括 服 務 實 例 的 名 稱、 IP 地 址、 端 口 號、 健 康 檢 查 路 徑 等。 在這裡插入圖片描述

在這裡插入圖片描述

5.2 Eureka 服務端配置

  • Eureka 服 務 端 更 多 地 類 似 於 一 個 現 成 產 品, 大 多 數 情 況 下, 我 們 不 需 要 修 改 它 的 配 置 信 息。 -在這裡插入圖片描述