在Multi-Paxos算法中,从接受者的角度考虑此消息流:
接收:准备(N)
回复:承诺(N,null)
接收:接受!(N,V1)
回复:已接受(N,V1)
接收:接受!(N + 1,V2)
回复:?
根据协议,接受者在这种情况下的反应应该是什么?它应该以Accepted(N + 1,V2)回复,还是应该忽略第二次接受!?
我相信这种情况可能发生在Multi-Paxos中,当第二个提议者上线并认为他是(并且始终是)领导者时,因此他发送他的接受而没有准备.或者,如果他的准备工作根本没有达到接受者.如果这种情况可能不会发生,你能解释一下原因吗?
让我假装我拥有10,000台机器的网络.我想尽可能快地使用所有这些机器来抓取网页.所有页面只能下载一次.此外,必须没有单点故障,我们必须尽量减少机器之间所需的通信次数.你会怎么做到这一点?
有没有什么比使用一致性散列更有效地在所有机器上分配负载并最小化它们之间的通信?
分布式计算和云计算之间有什么区别?
cloud computer-science terminology definition distributed-computing
我正在尝试了解分布式哈希表(DHT)范例,因为它适用于P2P或完全分布式计算架构.从理论的角度来看,一旦集群建立起来,它就会对如何设计群集数据和分配工作有所了解.
对我来说最有趣的部分是架构从不需要某种集中控制器或协调器(没有单点故障).但是,我仍然在努力理解概念的实际执行,特别是集群是如何形成的.如果它是一个完全分布式系统,节点如何知道如何"加入"已经建立的集群?
在一个简单的例子中:
那么,如果没有任何集中式服务器充当信标,或者提供将新客户端引入集群的方法,新客户端如何"连接"?
我是matlab中使用分布式和分布式数组的新手.我生产的并行代码有效,但比串行版慢得多,我不明白为什么.下面的代码示例从体积数据计算粗糙矩阵的特征值.
串口版:
S = size(D);
Dsmt=imgaussian(D,2,20);
[fx, fy, fz] = gradient(Dsmt);
DHess = zeros([3 3 S(1) S(2) S(3)]);
[DHess(1,1,:,:,:), DHess(1,2,:,:,:), DHess(1,3,:,:,:)] = gradient(fx);
[DHess(2,1,:,:,:), DHess(2,2,:,:,:), DHess(2,3,:,:,:)] = gradient(fy);
[DHess(3,1,:,:,:), DHess(3,2,:,:,:), DHess(3,3,:,:,:)] = gradient(fz);
d = zeros([3 S(1) S(2) S(3)]);
for i = 1 : S(1)
fprintf('Slice %d out of %d\n', i, S(1));
for ii = 1 : S(2)
for iii = 1 : S(3)
d(:,i,ii,iii) = eig(squeeze(DHess(:,:,i,ii,iii)));
end
end
end
Run Code Online (Sandbox Code Playgroud)
并行版本:
S = size(D);
Dsmt=imgaussian(D,2,20);
[fx, fy, fz] = gradient(Dsmt); …Run Code Online (Sandbox Code Playgroud) parallel-processing matlab distributed distributed-computing
我理解在标量逻辑时钟方面对向量时钟的需求未能提供足够的信息来判断密钥值存储更新中是否存在更新冲突.
但是我不确定矢量时钟仍然没有解决什么问题,然后通过更庞大的矩阵时钟解决了?
我正在测试majordomo经纪人的吞吐量.随github上的majordomo代码附带的test_client.c发送同步请求.我想测试majordomo代理可以实现的最大吞吐量.规范(http://rfc.zeromq.org/spec:7)表示它每秒可以切换多达一百万条消息.
首先,我更改了客户端代码以异步发送100k请求.即使在所有套接字上的HWM设置得足够高并且将TCP缓冲区增加到4 MB之后,我也会观察到三个并行运行的客户端丢包.
所以我改变了客户端一次发送10k个请求,然后为它收到的每个回复发送两个请求.我选择10k是因为这允许我并行运行多达十个客户端(每个发送100k消息)而不会丢失任何数据包.这是客户端代码:
#include "../include/mdp.h"
#include <time.h>
int main (int argc, char *argv [])
{
int verbose = (argc > 1 && streq (argv [1], "-v"));
mdp_client_t *session = mdp_client_new (argv[1], verbose);
int count1, count2;
struct timeval start,end;
gettimeofday(&start, NULL);
for (count1 = 0; count1 < 10000; count1++) {
zmsg_t *request = zmsg_new ();
zmsg_pushstr (request, "Hello world");
mdp_client_send (session, "echo", &request);
}
for (count1 = 0; count1 < 45000; count1++) {
zmsg_t *reply = mdp_client_recv (session,NULL,NULL); …Run Code Online (Sandbox Code Playgroud) 假设我有一个包含(Int,Int)元组的RDD.我希望把它变成一个Vector,其中元组中的第一个Int是索引,第二个是值.
任何想法我该怎么做?
我更新了我的问题并添加了我的解决方案以澄清:我的RDD已经被密钥减少了,并且密钥的数量是已知的.我想要一个向量来更新单个累加器而不是多个累加器.
我的最终解决方案是:
reducedStream.foreachRDD(rdd => rdd.collect({case (x: Int,y: Int) => {
val v = Array(0,0,0,0)
v(x) = y
accumulator += new Vector(v)
}}))
Run Code Online (Sandbox Code Playgroud)
Vector在文档中使用累加器示例.
我想知道在跨数据中心运行Zookeeper时可用的现有方法吗?
我在做一些研究后发现的一种方法是让观察者.这种方法是在主数据中心只有一个有领导者和追随者的集合.并在备份数据中心拥有观察员.当主数据中心崩溃时,我们选择其他数据中心作为新的主数据中心,并手动将观察者转换为领导者/跟随者.
我想提出更好的方法来实现同样的目标.
谢谢
fault-tolerance high-availability distributed-computing apache-zookeeper
最近有关于(专利)哈希图一致性算法的谣言很多,该算法声称具有非常好的复杂性度量.见白皮书:
https://swirlds.com/downloads/SWIRLDS-TR-2016-01.pdf
这个应用程序的核心部分是所谓的"关于八卦的八卦",它使用八卦协议通过网络传播八卦历史本身.至少,如果我没有弄错的话.这构建了一个称为哈希图的数据结构.
除此之外,然后运行拜占庭故障容忍算法,但这个问题无关紧要,这是:
哈希图算法真的是第一个使用这种数据结构的人,闲聊八卦,还是先前/其他方法?但是找不到任何东西.
编辑:我在找到正确的标签时遇到问题.也许有人可以详细说明这个?
architecture ×2
distributed ×2
algorithm ×1
apache-spark ×1
clock ×1
cloud ×1
consensus ×1
definition ×1
gossip ×1
matlab ×1
p2p ×1
paxos ×1
rdd ×1
scala ×1
sockets ×1
terminology ×1
theory ×1
vector ×1
vector-clock ×1
web-crawler ×1
zeromq ×1