Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Design patterns 如何处理分布式编程中的竞争条件?_Design Patterns_Distributed Computing_Distributed_Race Condition_Distributed System - Fatal编程技术网

Design patterns 如何处理分布式编程中的竞争条件?

Design patterns 如何处理分布式编程中的竞争条件?,design-patterns,distributed-computing,distributed,race-condition,distributed-system,Design Patterns,Distributed Computing,Distributed,Race Condition,Distributed System,我似乎在网上找不到太多关于这方面的信息。在分布式编程中,存在许多竞争条件构成风险的场景。例如,如果我有一个聊天系统,我想将每个房间的用户数限制为100。由于竞争条件,许多并发连接可能会导致单个房间中有100多个用户。我能想到的唯一解决方案是使用分布式锁。然而,我觉得有更干净的方法来解决这个/这些问题。网上有关于这方面的指南或资源吗?归根结底,这都是一个你想要采用的一致性模型。 如果您希望在系统中实现强一致性(系统中的每个节点在任何时间点都会看到相同的计数器值,并且该值始终“有效”)-您无法使用分

我似乎在网上找不到太多关于这方面的信息。在分布式编程中,存在许多竞争条件构成风险的场景。例如,如果我有一个聊天系统,我想将每个房间的用户数限制为100。由于竞争条件,许多并发连接可能会导致单个房间中有100多个用户。我能想到的唯一解决方案是使用分布式锁。然而,我觉得有更干净的方法来解决这个/这些问题。网上有关于这方面的指南或资源吗?

归根结底,这都是一个你想要采用的一致性模型。 如果您希望在系统中实现强一致性(系统中的每个节点在任何时间点都会看到相同的计数器值,并且该值始终“有效”)-您无法使用分布式一致性算法(分布式锁就是这种alg的一种情况)


但是你可以通过改变你的期望来克服它。例如,您可能会接受计数器值最终将是“有效的”(“最终一致性”模型),并将CRDT用于计数器,“稍后”解决事务冲突。

谢谢您的回复。你个人会在我的问题中提到的场景中使用分布式锁吗?如果我真的不想要超过100个用户,并且我希望他们中的很多人几乎同时加入聊天(高流量服务)——可能。问题是——如果你的聊天室很小(最多100个用户),这意味着任何聊天室都可以安装在一台服务器中,你可以假设系统不是分布式的(至少对于那个特定的聊天室),用户可以使用本地存储或关系数据库来跟踪加入的用户。但是如果你想要高可用性,你真的不能这样假设吗?我选择发行的主要原因是为了避免单点失败。为什么这会被否决?