作者:張宇馳,喻純政
職務:解決方案顧問
公司:F5
本章節(jié)為 F5 現(xiàn)代應用網(wǎng)關系列文章之 Eureka 部分。本次主要分享 MSDA 現(xiàn)代應用網(wǎng)關融合 Eureka 服務注冊發(fā)現(xiàn)中心,實現(xiàn)服務動態(tài)發(fā)現(xiàn);通過這種融合,F(xiàn)5 就充當了傳統(tǒng)單體應用架構與現(xiàn)代分布式應用架構的鏈接橋梁。
Eureka 包含兩個組件:Eureka Client 和 Eureka Server。配合用戶的應用客戶端、應用服務端一起協(xié)同工作,以達到服務注冊及調用的效果。
Eureka 具體的架構圖如下:
圖片來自官網(wǎng)
如圖所示,應用服務會把 IP 地址和端口注冊到 Eureka 上,并通過定時發(fā)送心跳包來告訴 Eureka 自己的健康狀態(tài)。為了防止服務的消費方(圖中的 Application Client)調用到已經(jīng)下線的服務,應用服務在下線的時候,會給 Eureka 服務器發(fā)送消息,通知 Eureka 服務器把自己從服務列表刪除。服務的消費方會通過查詢 Eureka 服務器獲取自己想要調用服務的具體信息。
當獲取到服務的具體信息后,就會發(fā)送對服務的直接調用了。Eureka 服務器本身也是以集群的方式部署的,不同節(jié)點直接會復制同步數(shù)據(jù)。
Eureka 可以通過集群的方式部署, Eureka Server 利用節(jié)點之間的對等通信機制,而并非采用常見的選舉機制,沒有主從節(jié)點之分,每一個節(jié)點的關系都是平等的。節(jié)點互相通信,交換信息來保持一致,提高了可用性,每個節(jié)點需要添加一個或多個有效的 serviceUrl 指向其他節(jié)點。每個節(jié)點都可被視為其他節(jié)點的副本。
如果集群中某節(jié)點出現(xiàn)故障,Eureka 客戶端就會自動切換,請求新節(jié)點。故障節(jié)點恢復后會重新加入集群節(jié)點中。
Eureka 會和注冊的服務保持心跳檢測,默認時間為30秒,如果發(fā)現(xiàn)某服務不能在30秒發(fā)送心跳信息,并持續(xù)3次(90秒),Eureka 服務器會下線這個實例。
Eureka 等服務注冊中心的主要使用場景就是分布式、微服務架構。在分布式系統(tǒng)中,一個繞不開的概念就是一致性原則。根據(jù) CAP 理論,我們知道,一個分布式系統(tǒng)在一致性的策略上,最多只能滿足一致性、可用性和分區(qū)容錯性三者中的兩者。
Eureka 在設計時滿足了可用性和分區(qū)容錯性兩項原則,也就是說,在 Eureka 集群中,只要有一臺 Eureka 能夠正常提供服務,就可以保證注冊服務可用,但是帶來的后果是 Eureka 會放棄強一致性,但這并不是完全放棄數(shù)據(jù)一致性,數(shù)據(jù)的最終一致性還是可以保障的。
相信通過前幾期的文章,您已經(jīng)了解到不同注冊中心的特點差異了,在一致性方面,市面主流服務注冊中心的的對比如下:
具體流量交互過程:
我們給提前定義好的接口發(fā)送一個創(chuàng)建服務的請求,POST 請求的 payload 為 json 格式的 template,這個 template 的內(nèi)容是支持我們自定義的,在這里我們需要包含服務發(fā)現(xiàn)的類型,比如我們指定 Eureka。我們還要在這個 json 里面提供 Eureka 的 ip 地址,需要發(fā)現(xiàn)的服務名等。
當我們 iApps LX 組件收到這個 POST 請求的時候,就會觸發(fā) iApps LX 里定義的事件函數(shù),去向服務注冊中心發(fā)送 REST 請求,拿到數(shù)據(jù)。當然這個過程也完全支持用圖形化界面 GUI 的方式配置。
與前幾篇文章介紹的操作方式相似,在創(chuàng)建之前,我們需要設置好 Eureka 注冊中心。
然后我們就開始 F5 的配置。
我們需要在 BIG IP 的 iApps LX 模塊中導入事先下載好的 f5-iapplx-msda-eureka rpm 包
上傳完成后會生成一個新的msdazk 的 Templetes,點擊查閱 iApps LX->Templates->Templates LX
然后我們就可以通過 iApps LX->Application Services->Application LX 創(chuàng)建我們的服務
我們需要在 GUI 上填入對應信息,如 Eureka 的 IP 地址,端口,以及要訪問的 URL,
我們還可以配置負載均衡算法及健康檢查,如下圖:
設置完畢,GUI 會將我們填入的信息自動生成一份 Json 文件,如下圖所示:
以下 json 文件為示例,具體以實際生成為準:
我們點擊 Deploy,則 iApps LX 服務就可以成功部署了。部署完成如下圖:
檢查Pool的創(chuàng)建
Pool 的詳情如下
通過在 Local Traffic 中新建 Virtual Servers,這樣我們就向外部用戶或傳統(tǒng)應用實現(xiàn)了微服務應用的暴露。
利用 MSDA 實現(xiàn)基于 Eureka 的平臺的服務發(fā)現(xiàn),可以讓現(xiàn)有單體架構可以快速融入分布式機構,并且打通傳統(tǒng)負載均衡設備與微服務架構的隔閡。您也可以下載我們的 rpm 包,自己親手實踐,下載鏈接見下文。
下載 MSDA 和 MSRA 的 RPM 包:
免責聲明:
這些 iAppsLX RPM 軟件包并非 F5 公司官方支持的產(chǎn)品,如有任何問題或反饋,請向 GitHub repo 上提交 issue,或發(fā)送電子郵件至 msda@f5.com 。