Design patterns 如何处理分布式编程中的竞争条件?
我似乎在网上找不到太多关于这方面的信息。在分布式编程中,存在许多竞争条件构成风险的场景。例如,如果我有一个聊天系统,我想将每个房间的用户数限制为100。由于竞争条件,许多并发连接可能会导致单个房间中有100多个用户。我能想到的唯一解决方案是使用分布式锁。然而,我觉得有更干净的方法来解决这个/这些问题。网上有关于这方面的指南或资源吗?归根结底,这都是一个你想要采用的一致性模型。 如果您希望在系统中实现强一致性(系统中的每个节点在任何时间点都会看到相同的计数器值,并且该值始终“有效”)-您无法使用分布式一致性算法(分布式锁就是这种alg的一种情况)Design patterns 如何处理分布式编程中的竞争条件?,design-patterns,distributed-computing,distributed,race-condition,distributed-system,Design Patterns,Distributed Computing,Distributed,Race Condition,Distributed System,我似乎在网上找不到太多关于这方面的信息。在分布式编程中,存在许多竞争条件构成风险的场景。例如,如果我有一个聊天系统,我想将每个房间的用户数限制为100。由于竞争条件,许多并发连接可能会导致单个房间中有100多个用户。我能想到的唯一解决方案是使用分布式锁。然而,我觉得有更干净的方法来解决这个/这些问题。网上有关于这方面的指南或资源吗?归根结底,这都是一个你想要采用的一致性模型。 如果您希望在系统中实现强一致性(系统中的每个节点在任何时间点都会看到相同的计数器值,并且该值始终“有效”)-您无法使用分
但是你可以通过改变你的期望来克服它。例如,您可能会接受计数器值最终将是“有效的”(“最终一致性”模型),并将CRDT用于计数器,“稍后”解决事务冲突。谢谢您的回复。你个人会在我的问题中提到的场景中使用分布式锁吗?如果我真的不想要超过100个用户,并且我希望他们中的很多人几乎同时加入聊天(高流量服务)——可能。问题是——如果你的聊天室很小(最多100个用户),这意味着任何聊天室都可以安装在一台服务器中,你可以假设系统不是分布式的(至少对于那个特定的聊天室),用户可以使用本地存储或关系数据库来跟踪加入的用户。但是如果你想要高可用性,你真的不能这样假设吗?我选择发行的主要原因是为了避免单点失败。为什么这会被否决?