2017-03-21 378 views
9

作爲開發人員,我們在Azure服務架構上編寫了微服務,並且我們可以爲許多客戶在Azure中以某種PaaS概念運行它們。但是我們的一些客戶不想在雲中運行,因爲數據庫是內部部署的,並且不會從外部獲得,甚至無法通過DMZ獲得。沒關係,我們承諾會支持它,因爲Azure Service Fabric可以作爲羣集內部部署來安裝。本地Azure服務Fabric羣集的負載平衡器

我們在每個虛擬機上運行一個API網關微服務,每個虛擬機使用名稱解析器,並且相應地路由和分發請求,但API網關微服務提供的API是另一塊客戶使用的客戶端軟件,該軟件在羣集之外運行,並且必須向API發送請求。

我建議在單獨的一臺或多臺機器上使用像HA代理或Nginx一樣的負載均衡器,客戶端軟件將其請求發送給客戶端,然後反向代理將其轉發給羣集內的可用計算機。

看來,這不是我們的客戶想要的,另一臺機器作爲負載平衡器不是一個選項。他們建議:使客戶端軟件變得更加智能,以便弄清楚應該使用哪個主機,換句話說:我們應該在客戶端軟件中編寫我們自己的故障切換/負載均衡器。

我們還有什麼其他選擇?

PS:客戶端應用程序不會每秒發送很多請求,也許每分鐘幾個請求。

+0

不清楚哪些軟件在哪裏發送請求。軟件如何按層分離,以及這些層中的SF,客戶端軟件和數據庫在哪裏。 – cassandrad

+0

有一個託管web api服務的機器集羣,所以10.0.0.1:8100,10.0.0.2:8100和10.0.0.3:8100都是相同的web api入口。客戶端位於集羣外部,必須前往其中一個入口。 – rfcdejong

+0

在這種情況下實現的最終解決方案是什麼? @rfcdejong – Aravind

回答

3

非常類似的問題,我們有很多服務和運行在本地的服務結構集羣。當需要使用負載平衡器時,我們將在運行Service Fabric集羣的同一臺計算機上安裝IIS。由於IIS是一個很好的負載均衡器,因此我們僅將IIS用作API Gateway的反向代理。 Kestrel主機正在使用其他通過HTTP進行通信的服務。 API網關微服務是所有客戶端的單一入口點,並始終靜態URI內SF,我們使用了。如果你沒有可能使用IIS是URI配置IIS

再看看Using nginx as HTTP load balancer

+0

這個衝刺我將在每臺機器上配置NLB功能,並希望他們能夠獲得一個IP或DNS。那麼這樣做的IIS還是NLB功能需要?我很高興爲您提供賞金,如果您還包括一個很好的參考博客關於此。直到現在還沒有人有更好的答案。 – rfcdejong

+0

集羣中的IIS作爲代理沒有引用? – rfcdejong

+0

對不起,遲到的答案。是的,關於這一點的信息很少。沒有一個很好的參考,我們許多研究並將許多不同的部分粘合在一起。我們只使用沒有任何外部LB的IIS。嘗試在這裏創建問題:https://github.com/Azure/service-fabric。我認爲微軟的人會爲你提供一些好的建議。 PS我只是想給你的建議和賞金並不重要 – Marusyk

1

你不不需要另一臺僅用於HTTP轉發的機器。只需在集羣上使用/運行它作爲服務。

您是否考慮使用Service Fabric中內置的Reverse Proxy?它在所有節點上運行,並將http呼叫轉發到集羣內的服務。

您也可以在集羣上運行nginx作爲guest executableContainer

+0

集羣內的反向代理就是我們現在正在做的事情,但它是用於外部訪問集羣的。客戶端不應該明確路由到一個節點。如果羣集具有單個DNS名稱,那麼是,但它具有不同的IP地址。 – rfcdejong

+0

如果您在每個節點上運行RP實例,則連接到哪個節點並不重要。只需從所有IP地址中隨機選擇一個。 – LoekD

+0

隨機選擇需要將客戶端配置爲知道所有節點IP,並且在一個節點正在升級或以其他方式不可用時可能會失敗 – rfcdejong

0

我們在開始使用服務結構集羣時也面臨同樣的情況。我們將應用程序網關配置爲代理服務器,但它不會像HTTPS重定向那樣提供HTTP等功能。

爲此,我們將Nginx配置爲代替Azure應用程序網關作爲服務Fabric應用程序的代理。