我的问题是关于分布式缓存的一个基本功能,我的用例是负载平衡环境中的速率限制器实现,来自同一端点的每个请求都应该为该端点增加一个请求计数器,我试图理解在这种情况下,当每个请求都指向不同的(负载平衡的)集群节点时,分布式缓存是如何工作的,端点请求计数是否存储在集群的单个节点上?在这种情况下,网络负载效率很低,不是吗?我可以配置集群来复制数据以进行读取吗?当在计数器上执行增量时,这不会导致一致性问题和缓存集群上的写惩罚吗?分布式缓存是否使用任何基于仲裁的机制?谢谢。
jjjwad0x1#
集群仲裁,复制Map-它们都在hazelcast中,但是如果我正确理解了您的需求,您就不需要它们了。我想你想要的答案很简单:使用分布式Map为每个端点分配一个唯一标识符,并在从该端点生成请求时将该标识符用作“键”。至于值,您有多种选择来保持计数。例如,一个简单的atomicinteger(java sdk的,而不是hazelcast iatomicinteger)。
rxztt3cl2#
这是关于分布式系统的一个基本问题。它基本上是在cap定理下讨论的:https://en.wikipedia.org/wiki/cap_theoremc=一致,a=可用,p=分区(分布式)你只能有三个中的两个-你必须根据你的用例进行权衡。我的经验是和黑兹卡斯特在一起(www.hazelcast.org)默认情况下,这是一个使用数据分区方案的ap系统。hazelcast还有一个cp子系统,可以保证可用性的一致性。https://hazelcast.com/blog/riding-the-cp-subsystem/巧合的是,大约一年前,我就使用hazelcast的利率限制系统提出了一点建议。这正是你所说的。你只需要把这些部分和架构一个系统,以满足您的需求。
2条答案
按热度按时间jjjwad0x1#
集群仲裁,复制Map-它们都在hazelcast中,但是如果我正确理解了您的需求,您就不需要它们了。我想你想要的答案很简单:
使用分布式Map
为每个端点分配一个唯一标识符,并在从该端点生成请求时将该标识符用作“键”。
至于值,您有多种选择来保持计数。例如,一个简单的atomicinteger(java sdk的,而不是hazelcast iatomicinteger)。
rxztt3cl2#
这是关于分布式系统的一个基本问题。它基本上是在cap定理下讨论的:
https://en.wikipedia.org/wiki/cap_theorem
c=一致,a=可用,p=分区(分布式)
你只能有三个中的两个-你必须根据你的用例进行权衡。
我的经验是和黑兹卡斯特在一起(www.hazelcast.org)默认情况下,这是一个使用数据分区方案的ap系统。hazelcast还有一个cp子系统,可以保证可用性的一致性。
https://hazelcast.com/blog/riding-the-cp-subsystem/
巧合的是,大约一年前,我就使用hazelcast的利率限制系统提出了一点建议。这正是你所说的。你只需要把这些部分和架构一个系统,以满足您的需求。