首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型负载平衡算法Map<Range、List<Process>>是一种有效的更新算法

类型负载平衡算法Map<Range、List<Process>>是一种有效的更新算法
EN

Stack Overflow用户
提问于 2011-10-15 18:13:47
回答 1查看 518关注 0票数 0

我正在实现一个简单的循环解决方案的负载平衡。这个想法是一个请求将带有一个整数值,并且基于这个值(如果它在范围内),我将选择正确的进程来转发请求。

地图的创建

在启动时,负载均衡器与每个进程进行对话,并获得支持范围。现在,这个范围可以重叠另一个进程的范围,也可以是一个子集。

例如,请考虑以下几点

  • Process A支持1-5
  • Process B支持1-3
  • Process C支持3-9

我最初的解决方案是创建一个简单的HashMap<Integer, List<Process>>。因此,我将循环遍历范围,并为同一进程创建多个条目。如果键已经存在一个条目,我将将新进程添加到值列表中。

访问地图

当请求出现时

  • 1-2,循环A & B.
  • 3,B&C
  • 3-5,B&C
  • 上循环6-9,始终C

F 222

问题-更新地图

在出现这样一个场景之前,我一直对此很满意,其中我必须更新Process对象中的一些参数,这些参数将在将来的请求中考虑到。因此,如果必须更新进程C的参数,我必须循环遍历Map的每个条目,对于每个条目,我必须循环通过值列表,并检查列表中是否存在该进程。如果是,更新列表,然后更新地图。这是一个ConcurrentMap,这意味着在进行更新时,我将锁定对地图的访问。

我尝试过不同的解决方案,以提高更新的效率,比如使用实现Range(int min, int max)的类Comparable<Range>,然后使用NavigableMap<Range, Process>。但这并不能涵盖每个场景(重叠,范围的子集),以正确地循环知更鸟,没有间隙。

避免用于更新的循环将是很好的。有更好的解决方案吗?

EN

回答 1

Stack Overflow用户

发布于 2011-10-20 09:38:30

你试过LinkedHashMap了吗?在您的情况下,treeMap也可能有所帮助。此外,还有一个公用集合MultiKeyHashMap,允许您为单个值维护多个键。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7779685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档