3

enter image description here用於識別所述存儲空間

分配算法參考圖像

我的方案

I1和I2是其可以是相同的服務器或其他服務器我的SQL服務器實例。 小框內表示sql實例內的數據庫。

每個框附近的數字表示一個人可以存儲的數據量。即。有30個數據庫可以存儲30個用戶的數據。將有n個服務器,實例和數據庫,這可以擴展。

設計用於I1的容量是60(10+20+30)

我們有另一個主數據庫,其中的服務器,實例和數據庫的細節。使用它我們可以防止使用帶有位域的數據庫。所以,如果我停止具有能夠存儲20I1用戶,那麼數據庫的I1總存儲將是40

我的要求

我們需要識別基礎上的可用空間的服務器實例的算法。這樣基礎設施團隊就可以對流量進行負載平衡。

如果I1極限是30I220I310 用戶將在比被分配3:2:1。如果創建了30個用戶,那麼I1包含15,I2包含10,I3包含5.

我該如何實現這一目標?任何算法。

我需要在SQL Server中實現這個2008年

我很抱歉這一篇長文來形容我的問題:(。希望任何一個可以幫助我。在此先感謝。

回答

0

全部,

我使用百分比策略解決了這個問題。

太簡單了。

第一次

Instance I1 (10+20+30) - 60 (60 free spaces - 100% free) 
Instance I2 (10+20+30) - 60 (60 free spaces - 100% free) 

新用戶來,它將選擇第一個。

Instance I1 (10+20+30) - 59(1 space is allocated) So percentage will be around 96%* 
Instance I2 (10+20+30) - 60(0 space is allocated) So percentage will be 100% 

另一個用戶

Selects I2 because of 100% free. 

停止I2的數據庫,其可能夠存儲30個用戶 爲I2所以總空間將是20 + 10(30),並且還百分比自由空間會減少。 因此,另一個用戶來,它會選擇可用空間的實例。

例如:我有兩個實例I1容量爲1000用戶和I2容量爲2用戶。

算法將分配1000第一(所以I1999空間免費)和未來的用戶將被分配到I2.所以I2的比例免費將50%。因此,當I1達到50%(即500用戶將被創建到I1然後只有I2將再次使用)時發生下一個分配。

1

一個簡單的算法做到這一點是使用一個隨機數發生器和if-else語句塊

float db1upper = 10.0/(10 + 20 + 30) 
float db2upper = db1upper + 10.0/(10 + 20 + 30) 

float rand // [0, 1) 
if(rand < db1upper) 
    Use db1 
else if(rand < db2upper) 
    Use db2 
else 
    Use db3 

可以爲dbNupper更新值每X分配和/或每隔X分鐘,以反映正在釋放用戶或反映任何偏見隨機數發生器

+0

感謝Zim-Zam的回答。 – kbvishnu 2013-05-10 05:34:06