3

在此处输入图像描述

参考图片

我的情景

I1 和 I2 是我的 SQL 服务器实例,它们可能位于同一服务器或不同服务器中。里面的小方框代表 sql 实例中的数据库。

每个方框附近的数字代表一个人可以存储的数据量。IE 。30个数据库可以存储30个用户的数据。将有 n 个服务器、实例和数据库,这可以是可扩展的。

容量设计I160(10+20+30).

我们有另一个主数据库,其中包含服务器、实例和数据库的详细信息。使用它我们可以防止使用带有位字段的数据库。因此,如果我停止能够存储用户的数据库,20那么I1总存储量I1将是40

我的要求

我们需要一种基于可用空间识别服务器实例的算法。这样基础设施团队就可以对流量进行负载平衡。

如果限制I1is 30, I2is20I3is10 用户将按 3:2:1 的比例分配。如果创建 30 个用户,则 I1 包含 15,I2 包含 10,I3 包含 5。

我怎样才能做到这一点?任何算法。

我需要在 SQL Server 2008 中实现这一点。

我很抱歉用这篇长篇文章来描述我的问题:(。希望有人能帮助我。在此先感谢。

4

2 回答 2

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 分钟更新一次值,以反映正在解除分配的用户或反映随机数生成器中的任何偏差

于 2013-05-05T15:29:13.007 回答
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.SoI2的可用百分比将是50%。所以下一次分配发生在I1到达时50%(即500用户将被创建到I1然后只会I2再次使用)。

于 2013-05-10T05:48:25.893 回答