1.什麼是服務發現?node
服務發現組件記錄了(大規模)分佈式系統中全部服務的信息,人們或者其它服務能夠據此找到這些服務。git
DNS 就是一個簡單的例子。github
固然,複雜系統的服務發現組件要提供更多的功能,例如,服務元數據存儲、健康監控、多種查詢和實時更新等。web
服務發現是支撐大規模 SOA 的核心服務。算法
2.服務發的關鍵特性 數據庫
高可用的bootstrap
服務目錄安全
服務查找網絡
服務註冊架構
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
參考資料
http://consul.la/start
http://www.alauda.cn/2016/07/20/microservices-service-discovery/