问题标签 [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.

0 投票
3 回答
528 浏览

distributed-computing - 如何保证所有节点都被基于 gossip 的协议感染?

在基于 gossip 的协议中,我们如何保证所有节点都被消息感染?

如果我们选择随机数量的节点并向这些节点发送消息,并且这些节点也这样做,则有可能某些节点不会收到消息。

虽然无法计算,但似乎很小。但是,如果系统运行了很长时间,在某些时候,一个节点会不走运,并且会被剩余。

0 投票
1 回答
710 浏览

erlang - 在 Erlang 集群管理中使用 gossip 协议

我是 Erlang 以及分布式计算的新手。我们是一个小团队,正在尝试构建一个小型消息服务器。我们正在研究如何管理集群状态的一件事 - 我们在 Erlang 开源项目中遇到了一些自定义实现,例如 Riak、rabbitMq、ejabbered 和 Vernemq。

似乎 Erlang 社区正在转向使用 gossip 协议进行集群管理 - 我看到最近关于 RabbitMQ 的帖子(https://groups.google.com/forum/#!searchin/rabbitmq-users/gossip $20protocol/rabbitmq-users/ jvQQy30kLTI/hIDFw94SddQJ

我的问题是 - 除了八卦协议之外,还有其他方法可以进行集群管理吗?还有什么是八卦协议的开源erlang实现。在考虑 erlang 节点管理时需要考虑哪些因素?

谢谢你的帮助。

0 投票
1 回答
776 浏览

cassandra - Cassandra 集群设置 - 无法使用任何种子进行八卦

我正在尝试设置一个 3 节点 Cassandra VM 集群。

我在单个虚拟机上安装了 datastax 包中的 cassandra,然后修改了以下内容:

  1. 种子 - vm1(在所有 vm 配置中设置 ip 地址)

  2. 更新了以 listen_address 作为主机 ip 的配置,添加了 rpc_broadcast_address

  3. 在防火墙规则中添加了 cassandra 端口以允许虚拟机间通信

  4. 还尝试使用 SSH 连接到虚拟机

在尝试了所有这些之后,我启动了 cassandra 种子节点,它运行良好,当我使用 nodetool 检查状态时,我看到节点状态为 UN (Up/Normal)。然后我在其他集群节点上启动 cassandra。它无法启动,无法使用任何种子错误进行八卦。任何帮助将不胜感激!

堆栈跟踪:

谢谢!

0 投票
2 回答
7228 浏览

cassandra - cassandra 中的两个节点不会互相闲聊

Node0:
configuration.yaml 文件:
cluster_name:'ServerCluster'
num_tokens:256
Seeds:“”
listen_address:10.104.0.15
rpc_address:10.104.0.15
auto_bootstrap:false
endpoint_snitch:GossipingPropertyFileSnitch

cassandra-env.sh 文件:JVM_OPTS="$JVM_OPTS -java。 rmi.server.hostname=10.104.0.15"
cassandra-rackdc 文件:dc=DC1rack=RAC1

Node1:
configuration.yaml 文件:
cluster_name:'ServerCluster'
num_tokens:256
种子:"10.104.0.15"
listen_address:10.104.0.20
rpc_address:10.104 .0.20
auto_bootstrap: true
endpoint_snitch: GossipingPropertyFileSnitch

cassandra-env.sh 文件:JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=10.104.0.20"
cassandra-rackdc 文件:dc=DC1rack=RAC1

Node0 已启动且正常
Node1 错误:

tdown INFO 00:04:16 等待消息服务静默 INFO 00:04:16 MessagingService 已终止 accept() 线程



然后我更改了 Node0 的种子(因为在 stackoverflow 中看到了解决方案)

Seeds: "10.104.0.15,10.104.0.20"
Node1:
Seeds: "10.104.0.20"

Node0 很好
Node1 错误:

那么你能帮我解决这个先有鸡还是先有蛋的问题吗?比你提前

甚至我也关注了datastax链接https://academy.datastax.com/courses/ds210-datastax-enterprise-operations-and-performance-tuning/multiple-data-centers-multiple-0
,他只是更改了集群名称,listen_address, rpc_address 和种子,当他键入 nodetool status 时,他能够看到它们,但是当我遵循相同的操作时,我只看到它在各自服务器中的状态

0 投票
0 回答
1784 浏览

java - Java 中的 Gossip 算法,入门

我想用 Java 编写一个简单的 Gossip 算法实现,但我无法弄清楚从哪里开始。我对这种网络编程很陌生,不知道从哪里开始。这个概念是我想创建一个代码来模拟建筑物中的温度传感器,以开尔文收集热量。使用 gossip 算法,它将使用推和协议,该协议使用该算法收集建筑物中温度的平均值:si 是初始总和,wi 是初始重量

1:设 {(Sr, Wr)} 是在第 t – 1 轮(上一轮)中发送给 i 的所有对

2:设 st, i := ∑〖Sr, Wt,i〗 = ∑Wr (所有接收对的总和)

3:均匀随机选择一个目标ft(i)

4:发送对 (1/2st,I , 1/2wt,I ) 给 ft(i) 和 i (你自己)

5: (St,i)/(Wt,i) 是步骤 t 中平均值的估计

该算法应允许在不更改任何代码的情况下添加新传感器

我做了很多查找,但我真的不知道如何在传感器之间建立这种基本通信(它们都必须运行相同的代码)。如果可能的话,我会很感激关于如何正确设置它的正确方向,一个很好的起点,我应该能够自己完成其余的工作,谢谢!

0 投票
0 回答
166 浏览

javascript - 使用 Node.js 在分布式系统中保证广播消息

我有一个用 Node.js 编写的分布式应用程序,并希望将消息广播到所有节点。我需要的是:

  • 保证交货(至少一次)
  • 横向可扩展性
  • 完全去中心化的架构

到目前为止,我已经了解了 Node.js 的各种模块,例如 Scuttlebutt、node-gossip 及其所有变体。但它们都未能保证交付。

我还查看了 Serf 和 Consul:虽然第一个在保证交付方面失败了,但第二个只有在至少 (n/2)+1 个节点可以访问时才有效,这对我的应用程序来说太弱了。

我还研究了各种消息队列、消息分发系统和协议,例如 RabbitMQ、nsq 和 MQTT。他们都因上述一件或多件事情而失败。

知道如何解决这个问题(不必自己写一个)吗?

PS:我知道这基本上是一个关于模块或工具建议的问题,但我不知道还能问哪里,而且我认为这个意图对于任何从事分布式应用程序的开发人员来说都是一个完全有效的意图。

0 投票
2 回答
169 浏览

ios - 我们运行 Sofia status profile xxxxxx reg 时的 Call-ID 是什么?

我正在尝试使用PJSIP制作一个 iOS 应用程序,当我运行以下命令时,我正在使用GOSSIP 包装器

要检查服务器上注册的设备,我会关注每个设备。我想知道什么是 Call-ID 参数,我是否可以在设备上获取它?如果是,那么如何?

Call-ID:mDWB.zJEvhcLSOnZcKTuTFbrduzO--0a
用户:xxxxxxxxxxxxxxxxx
联系人:“”
代理:Dringgg-Android
状态:已注册(UDP)(未知) EXP(2016-02-23 16:11:23) EXPSECS(95)
Ping-状态:可达 Ping-时间:0.00 主机:srv1 IP:xxxxxxxxxxxxx 端口:8080 Auth-User:
xxxxxxx Auth-Realm:xxxxxxxxx MWI-Account:xxxxxxxxxxxxxxxxx

0 投票
1 回答
756 浏览

scala - 跨 Akka 集群同步数据的简单方法?

我有一些运行时数据,希望存在于我的 Akka 集群中每个节点上的指定参与者上,这些数据可以通过内部事件或对单个节点的 API 调用进行更新。我可以将此数据存储在共享数据库中以使其永久化,但我宁愿将其存储在内存中以提高速度,因为它不需要持久化。Akka Cluster Singleton、Distributed Pub Sub 和可能的其他内置模块使用 gossip 协议来保持分布式状态同步。

是否有现成的方法来在我的集群中采用我自己的参与者的数据同步?

我曾考虑将更改发布到 Distributed Pub Sub,但似乎这对丢弃的消息没有弹性。如果我将它存储在一个集群单例中,如果该节点出现故障,它将无法生存。如果整个集群出现故障,我不需要持久性,但如果单个节点发生故障,我确实需要弹性。

0 投票
1 回答
61 浏览

consul - 安全地遥控几个领事栈的概念

介绍

我正在运行多个,我称它们为 consul-stacks。它们总是看起来像: - 1 个领事服务器 - 9 个领事节点

每个节点都提供一些服务——只是一个经典的网络堆栈等等(这个问题不感兴趣)。Gossip 用于保护服务器被任意节点查询并泄露数据。几个 consul-template / tiller “观察者”正在等待动态配置节点/服务的 KV 变化

目标

假设我有 10 个这些堆栈(数字是动态的),我想构建一个 Web 应用程序,使用特定逻辑控制每个堆栈的 consul-KV

我现在拥有的

我创建了一个 thor+diplomat 工具来包装创建特定 KV 条目所需的逻辑。我在堆栈中的“控制器”容器上运行它时实现了它,与 localhost:8500 交谈 - 然后使用 gossip 进行身份验证并写入服务器。

问题

我现在将使用什么概念将此工具移动到远程(不是 consul-stack 的一部分)服务器,同时能够写入每个 consul-stacks KV。

当然,我可以使用外交官连接到 stack1.tld:8500 - 但这意味着我打开 HTTP 端口并需要以某种方式保护它(不受八卦保护?不知何故,只有 RPC?)并且还要保护 /ui。

  • 有没有更好的方法连接到每个堆栈?
  • 在 8500 之前使用具有基本身份验证的 nginx 代理服务器来保护访问?
  • 也在这个端口上使用 ssl-interception 并且仍然使用 8500 或者更确切地说使用配置的 https 端口(在 consul HTTPS API 中)
  • 使用 ACL 保护访问?(很多设置允许堆栈成员访问 - 需要 TLS 吗?)

一般来说,如果不使用 TLS(客户端需要做很多工作来设置),哪些概念适合这个需要与堆栈服务器通信以安全地写入其 KV。

如果我错过了什么,很高兴添加您要求的任何内容

0 投票
1 回答
1331 浏览

java - 了解 Gossip 协议

我正在阅读 akka 集群文档,现在我在Gossip部分。我不明白以下声明:

集群成员资格使用 Gossip 协议进行通信,其中集群的当前状态通过集群随机传播,优先考虑尚未看到最新版本的成员

很难想象。我有以下问题:

问题:如果最新的变化仍然是八卦,节点如何知道哪些成员没有看到最新的变化。

我的意思是,如果一个节点收到通知,它如何决定将它发送到哪里?显然,它不应该将其发回,因为发件人已经看到了最新的更改。但是其他成员呢?他们中的一些人可能已经看到了状态,除了查询所有这些成员之外,没有其他方法可以弄清楚。但是如果我们查询一个节点,它会在查询过程中回复“不,我还没有看到它”,有人可能会向它发送状态......