Consul初探 在深交之前先認識

2022-01-15 13:05:12 字數 1893 閱讀 1383

consul 官方站點:

首先,官方介紹是:consul 是一種服務網格的解決方案,在 consul 中,提供了服務發現、配置、分段等控制管理平台,consul 中的每項功能都可以單獨使用,也可以一起使用來構建完整的服務網格;在 consul 內部,有乙個簡單的**服務,所以在安裝 consul 後,馬上就可以開始使用 consul ;當然,consul 也支援整合第三方**,比如 envoy。

以上,是官方的介紹,我第一次看的時候也是非常的懵逼,因為這裡面涉及了太多的專業詞彙,下面就說說自己的理解。

服務註冊

consul 內部偵聽 8500 埠,提供給 consul 的客戶端註冊服務,比如張三開發了乙個購物車程式,該購物車程式包含了「加入購物車」、「清空購物車」 兩個介面,張三在開發購物車程式的時候,使用了 consul 的客戶端包元件,在程式執行起來以後,購物車程式就自動的連線到 consul 的 8500 埠,註冊了乙個服務,該服務被命名為「購物車程式」,此時,consul 並不知道 「購物車程式」有多少個介面,consul 只知道 「購物車程式」的服務位址、埠。

服務發現

在「購物車程式」註冊到 consul 後,consul 也僅僅知道有這麼乙個服務註冊進來了,並且還配置了健康檢查, consul 會定時的去連線 「購物車程式」,確保其還處於可提供服務的狀態,任何人(程式)都可以通過 consul 的外部位址訪問 consul 內部的已註冊的服務列表,從而獲得真實的服務位址,然後呼叫該真實位址,獲得結果。

集群consul 是乙個分布式的解決方案,可以部署多個 consul 例項,確保資料中心的持續穩定,在 consul 集群中,內部採用投票的方式選舉出 leader,然後才開始執行整個集群,只有正確選舉出 leader 後,集群才開始工作,當乙個服務註冊到 consul 後,集群將該服務進行同步,確保 consul 集群內的每個節點都儲存了該服務的資訊;然後,consul 集群將對該服務進行健康檢查和投票,超過半數通過,即認為該服務為正常(或者異常);一旦被投票認定為異常的服務,該服務將不會被外部發現(不可訪問),在此過程中,consul 將持續的對該異常的服務進行檢查,一旦服務恢復,consul 即刻將其加入正常服務。

伺服器和客戶端

consul 支援兩種執行的方式,即 server 和 client 模式,當乙個 consul 節點以 server 模式執行的時候,就表示該 consul 節點會儲存服務和配置等相關資訊,並且參與到健康檢查、leader 選舉等伺服器事務中,與之相反的是,client 模式不會儲存服務資訊。

資料中心

每個 consul 節點都需要加入乙個命名的資料中心(datacenter),乙個節點上,可以執行多個資料中心,資料中心的作用在於應用隔離,相當於服務分組

鍵值儲存

在 consul 內部,提供了簡單的資料儲存,也就是 key/value 系統,kv 系統非常強大,它的作用包括允許節點動態修改配置、執行 leader 選舉、服務發現、整合健康檢查、或者其它你想要儲存到 consul 中的內容

consul 的架構

好了,現在可以來看一下官方的這張架構圖了

上圖有兩個資料中心,這兩個資料中心內部的資料是不會同步的,他們是獨立執行的,包括其內部的健康檢查、leader 選舉等等都是獨立的,結合上面的介紹,應該可以很容易的讀懂這張圖。

如果不想這麼麻煩的話怎麼辦呢?這就引入了服務閘道器的概念,以 .netcore 為例子,目前比較火熱的就是 ocelot+consul 的搭配,通過在服務中嵌入 ocelot 和 consul 的客戶端,自動的完成服務註冊到(consul)和服務發現(ocelot讀取consul中的服務);當使用者訪問某個 url 的時候,ocelot 將會根據路由將使用者請求**到從 consul 拉取到的真正的服務中;對於 ocelot ,篇幅較長,這裡不作展開。

Consul初探 服務註冊和發現

引用 consul.net 客戶端 在 netcore 平台下,可以使用 consul 的客戶端元件,使其嵌入到業務系統中,完成服務自動註冊 健康檢查等工作,為了使用這些自動化的功能,需要在專案中進行 nuget 包引用 截止本文發文時,consul 的 netstandard 最新版本是 0.7....

跑在main之前

最初發表在qq空間 這裡貼圖不方便 全文見跑在main之前 和跑在main之前 2 有圖有真相。通常這是乙個面試題,如何讓一段 跑在main 函式前面。乙個熟練的c 開發者能夠輕易給出答案,即靜態初始化 在c裡面又如何呢,有沒有辦法做到這點?下面講乙個vc裡的方法。int initbeforemai...

在感到疲勞之前先休息

經常休息,在疲勞之前就休息。這一點為什麼如此重要呢?因為疲勞增加的速度非常快。美國陸軍曾經做過許多實驗,發現即使是經過多年軍事訓練的強壯年輕人,如果不帶揹包,而且每小時休息10分鐘的話,就會走得更遠 更持久,所以陸軍總是強行要求他們這樣做。你的心臟和美國陸軍士兵的一樣聰明。從你的心臟每天流出來穿過全...