假设有A,B,C三个域。每一个域中可存放ip记录,如:
A:
1.1.1.1
2.2.2.2
5.5.5.5
假设A中有50条记录,B中有30条记录,C中有32条记录。现在有一批ip记录,如500个ip,需要尽量平均分配到这3个域中,如何实现这个功能?
假设有A,B,C三个域。每一个域中可存放ip记录,如:
A:
1.1.1.1
2.2.2.2
5.5.5.5
假设A中有50条记录,B中有30条记录,C中有32条记录。现在有一批ip记录,如500个ip,需要尽量平均分配到这3个域中,如何实现这个功能?
1 回答779 阅读
1 回答1.7k 阅读
1 回答1.1k 阅读
这种情况常用的两种算法:
1.
轮询
,可以精准的保持平均,但是实现逻辑会略微复杂一点。并发情况需要考虑锁,涉及负载均衡需求的场景会经常用这种方式。2.
随机
,也就是用hash算法分配到任意一个bucket里面。这个方式实现简单,也有很多办法可以实现类似的效果,但数据量小的时候有几率会不平均。除此之外,考虑到如果bucket数量会动态扩展还要保持平均,这种场景在分布式中非常常见,通常采用
一致性hash
。