参考图片
我的情景
I1和I2是我的SQL服务器实例,可能位于同一服务器或不同服务器中。 小盒子里面代表sql实例中的数据库。
每个方框附近的数字代表一个人可以存储的数据量。即。具有30的数据库能够存储30个用户的数据。将有n个服务器,实例和数据库,这可以扩展。
为I1
设计的容量为60(10+20+30)
。
我们有另一个主数据库,其中包含服务器,实例和数据库的详细信息。使用它我们可以防止使用带有位字段的数据库。因此,如果我停止数据库能够在20
个用户中存储I1
,则I1
的总存储量将为40
我的要求
我们需要一种基于可用空间识别Server实例的算法。这样基础架构团队就可以对流量进行负载均衡。
如果I1
的限制为30
,则I2
为20
且I3
为10
用户将按3:2:1的比例分配。如果创建了30个用户,则I1包含15,I2包含10,I3包含5。
我怎么能做到这一点?任何算法。
我需要在SQL Server 2008中实现这一点。
我很抱歉这篇长篇文章描述了我的问题:(。希望有人帮助我。提前致谢。
答案 0 :(得分: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
您可以更新每个X分配{/ 1}}和/或每X分钟的值,以反映被释放的用户或反映随机数生成器中的任何偏差
答案 1 :(得分: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
(I1
999
空间可用空间),下一个用户将被分配到I2.
所以I2
的免费百分比将是50%
。因此,当I1
到达50%
时会发生下一次分配(即500
用户将被创建为I1
,然后只会再次使用I2
。