我想创建一个可以限制速率的速率限制器系统 向多个服务器发出请求。 为此我想创建计数器(每个 ip 1 个计数器 地址) 这样所有服务器都可以检查并更新这些计数器。
我的问题:最好的方法是什么,创建一张 map 并使用IP 客户端的地址作为 key ,该 ip 的计数器将是 在 java 对象中。该对象将是映射条目的值。
或
为每个 IP 地址创建一个映射并使用计数器名称作为键并 计数器值作为条目的值(int)
我的首要任务是速度。检索计数器对象并 增加它必须非常快。
那么什么是最好的呢?许多小 map 还是一张大 map ?
我希望有人能帮助我。
问候,
马丁
最佳答案
速率限制计数器可能是系统中最具争议的对象之一。我不知道 Hazelcast map 是否会表现得足够好。
您可能会看一下 Hazelcast 1.9 中的 AtomicNumber
接口(interface),但我不知道您是否可以创建任意多个这些对象(或者即使您可以在创建后处理它们)。
您最好的选择可能是使用 HAProxy 或类似的负载均衡器在应用服务器前面实现限制规则。
关于java - 对于 Hazelcast 来说,一张大 map 和多张小 map 哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4504500/