1. 程式人生 > >初識服務發現及Consul框架的簡單使用

初識服務發現及Consul框架的簡單使用

1.什麼是服務發現?

服務發現元件記錄了(大規模)分散式系統中所有服務的資訊,人們或者其它服務可以據此找到這些服務。

DNS 就是一個簡單的例子。

當然,複雜系統的服務發現元件要提供更多的功能,例如,服務元資料儲存、健康監控、多種查詢和實時更新等。

服務發現是支撐大規模 SOA 的核心服務。

2.服務發的關鍵特性 

      高可用的

      服務目錄

      服務查詢

      服務註冊

3.為什麼要使用服務發現

      假設我們寫的程式碼會呼叫 WebService、Rest Api、 Thrift API 的服務。在呼叫過程中,為了完成一次請求,程式碼需要知道服務例項的網路位置(IP 地址和埠)。

      整個過程,對於基於雲端的、現代化的微服務應用而言,這卻是一大難題。

為了更好的讓大家瞭解服務發現的發展過程,現在舉個例子。

3-1【單體應用】

      假設你是專案經理或者公司的架構師,正準備組織團隊開發一款產品,類似滴滴與Uber的計程車排程軟體。

      其中系統的核心業務有:客戶端、司機端、定位、通知、支付

      傳統的架構圖為:六邊形架構(即模組化的單體是應用),也稱單體式應用,如下圖

 image 

單體應用的不足 

     這種簡單方法卻有很大的侷限性。

      一個簡單的應用會隨著時間推移逐漸變大。在每次的迭代中,開發團隊都會面對新“故事”(需求),然後開發許多新程式碼。

      幾年後,這個小而簡單的應用會變成了一個巨大的怪物。

      如果有經驗的管理者都知道,一旦你的應用變成一個又大又複雜的怪物,那開發團隊肯定很痛苦。

      敏捷開發和部署舉步維艱,其中最主要問題就是這個應用太複雜,以至於任何單個開發者都不可能搞懂它。

            1> 降低開發速度

            2> 不利於持續性開發

            3> 模組相互衝突

            4> 可靠性低

            5> 重構困難

3-1【微服務】

      隨著時間的發展和專案的發展,業務團隊越來越龐大,業務越來越複雜,單體應用架構已經無法滿足專案需求,所以微服務就騰空出世了。

      許多公司,比如Amazon、eBay,通過採用微處理結構模式解決了單體應用出現的問題。

      其思路不是開發一個巨大的單體式的應用,而是將應用分解為小的、互相連線的微服務。

image

微服務架構的好處

      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的原理圖

image

image

4.Consul配置入門及健康監測 

4-1 配置拓撲圖

image

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屬性

image

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

參考資料