winserver的consul部署實踐與.net core客戶端使用(附demo原始碼)
前言
隨著微服務興起,服務的管理顯得極其重要。都知道微服務就是”拆“,把臃腫的單塊應用,拆分成多個輕量級的服務,每個服務可以在短週期內重構、迭代、交付。隨著微服務的數量增多,因量變引起了質量,帶來新的問題其中一個是服務的管理問題。隨著業務發展微服務增多,可能技術負責人也無法清楚記著服務的部署情況,服務的健康也不能時刻關注著,因此服務治理系統的作用必不可少。
本篇文章的原始碼:
demo:https://github.com/SkyChenSky/Consul.Demo
封裝:https://github.com/SkyChenSky/Sikiro.Tookits.Consul
Consul
Consul是一款簡單、易用、可伸縮性強的服務治理系統。
主要核心功能有:
服務發現
健康檢查
鍵值儲存
多資料中心
consul代理會每個一段時間對註冊中心的服務節點進行訪問,如果響應碼為“20X"認為是健康。
鍵值儲存可以認為是一個簡易的k/v資料庫,因此可以用此來存放配置資訊。
服務發現
服務發現分服務註冊和服務查詢。
服務註冊
將服務節點資訊(地址+埠)新增(刪除)到登錄檔,登錄檔會記錄著服務的節點資訊和狀態
服務查詢
由其他的服務或者系統通過登錄檔查詢到指定可用服務的節點資訊。
服務發現的方式
服務發現的方式又分自主式和代理式。
自主式
由各個服務主動的將自己節點資訊新增(刪除)到註冊中心。實現是通過統一封裝或者程式庫,由服務各個節點承擔服務發現的功能,與代理式相比由各自節點分擔的訪問壓力。
代理式
由一個系統(負載均衡系統)或者服務(API閘道器)來完成服務發現。因為由一個系統或者服務完成,隨著註冊服務的增加會帶來效能瓶頸,因此需要對此做叢集。
Consul模式
Consul有兩種模式,Client和Server,無論各種模式都有一個consul agent。
Client模式
Client模式是一個輕量級的consul agent,只擁有註冊服務、健康檢查、轉發查詢等功能。
Server模式
Server模式與Client模式相比,除了擁有Client模式的功能還多出了資料儲存,leader選舉等。
官方建議Server模式應保證3-5個,而且應該是奇數,為什麼呢,因為少於3個無法保證高可用,多於5個又會給資料庫同步的一致性帶來壓力,而Client數量控制則沒有講究。
叢集部署
下載consul https://www.consul.io/downloads.html
在伺服器A,開啟cmd,
consul agent -server -bootstrap-expect=1 -bind=192.168.20.80 -client=192.168.20.80 -join=192.168.20.80 -datacenter=dc1 -data-dir=data -ui -node=consul-80
在伺服器B,開啟cmd,
consul agent -server -bind=192.168.20.81 -client=192.168.20.81 -join=192.168.20.80 -data-dir=data -node=consul-81
開啟瀏覽器輸入http://192.168.20.80:8500
指令簡析
-server
consul以server模式啟動,不填則預設以client模式
-bootstrap-expect=1
叢集節點數,當叢集節點數達到宣告數量才會進行資料同步
-bind=192.168.20.80
當前consul服務繫結地址
-client=192.168.20.80
http介面繫結地址,客戶端呼叫需要
-join=192.168.20.80
啟動服務時加入目標叢集
-node=consul-81
服務節點名稱
-ui
啟動web管理後臺
客戶端實踐
安裝Consul
封裝擴充套件
只貼部分核心程式碼,具體可以檢視demo原始碼。
注入ConsulClient
把當前服務註冊到Consul
新增健康檢查介面
與上述封裝可以在同一個庫,避免每個web服務都要寫一個
在Startup.cs對Consul封裝進行呼叫
ConfigureServices
Configure
K/V擴充套件
只實現了put、get、delete,剩下可以自行按需新增
部署啟動
修改appsettings.json,填寫目標consul地址和本服務地址
啟動後,如果服務正常則可以顯示下圖效果。
原文地址:https://www.cnblogs.com/skychen1218/p/9330870.html
.NET社群新聞,深度好文,歡迎訪問公眾號文章彙總 http://www.csharpkit.com