服務治理
服務治理是微服務架構中最為核心和基礎的模塊,它主要用來實現(xiàn)各個微服務實例的自動化注冊和發(fā)現(xiàn)秦叛。
服務注冊
在服務治理框架中蚕愤,通常都會構建一個注冊中心答恶,每個服務單元向注冊中心登記自己提供的服務饺蚊,包括服務的主機與端口號、服務版本號悬嗓、通訊協(xié)議等一些附加信息污呼。注冊中心按照服務名分類組織服務清單,同時還需要以心跳檢測的方式去監(jiān)測清單中的服務是否可用包竹,若不可用需要從服務清單中剔除燕酷,以達到排除故障服務的效果。服務發(fā)現(xiàn)
在服務治理框架下周瞎,服務間的調(diào)用不再通過指定具體的實例地址來實現(xiàn)苗缩,而是通過服務名發(fā)起請求調(diào)用實現(xiàn)。服務調(diào)用方通過服務名從服務注冊中心的服務清單中獲取服務實例的列表清單堰氓,通過指定的負載均衡策略取出一個服務實例位置來進行服務調(diào)用。
Euraka簡介
Eureka是Netflix開發(fā)的服務發(fā)現(xiàn)組件苹享,本身是一個基于REST的服務双絮。Spring Cloud將它集成在其子項目spring-cloud-netflix中,以實現(xiàn)Spring Cloud的服務發(fā)現(xiàn)功能得问。它既包含了服務端組件囤攀,也包含了客戶端組件,并且服務端與客戶端均采用java編寫宫纬,所以Eureka主要適用于通過java實現(xiàn)的分布式系統(tǒng)焚挠。
Eureka的Github:https://github.com/Netflix/Eureka
Eureka服務端
即服務注冊中心。它同其他服務注冊中心一樣漓骚,支持高可用配置蝌衔。依托于強一致性提供良好的服務實例可用性,可以應對多種不同的故障場景蝌蹂。
Eureka服務端支持集群模式部署噩斟,當集群中有分片發(fā)生故障的時候,Eureka會自動轉(zhuǎn)入自我保護模式孤个。它允許在分片發(fā)生故障的時候繼續(xù)提供服務的發(fā)現(xiàn)和注冊剃允,當故障分配恢復時,集群中的其他分片會把他們的狀態(tài)再次同步回來齐鲤。集群中的的不同服務注冊中心通過異步模式互相復制各自的狀態(tài)斥废,這也意味著在給定的時間點每個實例關于所有服務的狀態(tài)可能存在不一致的現(xiàn)象。Eureka客戶端
Eureka客戶端给郊,主要處理服務的注冊和發(fā)現(xiàn)牡肉。客戶端服務通過注冊和參數(shù)配置的方式淆九,嵌入在客戶端應用程序的代碼中荚板。在應用程序啟動時凤壁,Eureka客戶端向服務注冊中心注冊自身提供的服務,并周期性的發(fā)送心跳來更新它的服務租約跪另。同時拧抖,他也能從服務端查詢當前注冊的服務信息并把它們緩存到本地并周期行的刷新服務狀態(tài)。
Region和Zone的說明
Region為區(qū)域,zone為可用區(qū)嘲驾,region和zone(或者Availability Zone)均是AWS的概念淌哟。在非AWS環(huán)境下,我們可以簡單地將region理解為Eureka集群辽故,zone理解成機房徒仓。這樣上圖就很好理解了:一個Eureka集群被部署在了zone1機房和zone2機房中。
對region和zone感興趣的讀者可前往http://blog.csdn.net/awschina/article/details/17639191 擴展閱讀誊垢。
Eureka架構
上面的架構圖描述了Eureka是如何在Netflix部署的掉弛,這也是Eureka集群的運行方式。在每個區(qū)域(region)都有一個eureka集群喂走,它只知道該區(qū)域內(nèi)的實例信息殃饿。每個分區(qū)(zone)至少有一個eureka服務器來處理本分區(qū)故障。
服務注冊在Eureka上并且每30秒發(fā)送心跳來續(xù)租芋肠。如果一個客戶端在幾次內(nèi)沒有刷新心跳乎芳,它將在大約90秒內(nèi)被移出服務器注冊表。注冊信息和更新信息會在整個eureka集群的節(jié)點進行復制帖池。任何分區(qū)的客戶端都可查找注冊中心信息(每30秒發(fā)生一次)來定位他們的服務(可能會在任何分區(qū))并進行遠程調(diào)用奈惑。
非Java服務客戶端
對于非Java的服務,你可以用其他語言實現(xiàn)eureka的客戶端部分睡汹⌒。基于REST的服務也暴露給了所有操作給Eureka客戶端。非Java客戶端也可以使用REST服務來查詢其他服務的信息帮孔。