问题标签 [consensus]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
blockchain - 我在哪里可以找到 n2n 共识算法信息?
我想在我的区块链平台上开发 n2n 协议。我听说 n2n 是一个非常安全的协议,它是由 r3cev corp 在 corda 区块链平台上开发的。但是我不能对 n2n 协议的任何文档或代码进行罚款。你能告诉我在哪里可以找到文件和代码吗?
谢谢你的阅读。
cassandra - Cassandra - 在更新一致性期间读取
假设我们有这样一种情况,其中 R + W > N,其中 R 是读取仲裁级别,W 是写入仲裁级别,N 是复制因子。我们可以进一步假设 R = W = N/2 + 1。
让我们想象一下这样一个场景,其中一个键的更新操作正在进行中,并假设 Cassandra 已将更新提交到时间戳为 t 的单个副本。让我们还假设其他副本的密钥存储时间标记为 < t。如果在更新过程中现在发生对对象的读取请求,则读取仲裁可能包括发生更新的单个副本,其中包含时间戳为 t 的键,并且它将返回一个尚未提交的值(一个可能的未来值 - 我说“可能”,因为更新实际上可能会失败)因为 t > 来自读取仲裁中其他副本的时间戳。
问题是 - R + W > N 配置不应该保证强一致性吗?另外,这个问题是如何解决的?
algorithm - 这个简单的共识算法会起作用吗?
为了让自己相信 Paxos 和 Raft 等标准算法的复杂性是必要的,必须理解为什么更简单的解决方案不能令人满意。假设,为了对 N 台机器集群中的事件流达成共识(即实现复制的时间增长日志),提出以下算法:
每当一台机器想要将一条消息附加到日志时,它就会广播元组
(msg, rnd, prev)
,其中msg
是消息,rnd
是一个随机数,prev
是日志中最后一条消息的 ID。当机器接收到一个元组时,它
msg
作为 的一个子插入prev
,形成一棵树。如果一个节点有多个孩子,只有最高的一个
rnd
被认为是有效的;有效消息通过树的路径是主链。如果一条消息是主链的一部分,并且它足够老,则它被认为是决定/最终的。
如果一台机器尝试提交一条消息,但过了一段时间,它不在主链上,这意味着另一台机器大致同时广播了一条消息,所以你重新广播它直到它在那里。
看起来简单、高效且对崩溃具有弹性。这个算法会起作用吗?
blockchain - 超级账本中的共识是什么
在下面的链接中,有一段说:
http://www.coindesk.com/stellar-ripple-hyperledger-rivals-bitcoin-proof-work/
“每个节点都会发布一个公钥。通过节点的任何消息都由节点签名以验证其格式。一旦达到足够多的相同响应,您就可以同意这是一个有效的交易。”</p>
我的理解:
一次交易
domain-driven-design - 具有事件溯源的多个写入方?
当使用事件溯源和聚合作为事务范围时,您显然更喜欢在单台机器上拥有聚合。但是,如果您还想构建一个高可用性和水平可扩展的系统,您还希望在不同数据库上的许多机器上复制这种状态。
如果在任何给定时刻只允许该网络中的一台机器上的一个写入端,则其他机器最终可以是一致的读取端。但是为了最大限度地提高写入性能,我想同时允许多个写入端会更好。但是在这样的系统中如何处理一致性和共识呢?
当两台或多台机器想要同时更新共同但复制的状态时,我如何确保命令由所有写入端以相同的顺序处理,以便生成的事件相同并且具有相同的顺序?Lamport 时钟是解决方案的一部分吗?
ethereum - Parity 的 Aura 共识协议是如何工作的?
这是一个非常高级的描述,只有公式。我想真正了解它是如何工作的。
我实际上不明白一个步骤是什么以及它有什么用?节点是否总是不断更新步骤?当创建和广播一个块的时间到来时,它将采用当前的步长值并检查他是否应该广播。
“从超过 1 步到未来的块被拒绝”是什么意思?这是否意味着如果块时间是 5 秒,那么下一个块时间戳应该正好高 5 秒。
当下一个主节点不广播时会发生什么?网络如何处理它?所有接下来的块都应该正确地失效,因为它们不会遵循 5 秒的时间戳差异。
consensus - 多智能体系统的共识算法
开始学习共识算法的最佳网络资源是什么?我尝试阅读 IEEE 研究论文,但由于其中使用的数学水平而无法理解。
hashtable - 在不可变的分布式哈希表中达成共识的选项
我正在实现一个完全分散的数据库。任何人都可以随时向其上传任何类型的数据。适合这个问题的一个很好的解决方案是不可变的分布式哈希表。值是用它们的散列键控的。不变性确保此映射始终有效,简化数据完整性检查并避免同步。
为了提供一些数据检索设施,将实施基于标签的分类。任何键(与单个唯一值相关联)都可以用任意标签(任意字节序列)进行标记。为了简单起见,我想使用相同的分布式哈希表来存储这个标签哈希索引。
为了实现这个数据库,我需要一些方法来维持对什么是实际有效的标签哈希索引的去中心化共识。不变性迫使我使用某种链接数据结构。我怎样才能找到根?如何同步条目添加?如何确保每个人都有一个共享根?
networking - configtx.yaml 中的每个定义在 Hyperledger Fabric v1.0 中意味着什么?
这与 Hyperledger Fabric v1.0 网络拓扑有关。在示例中,configtx.yaml 包含以下定义:
有两个主要部分。
- TwoOrgsOrdererGenesis 这定义了排序服务和创世块详细信息。
- TwoOrgsChannel 这定义了通道详细信息。例如有多少组织/实体将成为渠道的一部分。
我从文档中了解到的是联盟部分定义了属于联盟的组织/实体是什么。
我的问题:
- 财团的作用是什么?
- 联盟实体是否可以让对等节点为其自己运行?
- 如果是,如何在这个 yaml 文件中配置?
- <<: 行是什么意思?
- 在这种情况下,什么是应用程序?
- 我可以在这个 yaml 文件中定义多个配置文件吗?
如果有人能详细解释,不胜感激。
algorithm - 为什么 CORFU 分布式共享日志不验证删除?
论文CORFU: A Distributed Shared Log以伪代码形式展示了该协议,该协议不验证删除消息。引用论文:
这意味着我们可以删除尚未写入的页面。这也意味着客户端可以使用过时的集群配置删除页面。这是否意味着论文中提出的协议可能会丢失删除?
根据论文 CORFU 保留删除地址的高水印作为内存空间优化。如果我们可以丢失删除,那么高水位线将不会移动,我们将耗尽内存。
如果我们使用 CORFU 进行状态机复制,我们可以对状态机进行快照并删除快照之前的日志。如果我们可以丢失删除,那么日志实际上将永远增长。
而不是仅仅应用删除而不进行验证,一个实现不会简单地使删除具有幂等性,但如下验证它们:
还是会以某种方式损害安全性或性能?