日韩在线日韩在日韩无-男人和女人午夜日皮视频-欧美日韩亚洲激情中文字幕-91精品国产综合九九九

微服務網(wǎng)關和服務注冊中心

SOA團隊 2020-03-16

對于傳統(tǒng)的ESB總線我們看到實際上包括了微服務架構中的微服務注冊和發(fā)現(xiàn)中心,微服務網(wǎng)關兩個方面的能力,但為何在微服務架構里面會將這兩個點分解為獨立的兩個子組件,我們通過以下分析了解一下。

首先還是要說下微服務網(wǎng)關,微服務網(wǎng)關更多是在前后端分離,或者說涉及到獨立的類似手機APP等前端應用的時候使用的最多,即把內(nèi)部各個微服務組件模塊的API接口能力統(tǒng)一注冊和接入到網(wǎng)關,對于APP也只需要訪問網(wǎng)關暴露的接口即可,同時通過網(wǎng)關還可以進一步的實現(xiàn)安全隔離。也就是說在這種場景下,網(wǎng)關更多的是實現(xiàn)了接口服務的代理和路由轉發(fā)能力,更多的是向外的一種能力發(fā)布。

我們可以想下在一個微服務架構里面,分解為了A,B,C,D四個微服務組件和模塊,但是這四個模塊都有各自的前端應用展現(xiàn),四個模塊之間本身也存在相互的接口調(diào)用,但是都在在數(shù)據(jù)中心內(nèi)部調(diào)用。在這種情況下我們是否需要使用微服務網(wǎng)關?而實際上在這種架構下,完全可以不使用微服務網(wǎng)關,只需要使用服務注冊和發(fā)現(xiàn)中心即可。

也就是我們常說的引入微服務網(wǎng)關后,微服務網(wǎng)關本身又變成為一個中心化的節(jié)點,雖然你可以對網(wǎng)關也進行集群部署,但是這種模式不符合我們?nèi)ブ行牡钠谕?。如果一個業(yè)務應用全部都是在內(nèi)部使用,那么微服務模塊之間的交互完全可以不接入到微服務網(wǎng)關進行管理。

但是微服務模塊間相互調(diào)用的接口地址如何管理,微服務模塊本身又集群化后如何進行負載均衡,包括微服務模塊間相互點對點調(diào)用時日志如何監(jiān)控和分析,服務鏈如何監(jiān)控和管理?這些都是在去中心化后要考慮的問題,而這個在當下微服務架構下完全是可以解決的。其核心的思路就是將微服務網(wǎng)關的部分能力下沉到微服務模塊中去完成,類似在微服務模塊里面注冊一個很小的SDK插件。

也就是我們常說的,微服務模塊間的調(diào)用只需要服務注冊和發(fā)現(xiàn)中心,模塊A從服務注冊中心獲取到模塊B的接口服務調(diào)用地址后,直接發(fā)起對模塊B的接口服務調(diào)用。注冊中心本身需要提供服務目錄庫和負載均衡的能力。而對于微服務模塊內(nèi)部SDK包僅僅是將本地SDK API調(diào)用轉變?yōu)檫h程的Rest服務調(diào)用接口。同時在SDK代理包中可以很方便的實現(xiàn)日志攔截,安全管理,緩存等能力。在這種架構下,即使是服務注冊中心宕機也不會影響到整個微服務架構的平穩(wěn)運行。從而達到真正的去中心化的目標。

也就是說在微服務架構里面,不涉及到對外發(fā)布統(tǒng)一的服務接口的時候,只需要保留服務注冊中心這個組件即可滿足內(nèi)部多個微服務模塊的平穩(wěn)運行。對于服務注冊中心一般需要提供負載均衡的能力,比如我們可以在服務注冊中心對提供同樣一個服務接口的多個組件都注冊進來,到時候通過服務注冊中心進行動態(tài)的負載均衡。如果我們是和Docker容器和K8s結合的化,整個微服務組件都是動態(tài)部署和托管的,K8s本身就提供了負載均衡和路由分發(fā)的能力,在這種情況下實際上只需要對K8s最終發(fā)布出來的負載均衡地址進行注冊即可。

但是這個外部本身又不絕對,如下圖,當一個大的業(yè)務系統(tǒng),分成了三組微服務模塊,同時分給三個獨立開發(fā)廠商開發(fā)時,那么三個開發(fā)團隊間的接口交互仍然可以理解為外部,這樣往往才能夠確保每個開發(fā)團隊的高度獨立自治能力。

基于上圖,再總結下在使用網(wǎng)關和注冊中心的時候一些關鍵點:

1. 一個獨立的開發(fā)團隊,為保證獨立自治,以及內(nèi)部多個微服務模塊間的交互集成,最好啟用獨立的服務注冊中心實現(xiàn)服務注冊,發(fā)現(xiàn)能力。即開發(fā)團隊內(nèi)部多個微服務模塊間的集成,不需要通過網(wǎng)關,只需要通過服務注冊中心進行集成即可。

2. 開發(fā)團隊需要暴露能力給外部,包括暴露能力給其它的開發(fā)團隊,需要考慮將該API接口注冊到外部的網(wǎng)關上。在這里建議是拆分兩個獨立網(wǎng)關,一個是內(nèi)部API網(wǎng)關,一個是放置到DMZ區(qū)面對公網(wǎng)訪問的API網(wǎng)關。對于服務如果同時涉及到內(nèi)部和外部使用,則兩邊注冊。建議不要通過兩次網(wǎng)關去路由,一個是影響性能,一個是不方便后續(xù)問題排查。

3. 構建在開發(fā)團隊之外的API網(wǎng)關必須具備負載均衡能力,可以配置多個IP地址。通過該API網(wǎng)關也最好具備和Docker容器擴展后的服務自動注冊和地址加入擴展能力。

4. 對于開發(fā)團隊內(nèi)部,如果考慮和Docker容器的進一步自動化集成,可以考慮在內(nèi)部先啟用微服務網(wǎng)關,再將微服務網(wǎng)關開發(fā)的API地址進一步注冊到外部的API網(wǎng)關上面。

5. 如果內(nèi)部和外部啟用各自獨立的網(wǎng)關,但是定制化SOA管控治理平臺的時候只需要一個,同時適配兩個網(wǎng)關,同時能夠對兩個網(wǎng)關進行監(jiān)控和日常管理。

返回上頁