我想创建一个可以限速的速率限制系统 请求到多个服务器。 为此,我想创建计数器(每个ip的1个计数器 地址) 这样,所有服务器都可以检查和更新这些计数器。
我的问题:什么是最好的方法,创建一个地图并使用ip 客户端的地址作为密钥和该ip的计数器 在java对象中。该对象将是映射条目的值。
或
为每个IP地址创建一个映射,并使用计数器名称作为键和 计数器值作为条目(int)的值
我的关键优先事项是速度。检索计数器对象和 递增它必须非常快。
那最好的是什么?许多小地图或一张大地图?
我希望有人能帮助我。
的问候,
马腾
答案 0 :(得分:0)
速率限制计数器很可能是系统中最具争议的对象之一。我不知道Hazelcast地图的表现是否足够好。
您可以查看Hazelcast 1.9中的AtomicNumber
界面,但我不知道您是否可以创建任意多个这些对象(或者即使您可以在创建后处置它们)。
您最好的选择可能是使用HAProxy或类似的负载均衡器在您的应用服务器前实施限制规则。