.net core Consul
什麼是Consul?
Consul
是HashiCorp公司推出的開源工具,Consul由Go語言開發,部署起來非常容易,只需要極少的可執行程式和配置檔案,具有綠色、輕量級的特點。Consul
是分散式
的、高可用
的、可橫向擴充套件
的用於實現分散式系統的服務發現與配置。
Consul具有哪些特點?
- 服務發現(Service Discovery):
Consul
提供了通過DNS或者HTTP介面的方式來註冊服務和發現服務。一些外部的服務通過Consul很容易的找到它所依賴的服務。 - 健康檢查(Health Checking):Consul的Client可以提供任意數量的健康檢查,既可以與給定的服務相關聯(“webserver是否返回200 OK”),也可以與本地節點相關聯(“記憶體利用率是否低於90%”)。操作員可以使用這些資訊來監視叢集的健康狀況,服務發現元件可以使用這些資訊將流量從不健康的主機路由出去。
- Key/Value儲存:應用程式可以根據自己的需要使用Consul提供的Key/Value儲存。 Consul提供了簡單易用的HTTP介面,結合其他工具可以實現動態配置、功能標記、領袖選舉等等功能。
- 安全服務通訊:Consul可以為服務生成和分發TLS證書,以建立相互的TLS連線。意圖可用於定義允許哪些服務通訊。服務分割可以很容易地進行管理,其目的是可以實時更改的,而不是使用複雜的網路拓撲和靜態防火牆規則。
- 多資料中心:Consul支援開箱即用的多資料中心. 這意味著使用者不需要擔心需要建立額外的抽象層讓業務擴充套件到多個區域。
為什麼使用服務發現
防止硬編碼、容災、水平擴縮容、提高運維效率等等,只要你想使用服務發現總能找到合適的理由。
一般的說法是因為使用微服務架構。傳統的單體架構不夠靈活不能很好的適應變化,從而向微服務架構進行轉換,而伴隨著大量服務的出現,管理運維十分不便,於是開始搞一些自動化的策略,服務發現應運而生。所以如果需要使用服務發現,你應該有一些對服務治理的痛點。
但是引入服務發現就可能引入一些技術棧,增加系統總體的複雜度,如果你只有很少的幾個服務,比如10個以下,並且業務不怎麼變化,吞吐量預計也很穩定,可能就沒有必要使用服務發現。
Consul術語及解釋
下面列出幾個consul中出現頻率較高的術語
-
Agent,Agent是長期執行在每個consul叢集成員節點上守護程序。通過命令consul agent啟動。Agent有client和server兩種模式。由於每個節點都必須執行agent,所有節點要麼是client要麼是server。所有的Agent都可以可以呼叫DNS或HTTP API,並負責檢查和維護服務同步。
-
client執行client模式的Agent,將所有的RPCs轉發到Server。Client是相對無狀態的。Client唯一所做的是在後臺參與LAN gossip pool。只消耗少量的資源,少量的網路頻寬。
-
Server執行Server模式的Agent,參與Raft quorum,維護叢集的狀態,響應RPC查詢,與其他資料中心互動WAN gossip,轉發查詢到Leader或遠端資料中心。
-
datacenter資料中心的定義似乎是顯而易見的,有一些細節是必須考慮的。例如,在EC2,多個可用性區域是否被認為組成了單一的資料中心?我們定義資料中心是在同一個網路環境中——私有的,低延遲,高頻寬。這不包括基於公共網際網路環境,但是對於我們而言,在同一個EC2的多個可用性區域會被認為是一個的資料中心。
-
關於client和server我搞了好久才搞明白,實際上client不儲存資料,傳送到client的請求,client都會轉發給它繫結的server,也就是說client必須繫結server。server會儲存資料,如果只有一個server並在上面註冊了一個服務,這個server掛了然後你又重啟了,那麼這個服務的註冊資訊仍然儲存在server上。