gpt4 book ai didi

ruby - 分布式事务和队列,ruby,erlang,scala

转载 作者:数据小太阳 更新时间:2023-10-29 07:13:03 25 4
gpt4 key购买 nike

我有一个涉及多台机器、消息队列和事务的问题。因此,例如用户点击网页,点击将消息发送到另一台机器,该机器将付款添加到用户的帐户。每秒可能有数千次点击。事务的所有方面都应该是容错的。

我以前从未遇到过这样的事情,但一些阅读表明这是一个众所周知的问题。

所以我的问题。我假设安全的方法是使用两阶段提交,但协议(protocol)是阻塞的,所以我不会获得所需的性能,我是否正确?我通常写 Ruby,但似乎 Redis 之类的数据库和 Rescue、RabbitMQ 等消息队列系统对我的帮助不大——即使我实现某种两阶段提交,如果 Redis 崩溃,数据也会丢失,因为它本质上只是内存。

所有这些让我开始关注 erlang 和 scala - 但在我涉足并开始学习一门新语言之前,我真的很想更好地理解这是否值得付出努力。具体来说,我是否正确地认为,由于它们的并行处理能力,这些语言是实现像两阶段提交这样的阻塞协议(protocol)的更好选择,还是我感到困惑?如果是,是否有任何理由选择一个而不是另一个(特别是在这种情况下 - 我知道有很多主题和博客更普遍地比较两者)

对于交叉发布的道歉 - 这是第一次发布到堆栈交换,但我已经添加到问题中,这个版本可能更适合这里

最佳答案

1) 2 phase commit不是容错的 - 请参阅链接。你要么需要 total order broadcast ,或非阻塞原子提交,具体取决于您要解决的问题的具体表述。

2) 我不会说 Scala 比大多数其他通用语言更适合实现两阶段提交。具体来说,STMs , paralleldistributed收藏在这里对你没有帮助。斯卡拉 actors and remote actors可能会为您提供一个很好的 API 来异步发送消息(在同一台机器上或远程),但默认情况下它们不会为您提供抽象概念,例如不同的故障检测器,这对于实现总订单广播很有用,例如 - 你'您仍然需要自己实现这些(另一方面,我相信 Akka 具有这些抽象)。

3) 我不能代表 Erlang 和 Ruby,但就 Scala 和 Java 而言,您可能需要考虑看看 Akka .它基于分布式参与者模型,该模型还支持事务和不同级别的容错。重用他们的基础架构可能比从头开始编写您自己的分布式容错运行时更好。

关于ruby - 分布式事务和队列,ruby,erlang,scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7758474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com