2014-01-14 34 views
0

目前我有一個在歐洲部署的應用程序實例。它通過Web服務(SOAP)公開了一些功能。有很多客戶(幾千人)在全球範圍內使用(主要是北美,歐洲和亞洲)。在當前的設置中,一些客戶端必須對部署在不同大陸上的應用程序進行WS調用,這會顯着增加響應時間。關於通話字符 - 有效負載很小,但通常是通話。如何縮放這樣的系統?

現在我的想法是簡單地部署更多的應用程序實例,以便每個地理區域都有一個實例。但是,如何在不同的實例上負載平衡/負載分配請求存在問題。

方法#1。

我在開始時就想到了一些HTTP級別的負載平衡 - 讓一臺主機公開相同的WS方法,並將它們委託給不同的應用程序實例。但我認爲在這個解決方案中,我不會在傳輸時間方面獲得任何收益 - 整個請求將不得不轉到一箇中心位置,然後到達目的地。因此,數據包路由將比單個實例更長。

方法#2。

然後我想到了DNS級別的負載均衡。無論如何,DNS查找必須完成,如果返回的IP可以指向關閉地理位置的實例,那就是它!但是這個解決方案似乎更復雜一些,因爲我不得不部署一個新的DNS系統(或者只是配置我公司使用的系統,如果它支持這樣的)。 Google上的快速搜索也顯示了大多數基於商業DNS的負載平衡器。

問題,我想一些幫助回答是:

1)我錯過任何上述2種方法的東西嗎?

2)有沒有更好的方法來解決這個問題,這可能是什麼?

回答

1

讓我們保持兩個概念獨立:

1)負載平衡

顧名思義,這種分佈在多個服務器之間的負載。雖然這通常不會影響傳輸時間,但如果服務器位於不同的地理區域,則會發生這種情況。但並不是一個好的方法 - 比如說將服務器1放在區域A中,將服務器2放置在區域B中,然後在兩者之間進行負載平衡,則任一區域的客戶端都會偶爾轉到最佳區域。例如。循環負載均衡將把所有調用的一半分配給區域A,另一半分配給區域B,而不依賴於客戶端的區域。

這兩種方法都是有效的負載平衡方案 - 無論您是在DNS級別執行此操作還是Web服務器都無關緊要。

2)地域之

在這種方法中,你暗示在你的方法#2,服務器被放置在儘可能靠近他們的客戶。你在這種情況下需要的是某種形式的路由。換句話說,您的DNS需要找出哪個客戶端位於哪個區域,並返回相應的服務器地址,或者您的Web服務器需要告訴客戶端與另一個服務器通信。

根據你的情況我假設你想要2)。有幾種方法來實現這一目標:

一)使用地理DNS提供商(搜索地球DNS),從而獲得DNS服務器重新路由到最近的服務器

b)在地理DNS是不是一種選擇,您可以讓客戶端在每次首次請求時或至少定期(例如,每天一次,每小時一次)檢查您的主Web服務器。然後,讓Web服務器找出客戶端的區域,並要求它重定向到最近的服務器。

c)中使用「地理感知」前端反向代理如nginx的,如在本example

描述
相關問題