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

1.什麼是服務發現?node

服務發現組件記錄了(大規模)分佈式系統中全部服務的信息,人們或者其它服務能夠據此找到這些服務。git

DNS 就是一個簡單的例子。github

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

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

2.服務發的關鍵特性 數據庫

      高可用的bootstrap

      服務目錄安全

      服務查找網絡

      服務註冊架構

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

參考資料

http://consul.la/start

 

http://www.alauda.cn/2016/07/20/​microservices-service-discovery/

 

http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=2654067913&idx=1&sn=57be320f6b196a5b74e459263ea3854d&scene=2&srcid=0909dAdQMn3SBkUyX2sNqLMu&from=timeline&isappinstalled=0&ptlang=2052&ADUIN=136208196&ADSESSION=1473379431&ADTAG=CLIENT.QQ.5485_.0&ADPUBNO=26602#wechat_redirect

 

https://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=208173179&idx=1&sn=392c17b136c2bf570429785702d98353&scene=0&key=dffc561732c226516d4dccb1f165c5b24e823a11384b262d55dc20e3bd0d4cd21c219e8fc2bb2817fd3ccd46f36db04a&ascene=14&uin=ODY5ODkzMzQw&devicetype=iPhone+OS8.4.1&version=16020610&nettype=WIFI&fontScale=100&pass_ticket=yxu6Cmc0yX5TWpekVDtFbQhGNYo%2BPbTVmjkpYiq2xiXv6Mbhq3rZUqZkbefMNm11

相關文章
相關標籤/搜索