我正在实现一个简单的循环解决方案的负载平衡。这个想法是一个请求将带有一个整数值,并且基于这个值(如果它在范围内),我将选择正确的进程来转发请求。
地图的创建
在启动时,负载均衡器与每个进程进行对话,并获得支持范围。现在,这个范围可以重叠另一个进程的范围,也可以是一个子集。
例如,请考虑以下几点
我最初的解决方案是创建一个简单的HashMap<Integer, List<Process>>。因此,我将循环遍历范围,并为同一进程创建多个条目。如果键已经存在一个条目,我将将新进程添加到值列表中。
访问地图
当请求出现时
F 222
问题-更新地图
在出现这样一个场景之前,我一直对此很满意,其中我必须更新Process对象中的一些参数,这些参数将在将来的请求中考虑到。因此,如果必须更新进程C的参数,我必须循环遍历Map的每个条目,对于每个条目,我必须循环通过值列表,并检查列表中是否存在该进程。如果是,更新列表,然后更新地图。这是一个ConcurrentMap,这意味着在进行更新时,我将锁定对地图的访问。
我尝试过不同的解决方案,以提高更新的效率,比如使用实现Range(int min, int max)的类Comparable<Range>,然后使用NavigableMap<Range, Process>。但这并不能涵盖每个场景(重叠,范围的子集),以正确地循环知更鸟,没有间隙。
避免用于更新的循环将是很好的。有更好的解决方案吗?
发布于 2011-10-20 09:38:30
你试过LinkedHashMap了吗?在您的情况下,treeMap也可能有所帮助。此外,还有一个公用集合MultiKeyHashMap,允许您为单个值维护多个键。
https://stackoverflow.com/questions/7779685
复制相似问题