2016-07-22 93 views
2

我們有一個託管在Azure虛擬機上的API微服務基礎架構。每個VM將託管幾個在Kestrel上運行的獨立站點的API。所有外部流量通過RP(在IIS上運行)進入。如何爲微服務設置Azure負載平衡?

我們有一些API被設計用來接受外部請求,一些API只用於內部API。

內部API託管在縮放集上,每個縮放集VM都是託管所有內部API的副本。 scaleset前面有一個內部負載平衡器(ILB)/ vip。根本問題是我們有內部API調用其他內部API,它們託管在相同的縮放集上。理想情況下,這些電話將轉到VIP(使用內部DNS),VIP將路由到縮放集中的其中一臺機器。但它看起來像Azure不允許這...按照文檔:

You cannot access the ILB VIP from the same Virtual Machines that are being load-balanced 

那麼人們如何設置微服務呢?我可以看到三種方式,其中沒有一種是理想的:

  1. 將API劃分爲不同的縮放集。不理想,因爲 服務非常輕巧,我不想將我的Azure VM 費用增加三倍。
  2. 將內部LB轉換爲外部LB(添加公共IP地址 )。然後將該LB放入其自身的網絡安全 組/子網中,以允許來自Azure IP範圍的呼叫。我會 期望更多的延遲,並以任何方式在外部暴露端點 創建更多的攻擊面積以及更多的配置複雜性。
  3. 如果虛擬機需要調用ILB,則設置虛擬機進行環回......這意味着源自虛擬機的任何請求將由同一虛擬機處理,並由 處理。這破壞了在VIP後面的微服務 的目的。內部微服務可能由於某種原因在同一個 機器上,並在另一個機器上可用......這就是我們爲每個服務分別在ILB上設置健康探測器的原因 。如果 它只是回到同一臺機器,你會失去彈性。

任何有關其他人如何接近這個指針將不勝感激。

謝謝!

+0

看看Azure服務結構。我們也將這種行爲用於虛擬機端點縮放,它像一個魅力一樣工作。不利的一點是,該配置目前只能通過ARM工作。 – Ben

回答

0

我認爲你的問題與服務發現有關。

負載平衡器並非爲此而設計。您應該考慮專用軟件,例如Eureka(可以在AWS以外工作)。 服務發現使得您的微服務在被發現後可以直接相互調用。

另請參考客戶端負載均衡工具,如Ribbon

0

@Cdelmas答案在服務發現上很棒。請允許我添加我的想法:

對於諸如您的服務,您還可以查看Netflix的ZUUL代理服務器和客戶端端負載平衡。您甚至可以在Eureka之上使用Histrix來實現延遲和容錯功能。 Netflix在這方面領先於遊戲。

如果您想使用GO語言,您也可以考慮Consul.io產品的原因。它具有可編寫腳本的配置以更好地管理您的服務,允許高級安全配置和非休息端點的使用。 Eureka也提供這些功能,但需要添加配置服務器(Netflix Archaius,Apache Zookeeper,Spring Cloud Config),使用ZUUL/Sidecar編碼安全和支持訪問。