1. 程式人生 > >winserver的consul部署實踐與.net core客戶端使用(附demo原始碼)

winserver的consul部署實踐與.net core客戶端使用(附demo原始碼)

前言

隨著微服務興起,服務的管理顯得極其重要。都知道微服務就是”拆“,把臃腫的單塊應用,拆分成多個輕量級的服務,每個服務可以在短週期內重構、迭代、交付。隨著微服務的數量增多,因量變引起了質量,帶來新的問題其中一個是服務的管理問題。隨著業務發展微服務增多,可能技術負責人也無法清楚記著服務的部署情況,服務的健康也不能時刻關注著,因此服務治理系統的作用必不可少。

本篇文章的原始碼:

demo:https://github.com/SkyChenSky/Consul.Demo

封裝:https://github.com/SkyChenSky/Sikiro.Tookits.Consul

Consul

Consul是一款簡單、易用、可伸縮性強的服務治理系統。

主要核心功能有:

  1. 服務發現

  2. 健康檢查

  3. 鍵值儲存

  4. 多資料中心

consul代理會每個一段時間對註冊中心的服務節點進行訪問,如果響應碼為“20X"認為是健康。

鍵值儲存可以認為是一個簡易的k/v資料庫,因此可以用此來存放配置資訊。

服務發現

服務發現分服務註冊和服務查詢。

服務註冊

將服務節點資訊(地址+埠)新增(刪除)到登錄檔,登錄檔會記錄著服務的節點資訊和狀態

服務查詢

由其他的服務或者系統通過登錄檔查詢到指定可用服務的節點資訊。

服務發現的方式

服務發現的方式又分自主式和代理式。

自主式

由各個服務主動的將自己節點資訊新增(刪除)到註冊中心。實現是通過統一封裝或者程式庫,由服務各個節點承擔服務發現的功能,與代理式相比由各自節點分擔的訪問壓力。

640?wx_fmt=png

代理式

由一個系統(負載均衡系統)或者服務(API閘道器)來完成服務發現。因為由一個系統或者服務完成,隨著註冊服務的增加會帶來效能瓶頸,因此需要對此做叢集。

640?wx_fmt=png

Consul模式

Consul有兩種模式,Client和Server,無論各種模式都有一個consul agent。

Client模式

Client模式是一個輕量級的consul agent,只擁有註冊服務、健康檢查、轉發查詢等功能。

Server模式

Server模式與Client模式相比,除了擁有Client模式的功能還多出了資料儲存,leader選舉等。

官方建議Server模式應保證3-5個,而且應該是奇數,為什麼呢,因為少於3個無法保證高可用,多於5個又會給資料庫同步的一致性帶來壓力,而Client數量控制則沒有講究。

640?wx_fmt=png

叢集部署

下載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

640?wx_fmt=png

指令簡析

  • -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

640?wx_fmt=png

封裝擴充套件

只貼部分核心程式碼,具體可以檢視demo原始碼。

注入ConsulClient

640?wx_fmt=png

把當前服務註冊到Consul

640?wx_fmt=png

新增健康檢查介面

與上述封裝可以在同一個庫,避免每個web服務都要寫一個

640?wx_fmt=png

在Startup.cs對Consul封裝進行呼叫

ConfigureServices

640?wx_fmt=png

Configure

640?wx_fmt=png

K/V擴充套件

只實現了put、get、delete,剩下可以自行按需新增

640?wx_fmt=png

部署啟動

修改appsettings.json,填寫目標consul地址和本服務地址

640?wx_fmt=png

啟動後,如果服務正常則可以顯示下圖效果。

640?wx_fmt=png

原文地址:https://www.cnblogs.com/skychen1218/p/9330870.html

.NET社群新聞,深度好文,歡迎訪問公眾號文章彙總 http://www.csharpkit.com

640?wx_fmt=jpeg