问题标签 [gossip]
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.
networking - 为什么 Docker 覆盖网络需要共识?
刚刚阅读了 Docker 覆盖网络,非常酷的东西。我似乎无法找到一件事的答案。
根据文档:
- 如果你安装和使用 Docker Swarm,你会自动在你的 manager/worker 主机上获得覆盖网络,并且不需要再配置任何东西;但是……
- 如果您只是想要跨多个主机的(非 Swarm)覆盖网络,则需要使用外部“KV 存储”(共识服务器)配置该网络,如 Consul 或 ZooKeeper
我想知道这是为什么。显然,覆盖网络需要对等点之间达成共识,但我不确定这些“对等点”为什么或是谁。
我只是猜测,使用 Swarm,有一些内部/幕后共识服务器开箱即用。
java - 使用 Java 套接字的基本分布式计数器
我有一些 Java 进程(Socket 程序)在不同的服务器上运行,一些在同一个网络上,一些在不同的网络上。这些进程共同负责维护一个全局计数器。客户端可以连接到这些进程中的任何一个并向 或计数器值发出increase
命令。全局计数器应该是最终一致的(可能发生网络分区,我们可以从中恢复)。decrease
get
到目前为止我想到的解决方案是在每个节点上为所有节点维护一个递增和递减计数。当在节点上发出递增命令时,它会递增其递增计数的本地副本,然后广播其递增和递减计数。接收此广播的节点获取接收计数的最大值及其发送者计数的本地副本,并将结果存储为最新计数。当get
在任何节点上发出命令时,它会给出所有增量和减量之和的差值。我认为这将处理广播接收无序和其他不可靠性的情况。我不想使用任何持久层。
有没有更好的方法来实现这一点?我应该使用什么协议来广播计数?UDP上的八卦会起作用吗?任何可能有帮助的 Java 库?
erlang - Elixir:Genserver.call 未启动 handle_call
我正在实现Gossip Algorithm
多个演员同时传播八卦的方法。当每个 Actor 听了 Gossip 10 次后,系统就会停止。
现在,我有一个场景,在将八卦发送给它之前,我正在检查接收者actor的监听计数。如果监听计数已经是 10,那么 gossip 将不会被发送到接收actor。我正在使用同步调用来获取监听计数。
该程序在开始时运行良好,但在一段时间后Genserver.call
停止并出现如下超时错误。经过一些调试,我意识到它Genserver.call
变成了休眠状态,无法启动相应的handle_call
方法。使用同步调用时是否会出现这种行为?由于所有参与者都是独立的,因此这些Genserver.call
方法不应该在不等待彼此响应的情况下独立运行。
编辑:以下代码在 iex shell 中运行时可以重现错误。
打开 iex shell 并加载上面的模块。使用以下命令启动两个进程:
通过调用 Dogbert 在评论中提到的死锁条件产生错误。在没有太大时差的情况下运行。
等待 5 秒钟。会出现错误。
hyperledger-fabric - 阻止织物中的传播
我正在关注Gossip 协议。
对于新区块的传播,通道上的领导节点从排序服务中提取数据并向节点发起八卦传播。
领导节点是自己组织的唯一领导者还是所有节点的领导者?
如果每个组织都有自己的领导者,他们会从账本不同的不同排序节点拉新块吗?我的意思是 OrdererLedger 与块元数据中的签名不同。
java - 关于 Cassandra Bootstrap 的问题
有人可以回答我的以下问题,
1)我有 4 个节点 172.30.56.60、172.30.56.61、172.30.56.62、172.30.56.63,并且我在所有四个节点的 cassandra.yaml 中将种子配置为“172.30.56.60、172.30.56.61”。注意:我没有在 cassandra.yaml 文件中提供有关“172.30.56.62、172.30.56.63”的任何信息。但是当我在所有四个节点中启动 Cassandra 时,Cassandra 是如何识别 62 和 63 的?
2)八卦协议到底是如何工作的/Cassandra引导程序到底是如何工作的?
谢谢,
哈利
akka - 为什么 akka 中的 gossip 协议需要两次传递它的状态才能注册状态更改?
我无法理解 Akka 中使用的集群算法。
在 akka Gossip Protocol的描述中,它说:
gossip 状态或 gossip 状态的接收者可以使用 gossip 版本(向量时钟)来确定是否:
- 它有一个更新版本的 gossip 状态,在这种情况下,它会将它发送回 gossiper
- 它有一个过时的状态版本,在这种情况下,接收者通过发回它的八卦状态版本来向八卦者请求当前状态
- 它有相互冲突的八卦版本,在这种情况下,不同的版本被合并并发回
第二步似乎浪费了通信,因为 gossiper 发送了两次它的状态。一次是当它发现它没有最新版本时,再一次是当接收者通过发回自己的过时版本来想要最新版本时。
我认为我对此有误解,因为我对矢量时钟和 CFRD 的理解有限,并且 Akka 文档中给出的描述很短,而维基百科的文章是高级的。就我而言,矢量时钟是 CRDT 的一种实现,但这可能是不正确的。
但最后我不明白为什么八卦节点需要两次传达其状态。请说清楚。
但我想我可能误解了vector Akka Cluster
cassandra - 在 cassandra 中闲聊自定义字段
我想知道我们是否可以在 cassandra 中八卦用户定义的值。我正在查看Gossiper.java文件以了解工作流程,但到目前为止,我无法弄清楚如何在 cassandra 中添加自定义字段以进行八卦。我是 cassandra 的新手,如果有人能在这方面指导我,我将不胜感激。谢谢 !
consul - 网络分区中的 Consul 连接(DMZ 区域)
假设在任何数据中心都有不同的网络分区(例如 DMZ 区域),因此某些主机集无法联系其他主机集。因此,如果我想将消息传播到任何数据中心中的所有主机,gossip/consul 是否适用于该用例?
对于上述问题,我想到的一种解决方案是:允许 DMZ 区域中的所有主机连接到领事服务器(仅限少数主机)。这就像一些主机集无法与其他主机集联系,但数据中心中的所有主机都可以与领事服务器对话。但我不确定,即使这样,任何消息都可以传播到数据中心的所有主机。
networking - 将 DHT 用于八卦协议?
一段时间以来,我一直在研究 DHT,尤其是 kademlia。我正在尝试在 Kademlia DHT 上实现一个 p2p 网络。我希望能够向全网八卦消息。根据我对使用八卦协议的研究,但是当我已经使用 dht 来存储对等点时,添加另一个全新的协议来传播消息似乎很奇怪。是否有一个八卦协议可以在像 Kademlia 这样的 DHT 拓扑上运行或与它一起工作?