- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Datastax 的文档中,他们说 Paxos 协议(protocol)有四个阶段(意思是在轻量级事务中):
- Prepare/Promise
- Read/Results
- Propose/Accept
- Commit/Acknowledge
而左边是提议者的阶段,右边是接受者的阶段。
然后他们尝试解释这个过程:
A proposer prepares by sending a message to a quorum of acceptors that includes a proposal number. Each acceptor promises to accept the proposal if the proposal number is the highest they have received. Once the proposer receives a quorum of acceptors who promise, the value for the proposal is read from each acceptor and sent back to the proposer. The proposer figures out which value to use and proposes the value to a quorum of the acceptors along with the proposal number. Each acceptor accepts the proposal with a certain number if and only if the acceptor is not already promised to a proposal with a high number. The value is committed and acknowledged as a Cassandra write operation if all the conditions are met.
我没能理解这个解释。谁能用更清楚的方式解释一下?
最佳答案
Paxos 算法本质上是一种共识算法。假设您有多个协调器 Cassandra 节点,并且所有这些节点都提出多个更新。 Paxos 算法确保在任何给定时间在所有提议的更新中,选择一个值并按顺序执行。
算法有多个阶段,第一个是
准备/ promise
在Paxos中,请求是按照特定的顺序执行的,所以我们想为每个请求分配一个序列号,请求将根据序列号的顺序执行。
客户端向领导者发送命令,领导者基本上是 Cassandra 中的协调器节点,他决定每个命令应该出现的顺序。
在这个阶段,领导者尝试确定请求的正确序列号。如果leader决定某个client命令应该是第135条命令,它会尝试将该命令选为第 135 个命令的值共识算法的实例。
它创建一个准备请求,其值和序列号为 135。其他 Cassandra 节点(副本)将检查数字 135 是否大于他们目前收到的最大数字,如果是,则该节点将返回a promise 不接受序列号小于 135 的任何其他请求。
它可能会因为失败而失败,或者因为另一个服务器也认为自己是领导者并且对第 135 个命令应该是什么有不同的想法。如果副本节点已经响应了更高编号的准备请求,在这种情况下,它会返回一个 promise ,但返回的 promise 值是它为序列 135 响应的 promise ,以便领导节点也可以知道该请求和您的原始请求变成 136。
一旦多数副本节点向领导者返回 promise ,则执行下一阶段。
提议/接受
如果提议者收到对其准备请求的响应(编号为 n)来自大多数接受者,然后它发送一个接受向每个接受者请求编号为 n 的提案值 v,其中 v 是其中编号最高的提案的值响应,或者如果响应报告没有提案(新条目)则为任何值。
如果接受者收到对编号为提案的接受请求n, 它接受提议,除非它已经响应了一个 prepare编号大于 n 的请求。
这就是确保命令按顺序执行的方式。
Cassandra 的特定变化:
读取/结果
所有的 Cassandra-Paxos 查询都是 Compare-and-swap查询。服务器检查现有值并基于该更新使用新值。例如,增量计数器操作可能需要它。此阶段读取列的现有值并返回结果。
提交/确认
在此阶段,实际写入存储。每个副本都接受了提议后,他们仍然需要将其写入存储。因此副本正在将接受的值写入 Cassandra 存储并向领导者发送确认。
老实说,我认为当领导节点数量非常少(可能是 2 个)时,这个系统是最有效的。就 Cassandra 而言,由于每个节点在任何时间点都可以成为领导节点,因此系统中可能存在很多低效之处。
这个话题很难一一回答,但我会推荐你阅读this .
关于cassandra - 了解 Cassandra Paxos 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57038300/
我们有 2 个 cassandra 集群,第一个有旧数据,第二个有新数据。 现在我们想要将旧数据从第一个集群移动或复制到第二个集群。什么是最好的方法来做到这一点以及如何做到这一点? 我们正在使用 DS
我正在考虑安装 OpsCenter 来监控我们在 RackSpace VM 上运行的 24 节点 Cassandra 集群。过去我听说 OpsCenter 减慢了集群速度。我有点担心 OpsCente
假设我有一个复制因子(RF)= 2 的 2 节点集群。 我使用一致性 2 触发插入。当客户端等待响应时,Cassandra 开始写入这 2 个节点。中间一个节点失败,无法完成写入,而另一节点上的写入成
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足 Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以
我在 Cassandra 中有一个表,其中我用 1000 多个条目填充了一些行(每行有 10000 多列)。行中的条目更新非常频繁,基本上只是一个字段(它是一个整数)被更新为不同的值。列的所有其他值保
当Cassandra端有“掉落的突变”时,它是否向调用客户端返回相应的失败?或者即使在服务器端丢弃相应的突变并导致数据丢失,它总是成功响应调用事务的调用客户端? 在一个特定实例中,当我们的 TPS 约
我有一个 Multi-Tenancy 应用程序,其中 tenantId 将成为每个查询的一部分,因此我将其放入所有表的分区键中。 例子: CREATE TABLE users { tenantId t
根据 Datastax 文档,在 Cassandra 中先读后写是一种反模式。 每当我们在 CQLSH 中使用 UPDATE 或使用 Datastax 驱动程序来设置几列(带有 IF 和集合更新)时,
是否有命令或任何方式可以知道 Cassandra 的哪些节点上存储了哪些数据? 我对 Cassandra 很陌生,在谷歌上搜索这个问题并没有多少运气。 谢谢! 最佳答案 您可以使用 nodetool
我们有一个包含 1500 万条记录的表,而我们的表是一个 10 节点的 cassandra 集群。我们有一列有接近 20 个可重复值。是否建议在此列上建立二级索引? 最佳答案 假设在该列上完全均匀分布
Cassandra 发布了它的 technical limitations但没有提到允许的最大列数。是否有最大列数?我需要存储 400 多个字段。这在 Cassandra 中可能吗? 最佳答案 每行的
我想知道当表中有多个非 PK 列时会发生什么。我读过这个例子: http://johnsanda.blogspot.co.uk/2012/10/why-i-am-ready-to-move-to-cq
我有两个关于 Cassandra 查询结果的问题。 当我在 Cassandra 中对表进行“完全”选择(即 select * from table )时,是否保证结果将按分区标记的递增顺序返回? 例如
我无法为 Cassandra 设置 Hector。我已经浏览了 documentation和 Cassandra wiki .这些文档的问题在于,那里的很多信息都已经过时或过时(或者我缺乏知识)。无论
我正在使用 DataStax Enterprise 中 cassandra 中提供的压力测试。如果有人知道的话,我也想要一些关于它和 cassandra 的信息。 - 首先,压力测试使用哪些节点?我的
当我在 CQL 中创建表时,列的顺序是否必须精确 不是 在主键和 中不是 聚类列: CREATE TABLE user ( a ascii, b ascii, c ascii,
我有一张如下表: CREATE TABLE tab( categoryid text, id text, name text, author text, des
我正在尝试学习 Cassandra,但对术语感到困惑。 很多情况下它表示该行存储键/值对。 但是,当我定义一个表时,它更像是声明一个 SQL 表,即;您创建一个表并指定列名和数据类型。 谁能澄清一下?
如何对 cassandra 数据实现审计? 我正在寻找一个开源选项。 cassandra 是否有任何有助于审计的功能? 我可以使用触发器将记录记录到表中吗?我关注了 Triggers示例并且能够将记录
我遇到了一个问题“me.prettyprint.hector.api.exceptions.HUnavailableException:: 可能没有足够的副本来处理一致性级别。”当我有 RF=1 时,
我是一名优秀的程序员,十分优秀!