啥是佩奇?不,啥是Consul?本文中小馬力求以通俗的語言來講述一下分布式架構中作為服務註冊和服務發現環節極其重要的基礎設施之一Consul,是什麼、為什麼、怎麼做。作為入門是個不錯的參考。
使用別名的生活場景
別的不說,咱們先來看一個場景。假設你開了一家小型服裝公司。那麼你的公司在全國鋪點代理商,比如福州,南京,杭州等等,你清晰地記著福州站由張三負責,南京站由李四負責,杭州站由王五負責等等,通訊錄是這樣的:張三159xxx,李四137xxxx,王五xxxx。起初,你的所有通信還是針對於人,比如這批貨明日發給張三,那批貨下周要發給李四。日復一日,你的公司逐漸壯大,你的代理商遍布全國各地,你早已記不清誰是負責福州站誰是負責南京站的了,而且各個地方的代理商因各種因素時常變更負責人,你經常被這些具體人名和對應的地點搞得焦頭爛額。
這個時候你臨機一動,為啥不只以站點名稱代替直接聯繫負責人呢。於是你的通訊錄是這樣的福州站159xxxx,南京站137xxxx,這樣省去了聯繫時直接記憶對應人名的麻煩,而且你不用關心,哪個站是不是又換人了,又得更改通訊錄名稱和記名字了。這其實就是一個別名的作用。你只需要知道發給福州站就可以了,不用知道具體是發給誰。
這個生活中的道理被運用到了系統架構中(其實這個有點像域名解析的原理,一個域名可以解析到不同的IP,用戶只需要認識域名就行了不需要知道IP也不需要管是否變更了IP,對於用戶是透明的)。分布式系統架構中由於各自依賴大量的服務,服務之間的通訊如果使用IP直接通訊,那麼在擴容和變更機器的時候將非常麻煩。比如擴容,線上秒殺活動進行了一半,你發現性能達到瓶頸了你說你要暫停下系統,更改下配置文件增加幾臺機器的IP配置,然後重啟一下再進行,這是不可能的。因此,當服務之間的通訊採用別名來進行的時候,如果更換機器IP就無須暫停活動了,因為有中間別名和IP的映射,彼此間只需要知道服務別名就可以了。這就是分布式中的服務註冊和服務發現環節。
服務發現
在大中型分布式系統中,通常都是集群,一個應用系統由多個功能服務組成,且一個功能服務可能多臺伺服器組成。彈性伸縮伺服器數量(增刪改機器IP),伺服器功能異常無縫切換等顯然只通過更改配置文件來處理是無法滿足的。如何解決呢?我們引入註冊中心,服務治理的概念。實現的方法就是:服務註冊,服務發現(核心其實就是鍵值存儲也就是共享數據中心)。
服務發現是指使用一個註冊中心來記錄分布式系統中的全部服務的信息,以便其他服務能夠快速地找到這些已註冊的服務。服務發現組件有:Eureka、Consul、etcd、Zookeeper等。接下來小馬就帶大家一起來看看啥是Consul。
Consul
Consul是由HashiCorp基於Go語言開發的支持多數據中心分布式高可用的服務發布和註冊服務軟體,採用Raft算法保證服務的一致性,且支持健康檢查。其主要特點:服務註冊發現、健康檢查、鍵值存儲(可用於全局配置)、安全服務通信、多數據中心。
Consul 的核心功能就是服務註冊和發現,Consul 客戶端通過將自己註冊到 Consul 伺服器集群,然後等待調用方去發現服務,實現代理轉發到真正的業務系統,還可以基於服務發現做負載均衡,甚至可以在客戶端請求到底服務之前進行攔截,做一些基礎性的工作,比如身份驗證、限流、熔斷等等業務系統的前瞻性工作。
Consul的原理
為了保證數據強一致性以及多數據中心的支持,consul採用的是集群的形式出現,相關概念:Consul中包括的2種不同的節點:Server、Client。我們稱為server端節點(一般建議至少需要3-5個server端節點),client端節點,其中server端節點會有一個Server-Leader,稱為領導者節點,其他的可以均稱為候選者。每臺server都有自己的數據中心,領導者負責同步存儲信息。如下圖。但數據強一致性帶來的副作用是當數據在同步或者Server在選舉Leader過程中,會出現集群不可用,這就像從時間換空間之間的一種取捨是一樣的道理。
整體工作流程如下:
服務A-N把當前自己的網絡位置註冊到服務發現模塊,服務發現就以K-V的方式記錄下,K一般是服務名,V就是IP:PORT。服務發現模塊定時的輪詢查看這些服務能不能訪問的了(健康檢查)。客戶端在調用服務A-N的時候,就先跑去服務發現模塊問下它們的網絡位置,然後再調用它們的服務。客戶端只認服務名不認服務IP和埠。如圖。
Consul實例
以下簡單概括了實現流程,
1.安裝consul軟體:Consul本身只是一個二進位的可執行文件,所以安裝和部署都非常簡單,只需要從官網下載後,解壓後執行可執行文件即可(每臺服務發現機器都需要安裝);
2.配置好服務端和客戶端節點,啟動集群中各臺機器的consul服務,啟動時指定好公網IP,並consul join加入集群才能互通;
3.最後就可以採用api註冊服務以及發現服務了。步驟如下圖。
以上就是consul入門簡述了,更多詳細資料請參看官方文檔。小馬要去啃西瓜去了,拜拜。