服務發現系統etcd介紹

2022-08-31 11:45:14 字數 3170 閱讀 1115

一、概述

etcd是乙個高可用的鍵值儲存系統,主要用於共享配置和服務發現。etcd是由coreos開發並維護的,靈感來自於 zookeeper 和 doozer,它使用go語言編寫,並通過raft一致性演算法處理日誌複製以保證強一致性。raft是乙個新的一致性演算法,適用於分布式系統的日誌複製,raft通過選舉的方式來實現一致性。google的容器集群管理系統kubernetes、開源paas平台cloud foundry和coreos的fleet都廣泛使用了etcd。在分布式系統中,如何管理節點間的狀態一直是乙個難題,etcd像是專門為集群環境的服務發現和註冊而設計,它提供了資料ttl失效、資料改變監視、多值、目錄監聽、分布式鎖原子操作等功能,可以方便的跟蹤並管理集群節點的狀態。

etcd的特性如下:

二、安裝和使用

安裝etcd

etcd支援http restful api,支援get查詢,post,delete,put等操作。為了便於理解,可將它儲存資料的框架看做乙個檔案系統,可以建立目錄和「檔案」,每個「檔案」名就是乙個key,每個「檔案」的內容就是它的value,目錄沒有value只能包含子目錄或者「檔案」,可以通過restful api來獲取這些key的值或者設定這些key的值。

*設定乙個key的value

*獲取乙個key的value

*改變乙個key的value

*刪除乙個key節點

*使用ttl(即設定乙個key的值並給這個key加乙個生命週期,當超過這個時間該值沒有被訪問則自動被刪除)

*watch乙個值的變化

curl -s ?wait=true

該命令呼叫之後會阻塞程序,直到這個值發生變化才能返回,當改變乙個key的值,或者刪除等操作發生時,該等待就會返回結果。

*建立乙個目錄

*列舉乙個目錄

curl -s

*遞迴列舉乙個目錄

curl -s ?recursive=true

監控乙個目錄下的所有key的變化,包括子目錄的。可以使用命令:

curl -s ?recursive=true&wait=true

*刪除乙個目錄

curl -s ?dir=true -xdelete

三、應用場景

服務發現要解決的也是分布式系統中最常見的問題之一,即在同乙個分布式集群中的程序或服務,要如何才能找到對方並建立連線。本質上來說,服務發現就是想要了解集群中是否有程序在監聽udp或tcp埠,並且通過名字就可以查詢和連線。

圖1 服務發現示意圖

微服務協同工作架構中,服務動態新增。隨著docker容器的流行,多種微服務共同協作,構成乙個相對功能強大的架構的案例越來越多。透明化的動態新增這些服務的需求也日益強烈。通過服務發現機制,在etcd中註冊某個服務名字的目錄,在該目錄下儲存可用的服務節點的ip。在使用服務的過程中,只要從服務目錄下查詢可用的服務節點去使用即可。

圖2 微服務協同工作

在分布式系統中,最適用的一種元件間通訊方式就是訊息發布與訂閱。即構建乙個配置共享中心,資料提供者在這個配置中心發布訊息,而訊息使用者則訂閱他們關心的主題,一旦主題有訊息發布,就會實時通知訂閱者。通過這種方式可以做到分布式系統配置的集中式管理與動態更新。

圖3 訊息發布與訂閱

這裡說到的分布式通知與協調,與訊息發布和訂閱有些相似。都用到了etcd中的watcher機制,通過註冊與非同步通知機制,實現分布式環境下不同系統之間的通知與協調,從而對資料變更做到實時處理。實現方式通常是這樣:不同系統都在etcd上對同乙個目錄進行註冊,同時設定watcher觀測該目錄的變化(如果對子目錄的變化也有需要,可以設定遞迴模式),當某個系統更新了etcd的目錄,那麼設定了watcher的系統就會收到通知,並作出相應處理。

因為etcd使用raft演算法保持了資料的強一致性,某次操作儲存到集群中的值必然是全域性一致的,所以很容易實現分布式鎖。鎖服務有兩種使用方式,一是保持獨佔,二是控制時序。

圖4 分布式鎖

服務發現系統etcd介紹

一 概述 etcd是乙個高可用的鍵值儲存系統,主要用於共享配置和服務發現。etcd是由coreos開發並維護的,靈感來自於 zookeeper 和 doozer,它使用go語言編寫,並通過raft一致性演算法處理日誌複製以保證強一致性。raft是乙個新的一致性演算法,適用於分布式系統的日誌複製,ra...

etcd實現服務發現

etcd環境安裝與使用文章中介紹了etcd的安裝及v3 api使用,本篇將介紹如何使用etcd實現服務發現功能。服務發現要解決的也是分布式系統中最常見的問題之一,即在同乙個分布式集群中的程序或服務,要如何才能找到對方並建立連線。本質上來說,服務發現就是想要了解集群中是否有程序在監聽 udp 或 tc...

用etcd實現服務註冊和發現

系統中實現服務註冊與發現所需的基本功能有 在分布式系統中,如何管理節點間的狀態一直是乙個難題,etcd 是由開發並維護的,它使用 go 語言編寫,並通過raft 一致性演算法處理日誌複製以保證強一致性。etcd像是專門為集群環境的服務發現和註冊而設計,它提供了資料 ttl 失效 資料改變監視 多值 ...