雲端中間層負載均衡工具 Eureka

業餘草發表於2018-09-17

 亞馬遜提供了一個負載均衡工具 Elastic Load Balancer,但針對的是終端使用者 Web 流量伺服器,而 Eureka 針對的是中間層伺服器的負載均衡。AWS 固有的環境,對 IP 地址、主機名等傳統的負載均衡支援並不好,並且需要更加複雜的註冊/退出機制。Eureka 填補了這一空白。本文在前邊幾篇部落格的基礎上,較為系統地介紹一下 Eureka。
        Eureka 是什麼
        官方給出的具體定義是"Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers.",翻譯過來就是:"Eureka 是一個基於 REST 的服務,它主要是用於定位服務,以實現 AWS 雲端的負載均衡和中間層伺服器的故障轉移"。
        Eureka VS ELB
        亞馬遜 ELB 針對的是終端使用者 Web 流量伺服器,Eureka 針對的是中間層伺服器。
        Why Eureka?
        AWS 對 IP 地址、主機名等傳統的負載均衡支援並不好,並且需要更加複雜的註冊/退出機制。AWS 並沒有提供一箇中間層負載均衡器,Eureka 填補了這一空白。
        Eureka 的適用場景

  • AWS 的環境下有一箇中間層服務,但不想將其註冊到 ELB,或者不想將其暴露給外部世界
  • 不需要 session 繫結機制,沒有粘性會話和在外部快取(例如 memcached)載入會話資料的需要
  • 自己實現 LB 演算法

        Eureka 體系架構
        Eureka 的架構圖如下所示
eureka_architecture

        從圖中我們可以看出,Eureka 元件分為兩部分:Eureka 伺服器和 Eureka 客戶端。而客戶端又分為 Application Service 客戶端和 Application Client 客戶端兩種。
        Eureka 的工作機制
        每個 region 都有自己的 Eureka 伺服器叢集,每個 zone 至少要有一個 Eureka 伺服器以應對 zone 癱瘓。
        Application Service 在啟動時註冊到 Eureka 伺服器,之後每 30 秒鐘傳送心跳以更新自身狀態。如果該客戶端沒能傳送心跳更新,它將在 90 秒之後被其註冊的 Eureka 伺服器剔除。來自任意 zone 的 Application Client 可以檢視這些註冊資訊(每隔 30 秒檢視一次)並依此定位自己的侍服 Application Service 例項,進而進行遠端呼叫。
        Q:我的 Application Service 和 Application Client 之間通訊會不會受到 Eureka 限制
        A:不會。Eureka 只是幫你找到該次侍服主機例項,並不對你的 Application Service 和 Client 之間的通訊協議和方法進行約束。
        Q:看了這些感覺好抽象,有沒有可以開始的 demo
        可以檢視 Eureka 的 github 以尋求 demo。有些 feature(比如 Eureka 和 Ribbon 的整合)並沒有提供 demo,但我們可以從 Eureka 的 github 提供的單元測試程式碼中獲得一些啟示。
        另外,筆者也整理了很多 demo,都是自己動手驗證通過的,讀者可以放心參考:

        這些 demo 都看完,相信你玩轉 Eureka 不在話下。如果還有啥不懂的,可以看 Eureka API。作者建議直接看 Eureka 原始碼,原始碼並不多,也就幾千行的樣子,而且裡邊註釋的很詳盡,相比之下,線上  API 有很多方法只提供了一個方法名,並沒有詳細說明。
        Eureka 部署的測試
        你可以自己寫指令碼,然後手工將叢集節點當機,以驗證 Eureka 部署的彈性效果 - Eureka 使用 servo 來跟蹤客戶端和伺服器端的效能,並進行監控和報警,這些資料可用於 JMX 註冊也可以輸出給亞馬遜的雲監控。當然你也可以使用 Netflix 的另一個開源工具 - SimianArmy,這隻調皮的小猴子會故意將你的服務節點搞下線以驗證你的 Eureka 部署對隨機的 Application Service 當機的處理的彈性。
        Q:有沒有一個真實的應用案例
        接下來以一個真實生產環境下的場景,來看一下 Eureka 在實際當中的應用。
        以下是流媒體伺服器 Wowza 直播的部署架構圖:
rtmp部署架構圖
        Wowza 伺服器侍服外部網路直播流量,但它需要去 CAS 伺服器驗證使用者,還需要去 Relay 伺服器讀取直播流。CAS 和 Relay 就是兩個中間層服務,不需要直接暴露給外界。以下是它們之間的時序互動圖:
sequence-rtmp-live
        參考資料

業餘草微信公眾號

感謝您的關注!可加QQ1群:135430763,QQ2群:454796847,QQ3群:187424846。QQ群進群密碼:xttblog,想加微信群的朋友,可以微信搜尋:xmtxtt,備註:“xttblog”,新增助理微信拉你進群。備註錯誤不會同意好友申請。再次感謝您的關注!後續有精彩內容會第一時間發給您!原創文章投稿請傳送至532009913@qq.com郵箱。商務合作可新增助理微信進行溝通!

相關文章