2011-09-17 24 views
2

用戶將上傳文件到我的服務器。在perl中,如何給出服務器ips和用戶ip的列表,如何檢測哪個服務器最適合?我看着MaxMind,但它只會告訴我ips的位置。我如何找到最近的那個?根據用戶ip查找最近的服務器?

回答

3

也許我失去了一些東西,但

如果你知道IP地址(服務器和通過的MaxMind用戶)纔算對用戶IP的每個服務器IP之間的距離,選擇最小的一個位置。 ..

編輯 - 按評論:

的物理距離,沒有說太多關於性能... OTOH用於測量/比較性能,你需要在用戶和服務器之間,然後發送測試數據包比較/決定...

編輯2 - 根據意見:

如果你只有一個服務器每個洲,那麼計算是相當容易的...檢查用戶IP的大陸,並相應地選擇服務器,因爲它通常是相當安全的assmue在一個大陸不同於用戶的服務器會表現得更差...

+0

我該如何計算距離? –

+2

你可以使用一些簡單的座標之間的歐幾里德距離。或者,你可以正確地做,並根據座標數據計算距離,例如, WGS84 - http://www.movable-type.co.uk/scripts/latlong-vincenty.html – Flexo

+5

我不會去投注物理距離是網絡連接的一個偉大的估計都不過。其他因素,例如負載(主機*和鏈接)可能經常更加重要。 – Flexo

1

你需要最近的服務器還是最快的服務器?

如果您需要找到性能最好的服務器,您可能需要發送測試數據包並獲得每個服務器的響應時間,以便找出答案。

如果你需要找到最近的,那麼你可以計算每個目的地之間的跳數來選擇最接近的。 PS:我不是很熟悉perl給你一個perl的具體命令。

0

如果他們打算多次執行此操作,則可以記錄所有上傳的IP(或C類塊),然後從每臺服務器運行一次性traceroute/ping,然後保留以使用下一個他們上傳的時間。

0

如果它不能從一個IP地址來可靠地確定,但可以使用DNS或第三方服務,如啓發式的MaxMind得到很遠的實際地理位置,你之後,然後。

但是,如果您在最短的網絡距離之後,這是預期響應時間的某種指示,那麼您可以檢查數據包標頭的TTL字段:較低的TTL表示數據包走得更遠。這不是萬無一失的,因爲不同的OS供應商使用不同的默認TTL,但它是一個選項。