1. 程式人生 > 其它 >資料結構 - (4)簡單二叉樹 插入及輸出

資料結構 - (4)簡單二叉樹 插入及輸出

服務治理

Spring Cloud 封裝了 Netflix 公司開發的 Eureka 模組來實現服務治理。

在傳統的 rpc 遠端呼叫框架中,管理每個服務與服務之間依賴關係比較複雜,管理比較複雜,所以需要使用服務治理,管理服務於服務之間依賴關係,可以實現服務呼叫、負載均衡、容錯等,實現服務發現與註冊。

服務註冊與發現

Eureka 採用了 CS 的設計架構,Eureka Server 作為服務註冊功能的伺服器,它是服務註冊中心。而系統中的其他微服務,使用 Eureka 的客戶端連線到 Eureka Server 並維持心跳連線。這樣系統的維護人員就可以通過 Eureka Server 來監控系統中各個微服務是否正常執行。

在服務註冊與發現中,有一個註冊中心。當伺服器啟動的時候,會把當前自己伺服器的資訊,比如:服務地址、通訊地址等以 別名方式 註冊到註冊中心上。另一方(消費者|服務提供者),以該別名的方式去註冊中心上獲取到實際的服務通訊地址,然後再實現本地 RPC(Remote Procedure Call) 呼叫 RPC。

遠端呼叫框架核心設計思想:在於 註冊中心,因為使用註冊中心管理每個服務與服務之間的一個依賴關係(服務治理概念)。在任何 rpc 遠端框架中,都會有一個註冊中心(存放服務地址相關資訊(介面地址))

Eureka 的兩個元件

Eureka 包含兩個元件:Eureka ServerEureka Client

Eureka Server 提供服務註冊服務。各個微服務節點通過配置啟動後,會在EurekaServer中進行註冊,這樣EurekaServer中的服務登錄檔中將會儲存所有可用服務節點的資訊,服務節點的資訊可以在介面中直觀看到。

Eureka Client 通過註冊中心進行訪問。是一個 Java 客戶端,用於簡化 Eureka Server 的互動,客戶端同時也具備一個內建的、使用輪詢(round-robin)負載演算法的負載均衡器。

在應用啟動後,將會向 Eureka Server 傳送心跳(預設週期為 30 秒)。如果 Eureka Server 在多個心跳週期內沒有接收到,Eureka Serve 將會從服務登錄檔中把這服務節點移除(預設 90 秒);

自我保護機制

概述

保護模式主要用於一組客戶端和Eureka Server之間存在網路分割槽場景下的保護。一旦進入保護模式,Eureka Server將會嘗試保護其服務登錄檔中的資訊,不再刪除服務登錄檔中的資料,也就是不會登出任何微服務。

如果在Eureka Server的首頁看到以下這段提示,則說明Eureka進入了保護模式:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT.
RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE

為什麼會產生 Eureka 自我保護機制

為了 EurekaClient 可以正常執行,但是與 EurekaServer 網路不通情況下,EurekaServer 不會立刻將EurekaClient 服務剔除。

預設情況下,如果 EurekaServer 在一定時間內沒有接收到某個微服務例項的心跳,EurekaServer 將會登出該例項(預設90秒)。但是當網路分割槽故障發生(延時、卡頓、擁擠) 時,微服務與 EurekaServer 之間無法正常通訊,以上行為可能變得非常危險了—— 因為微服務本身其實是健康的,此時本不應該登出這個微服務。Eureka 通過“自我保護模式”來解決這個問題——當 EurekaServer 節點在短時間內丟失過多客戶端時(可能發生了網路分割槽故障),那麼這個節點就會進入自我保護模式。

開關自我保護機制

server:
	#關閉自我保護機制,保證不可用服務被及時踢除
	enable-self-preservation: false
	eviction-interval-timer-in-ms: 2000

總結

在自我保護模式中,Eureka Server 會保護服務登錄檔中的資訊,不再登出任何服務例項。

它的設計哲學就是寧可保留錯誤的服務註冊資訊,也不盲目登出任何可能健康的服務例項。自我保護模式是一種應對網路異常的安全保護措施,使用自我保護模式,可以讓 Eureka 叢集更加的健壯、穩定。

Consul

簡介

Consul 是一套開源的分散式 服務發現配置管理 系統,由 HashiCorp 公司用 Go 語言開發。

提供了微服務系統中的服務治理、配置中心、控制匯流排等功能。這些功能中的每一個都可以根據需要單獨使用,也可以一起使用以構建全方位的服務網格,總之Consul提供了一種完整的服務網格解決方案。

它具有很多優點。包括: 基於 raft 協議,比較簡潔; 支援健康檢查, 同時支援 HTTP 和 DNS 協議 支援跨資料中心的 WAN 叢集 提供圖形介面 跨平臺,支援 Linux、Mac、Windows;

主要特點

服務發現

Consul 的客戶端可以註冊服務,例如 or ,其他客戶端可以使用 Consul 發現給定服務的提供者。使用 DNS 或 HTTP,應用程式可以輕鬆找到它們所依賴的服務。相當於是 api 中的 mysql。

健康檢查

Consul 客戶端可以提供任意數量的健康檢查,或者與給定服務相關聯(“網路伺服器是否返回 200 OK”),或者與本地節點相關聯(“記憶體利用率是否低於 90%”)。操作員可以使用此資訊來監控叢集的健康狀況,服務發現元件使用它來將流量從不健康的主機中路由出去。

KV 儲存

應用程式可以將 Consul 的分層鍵/值儲存用於任意數量的目的,包括動態配置、特徵標記、協調、領導者選舉等。簡單的 HTTP API 使其易於使用。

安全服務通訊

Consul 可以為服務生成和分發 TLS 證書以建立相互 TLS 連線。意圖可用於定義允許通訊的服務。可以通過可以實時更改的意圖輕鬆管理服務分段,而不是使用複雜的網路拓撲和靜態防火牆規則。

多資料中心

Consul 支援開箱即用的多個數據中心。這意味著 Consul 的使用者不必擔心構建額外的抽象層以擴充套件到多個區域。

使用指南

https://www.springcloud.cc/spring-cloud-consul.html

四者的對比

對比項 Eureka Zookeeper Consul Nacos
語言 Java Java Go
CAP AP CP CP CP+AP
服務健康檢查 可配支援 支援 支援 支援
對外暴露介面 HTTP HTTP/DNS 客戶端 HTTP/DNS
Spring Cloud 整合 已整合 已整合 已整合 已整合
跨註冊中心同步 不支援 不支援 支援 支援
雪崩保護