Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Cassandra数据库为Web服务节点分配唯一编号_Cassandra_Distributed System - Fatal编程技术网

使用Cassandra数据库为Web服务节点分配唯一编号

使用Cassandra数据库为Web服务节点分配唯一编号,cassandra,distributed-system,Cassandra,Distributed System,为了更好地解释我的目标,我将把问题简化为基本的需求。请让我知道,如果更多的细节需要澄清 假设我有10个可分配的唯一数字(0-9)。数据库中包含保留或免费的号码。正在运行的前端web服务的目标是成功地请求分配号码。将编号分配给特定节点后,将保留该编号,其他节点无法分配该编号 请记住,这是一个没有单点故障的分布式系统 给我带来麻烦的警告是卡桑德拉关于最终一致性的观点。注意,我可以调整Cassandra使其完全一致,但代价是延迟更高。如果这是我最好(可能是唯一)的选择,我可以这样做,但我希望保留一致性

为了更好地解释我的目标,我将把问题简化为基本的需求。请让我知道,如果更多的细节需要澄清

假设我有10个可分配的唯一数字(0-9)。数据库中包含保留或免费的号码。正在运行的前端web服务的目标是成功地请求分配号码。将编号分配给特定节点后,将保留该编号,其他节点无法分配该编号

请记住,这是一个没有单点故障的分布式系统

给我带来麻烦的警告是卡桑德拉关于最终一致性的观点。注意,我可以调整Cassandra使其完全一致,但代价是延迟更高。如果这是我最好(可能是唯一)的选择,我可以这样做,但我希望保留一致性调优的概念

我对该策略的想法是在节点上执行以下操作:

1) 查询Cassandra以获取可用数字的列表

2) 随机选择一个自由号码

3) 对Cassandra执行Put,说明此节点已保留该号码

4) 连续查询Cassandra,查看哪个节点成功保留了号码。(持续请求,因为读数可能不会立即反映作业。)

5) 如果返回的节点名称是提交此节点保留的名称,则保留成功

6) 如果返回的节点名是另一个节点名,则表示另一个节点大约在与此节点相同的时间请求该号码,并获得分配。此节点必须返回到步骤1并重试

我有一种奇怪的感觉,如果我使用上述策略,特定情况会导致错误(双重分配等)


其他人能否对我提出的战略发表评论,并可能提出自己的看法?谢谢。

您可能想退房。看起来这正是你需要的。您可以使用ZooKeeper获取新的工作分配,并将现有的工作分配存储在Cassandra中。

根据您的应用程序,您真的需要从一组固定的数字中选择一个吗?如果您只需要选择一个其他节点都没有选择的唯一编号,您可以通过为每个节点生成UUID(通用唯一标识符)来实现,例如使用。

非常有趣。我会深入研究的。谢谢我无意中发现了笼子,这是卡桑德拉和动物园管理员的另一层。再想想,像笼子这样的东西可能不是我想要的。这是一篇关于动物园管理员的好文章,看起来正是我需要的。我会试试的,UUID在这帮不了我。我需要十进制值。谢谢你。