【发布时间】:2017-08-11 02:39:36
【问题描述】:
我有一个简单的用例。我有一个系统,其中不允许对 REST 服务(具有数十个实例)的重复请求。但是,由于复杂的数据存储配置和下游服务,也难以预防。
因此,我可以防止重复“事务”的唯一方法是有一个集中的地方,我可以在其中编写请求数据的唯一哈希。每个 REST 端点首先检查新请求的哈希是否已经存在,只有在不存在此类哈希时才会继续。
出于此问题的目的,假设无法使用数据库约束来执行此操作。
一种解决方案是在我存储请求哈希的数据库中创建一个表,并始终在继续请求之前写入该表。但是,我想要比这更轻的东西。
另一种解决方案是使用 Redis 之类的东西,并在继续请求之前将我的唯一哈希写入 redis。但是,我不想启动 Redis 集群并对其进行维护等。
我正在考虑将 Hazelcast 嵌入到我的每个应用程序实例中,并在那里写入我唯一的哈希值。理论上,所有实例都会看到内存网格中的哈希值,并且能够检测到重复请求。这解决了我的问题,即拥有比数据库更轻的解决方案以及不必维护 Redis 集群的其他要求。
现在终于可以回答我的问题了。在这个用例中使用 Hazelcast 是个好主意吗? hazelcast 是否足够快以检测以毫秒或微秒为间隔的重复请求?
如果请求 1 进入实例 1,请求 2 进入实例,则相隔 2 微秒。实例 1 将请求的哈希值写入 hazelcast,实例 2 仅在毫秒后检查 hazelcast 是否存在哈希值,是否会检测到哈希值? hazelcast 是否会及时在集群中传播数据?它甚至需要这样做吗?
提前致谢,欢迎所有想法。
【问题讨论】:
标签: hazelcast