初識服務發現及Consul框架的簡單使用
1.什麼是服務發現?
服務發現元件記錄了(大規模)分散式系統中所有服務的資訊,人們或者其它服務可以據此找到這些服務。
DNS 就是一個簡單的例子。
當然,複雜系統的服務發現元件要提供更多的功能,例如,服務元資料儲存、健康監控、多種查詢和實時更新等。
服務發現是支撐大規模 SOA 的核心服務。
2.服務發的關鍵特性
高可用的
服務目錄
服務查詢
服務註冊
3.為什麼要使用服務發現
假設我們寫的程式碼會呼叫 WebService、Rest Api、 Thrift API 的服務。在呼叫過程中,為了完成一次請求,程式碼需要知道服務例項的網路位置(IP 地址和埠)。
整個過程,對於基於雲端的、現代化的微服務應用而言,這卻是一大難題。
為了更好的讓大家瞭解服務發現的發展過程,現在舉個例子。
3-1【單體應用】
假設你是專案經理或者公司的架構師,正準備組織團隊開發一款產品,類似滴滴與Uber的計程車排程軟體。
其中系統的核心業務有:客戶端、司機端、定位、通知、支付
傳統的架構圖為:六邊形架構(即模組化的單體是應用),也稱單體式應用,如下圖
單體應用的不足
這種簡單方法卻有很大的侷限性。
一個簡單的應用會隨著時間推移逐漸變大。在每次的迭代中,開發團隊都會面對新“故事”(需求),然後開發許多新程式碼。
幾年後,這個小而簡單的應用會變成了一個巨大的怪物。
如果有經驗的管理者都知道,一旦你的應用變成一個又大又複雜的怪物,那開發團隊肯定很痛苦。
敏捷開發和部署舉步維艱,其中最主要問題就是這個應用太複雜,以至於任何單個開發者都不可能搞懂它。
1> 降低開發速度
2> 不利於持續性開發
3> 模組相互衝突
4> 可靠性低
5> 重構困難
3-1【微服務】
隨著時間的發展和專案的發展,業務團隊越來越龐大,業務越來越複雜,單體應用架構已經無法滿足專案需求,所以微服務就騰空出世了。
許多公司,比如Amazon、eBay,通過採用微處理結構模式解決了單體應用出現的問題。
其思路不是開發一個巨大的單體式的應用,而是將應用分解為小的、互相連線的微服務。
微服務架構的好處
1.單個服務很容易開發、理解和維護。
2.這種架構使得每個服務都可以有專門開發團隊來開發。
3.微服務架構模式是每個微服務獨立的部署。
4.微服務架構模式使得每個服務獨立擴充套件。
微服務架構的不足
微服務應用是分散式系統,由此會帶來固有的複雜性。
服務地址目錄,服務健康度,部署困難,服務依賴問題,資料庫分割槽問題。
如何解決微服務出現的這些問題呢?服務發現框架在這時就閃亮登場了。
4.常見的服務發現框架有哪些
常見服務發現框架 Consul、 ZooKeeper以及Etcd
ZooKeeper是這種型別的專案中歷史最悠久的之一,它起源於Hadoop。它非常成熟、可靠,被許多大公司(YouTube、eBay、雅虎等)使用。
etcd是一個採用HTTP協議的健/值對儲存系統,它是一個分散式和功能層次配置系統,可用於構建服務發現系統。其很容易部署、安裝和使用,提供了可靠的資料持久化特性。它是安全的並且文件也十分齊全。
Zookeeper |
etcd |
Consul |
|
產生時間 |
長 |
短 |
短 |
原生語言 |
JAVA |
Go |
Go |
演算法 |
Paxos |
Raft |
Raft |
多資料中心 |
不支援 |
不支援 |
支援 |
健康檢查 |
支援 |
不支援 |
支援 |
web管理介面 |
支援 |
不支援 |
支援 |
http協議 |
較為複雜 |
支援 |
支援 |
DNS協議 |
較為複雜 |
不支援 |
支援 |
4.Consul服務發現框架介紹
Consul是強一致性的資料儲存,使用gossip形成動態叢集。它提供分級鍵/值儲存方式,不僅可以儲存資料,而且可以用於註冊器件事各種任務,從傳送資料改變通知到執行健康檢查和自定義命令,具體如何取決於它們的輸出。下面兩張圖是Consul的原理圖
4.Consul配置入門及健康監測
4-1 配置拓撲圖
4-2 Consul 叢集配置
服務端配置
N1節點
consul agent -server -bootstrap-expect 2 -data-dir ./tmp/consul -node=n1 -bind=192.168.109.241 -ui-dir ./dist -dc=dc1
N2節點
consul agent -server -bootstrap-expect 2 -data-dir ./tmp/consul -node=n2 -bind=192.168.109.203 -ui-dir ./dist -dc=dc1
客戶端配置
C1節點
consul agent -data-dir ./tmp/consul -ui-dir ./dist -bind=192.168.109.204 -dc=dc1
4-3 Consul 服務註冊及健康檢驗
客戶端配置
consul agent -data-dir ./tmp/consul -ui-dir ./dist -bind=192.168.109.204 -dc=dc1 -config-file=./conf
檢視叢集命令
consul info 檢視當前consul 資訊,裡面可以找到state屬性
consul members 檢視consul成員
健康監測
監測Service1.svc服務是否正常
{ "log_level": "TRACE", "encrypt": "7TnJPB4lKtjEcCWWjN6jSA==", "service": { "name": "web3", "tags": ["master"], "address": "127.0.0.1", "port": 80, "checks": [ { "http": "http://127.0.0.1:1111/Service1.svc", "interval": "10s" } ] } }
5 C#呼叫Consul原始碼
https://github.com/PlayFab/consuldotnet
參考資料