根据我的理解,领导者向追随者发送 AppendEntries RPC,如果大多数追随者返回成功,领导者将提交此条目。它会通过将其应用到自己的状态机来提交此条目,并且还会返回给客户端,让客户端知道该命令已成功。
然而,目前,追随者还不知道这一承诺。它将在下一个 AppendEntries(或心跳)RPC 调用中通知关注者。
在最简单的情况下,如果leader在提交之后、下一个AppendEntries之前崩溃,raft将使用“只有最新的follower才能获胜”策略来确保下一个leader必须包含这个日志条目(尽管没有提交),新的领导者将提交该条目并将 AppendEntries 发送给其他追随者。这样,日志条目就可以安全保存。
然而,请考虑以下复杂的场景(摘自博士论文“共识:理论与实践的桥梁”第 23 页)。
此时,第 2 项的日志条目已复制到大多数服务器上,但尚未提交。如果 S1 如 (d1) 那样崩溃,S5 可以当选为领导者(通过 S2、S3 和 S4 的投票)并用第 3 期中自己的条目覆盖该条目。
如果此时在服务器 S1 中已提交,但在其他服务器中尚未提交怎么办?如果 S1 然后像 (d1) 那样崩溃,该日志条目将被 S5 覆盖吗?
根据我的理解,提交的条目(应用于状态机并可能通知客户端结果)永远不会被覆盖?
我是否误解了筏协议的任何内容?
谢谢。
Elasticsearch 是一个分布式系统。根据 CAP 定理,它可以满足 3 个属性中的任意 2 个。Elasticsearch 中哪一个受到了威胁?
我有一个分布式系统(单个数据中心中的多个节点),我想要具有以下属性:
什么算法(最适合论文的链接)适合这个?
(我假设一些答案将包括P2P算法,但我过去遇到的大部分答案都更像是分布式哈希表,其中节点进入并接管键空间的某些部分,等等.我也认识到使用简单UDP消息进行多播可能是合适的,但现有的工作有助于使消息传递可靠吗?)
我正在创建一个分析PDF,DOC和DOCX文件的程序.这些文件存储在HDFS中.
当我启动MapReduce作业时,我希望map函数将Filename作为键,将Binary Contents作为值.然后我想创建一个流阅读器,我可以将其传递给PDF解析器库.如何实现Map Phase的键/值对是filename/filecontents?
我正在使用Hadoop 0.20.2
这是开始工作的旧代码:
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(PdfReader.class);
conf.setJobName("pdfreader");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(Map.class);
conf.setReducerClass(Reduce.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
Run Code Online (Sandbox Code Playgroud)
我知道还有其他inputformat类型.但有没有一个完全符合我的要求?我觉得文档很模糊.如果有一个可用,那么Map函数输入类型应该如何?
提前致谢!
我正在构建一个具有非结构化对等覆盖的分布式系统.该系统中可能有数千个节点.节点可以动态加入系统(如torrent客户端).在系统中,每个节点想要估计系统中的节点数(猜测近似值).
我目前正在使用集中式服务器来计算节点数.每个节点都与此服务器通信.这非常低效并且违反了分布式行为.
有没有办法在不使用集中式服务器的情况下以分布式方式执行此操作?
我有一个奇怪的问题。
什么是hadoop的一些分布式和可扩展的替代方案。我正在寻找像HDFS这样的分布式文件系统,该系统可以用作廉价而有效的存储,并希望在其之上具有数据处理引擎(批处理/实时)。我知道Spark可以是一个很好的选择。但是我想将此系统用作分布式,容错和可扩展的文件存档。是否有合适的解决方案?欢迎提出建议。谢谢 :)
我刚刚开始阅读有关Zookeeper的文章。我对数据复制和数据模块感到困惑。
ZooKeeper合奏将包含多个节点(机器),其中一个领导者,其他作为跟随者。
数据模块是一个树形结构,每个节点均为znode。
这两个结构如何协同工作?znode和node指的是同一件事吗?
我试图了解它,因为ZooKeeper集成中的每个节点都将具有包含znode的相同数据模块。因此,znode实际上是节点上的数据。那正确吗?
据我了解,DynamoDB尝试将具有相同分区键的项目放入同一分区。我的问题是,当分区已满并分成两个不同的分区时,哈希如何工作?
例如,一个表具有一个分区键A,并且DynamoDB将所有带有分区键的项目A放入同一个分区P,然后P已满,dynamo将拆分P为P1和P2,现在客户端将插入I一个带有分区键的新项目,Adynamo如何确定要插入哪个分区(即P1和P2)I?
database distributed-system amazon-web-services nosql amazon-dynamodb
我正在构建一个基于 Node.JS 的系统,用于连接 MetaTrader 并处理所有操作,例如链接帐户、打开、关闭交易订单...
但是我仍然没有找到如何在 Nodejs 中连接 MetaTrader 的方法。你能给我一个解决方案或包的例子,可以帮助我做到这一点吗?谢谢!
distributed-system algorithmic-trading node.js metatrader4 metatrader5
共识涉及所有机器就价值达成协议。原子广播还说,发出味精的过程应全部或不被同意。
那么区别是什么呢?
consensus ×2
hadoop ×2
p2p ×2
cap-theorem ×1
database ×1
distributed ×1
hdfs ×1
java ×1
mapreduce ×1
metatrader4 ×1
metatrader5 ×1
node.js ×1
nosql ×1
raft ×1
storage ×1
znodes ×1