解读Raft(三 安全性)】的更多相关文章

最近工作中讨论到了Raft协议相关的一些问题,正好之前读过多次Raft协议的那paper,所以趁着讨论做一次总结整理. 我会将Raft协议拆成四个部分去总结: 算法基础 选举和日志复制 安全性 节点变更 这是第一篇:<解读Raft(一 算法基础)> 什么是RAFT 分布式系统除了提升整个体统的性能外还有一个重要特征就是提高系统的可靠性. 提供可靠性可以理解为系统中一台或多台的机器故障不会使系统不可用(或者丢失数据). 保证系统可靠性的关键就是多副本(即数据需要有备份),一旦有多副本,那么久面临…
Java RMI学习与解读(三) 写在前面 接下来这篇就是最感兴趣的Attack RMI部分了. 前面也说过,RMI的通信过程会用到反序列化,那么针对于RMI的三个角色: Server/Regisrty/Client 都存在攻击方法,接下来解读与学习这一部分. 引用下su18师傅文章中RMI部分的RMI执行流程图,因为后面学习RMI的攻击方式还是需要对RMI的执行流程很清楚才可以 Attack RMI 攻击Server端 0x01 恶意传参 其实这个思路简单点说,就是在远程接口(RemoteIn…
前言 之前的两篇文章更多的是在描述Raft算法的正常流程,没有过多的去讨论异常场景. 而实际在分布式系统中,我们更多的都是在应对网络不可用.机器故障等异常场景,所以本篇来讨论一下Raft协议的安全性,即在异常场景下是否会导致数据丢失.数据不一致等情况. 选举限制 在Raft协议中,所有的日志条目都只会从Leader节点往Follower节点写入,且Leader节点上的日志只会增加,绝对不会删除或者覆盖. 这意味着Leader节点必须包含所有已经提交的日志,即能被选举为Leader的节点一定需要包…
分布式系统中主要的问题就是如何保持节点状态的一致性,不论发生任何failure,只要集群中大部分的节点可以正常工作,则这些节点具有相同的状态,保持一致,在client看来相当于一台机器. 一致性问题本质就是replicated state machines,即所有结点都从同一个state出发,都经过同样的一些操作序列(log),最后到达同样的state.其中保证各个节点执行相同的操作序列就是raft算法所要实现的.在raft算法中有一个Leader的角色,client与之进行交互,并且Leade…
这篇就讲到了跟请求相关的类了 关于AFNetworking 3.0 源码解读 的文章篇幅都会很长,因为不仅仅要把代码进行详细的的解释,还会大概讲解和代码相关的知识点. 上半篇: URI编码的知识 关于什么叫URI编码和为什么要编码,请看我转载的这篇文章 url 编码(percentcode 百分号编码) 给定一个URL:http://www.imkevinyang.com/2009/08/%E8%AF%A6%E8%A7%A3javascript%E4%B8%AD%E7%9A%84url%E7%B…
三次握手所谓的"三次握手"即对每次发送的数据量是怎样跟踪进行协商使的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送.接收完毕后何时撤消联系,并建立虚连接. 一.七字真言解读三次握手 二.为什么需要三次握手? 主机建立连接为什么需要三次握手?为了防止已经是失效连接突然又重新回到了服务端而产生的错误."比如一个客户端发出一个连接请求报文虽然没有丢失,但是由于一些原因在在某个网络节点中长时间滞留,以至于在断开连接后才到达服务端.这本身就是一个已经失效的报文.但是服…
将成员变更纳入到算法中是Raft易于应用到实践中的关键,相对于Paxos,它给出了明确的变更过程(实践的基础,任何现实的系统中都会遇到因为硬件故障等原因引起的节点变更的操作). 显然,我们可以通过shutdown集群,然后变更配置后重启集群的方式达到成员变更的目的.但是这种操作会损失系统的可用性,同时会带来操作失误引起的风险.支持自动化配置,即配置可以在集群运行期间进行动态的变更(不影响可用性)显示是一个非常重要的特性. Raft成员变更机制 在成员变更时,因为无法做到在同一个时刻使所有的节点从…
目录 Node.JS API 初解读三 Node.JS API 初解读三 Version: NodeJs v6.2.0 一. DNS (Domain Name Server) [域名服务器] 1.简介 node 的 DNS 模块包含了二种类型的 函数, 一种是 利用底层操作系统来查询域名,而且不需要使用任何的网络通信.这种类型的只有一个函数(dns.lookup) 另外一种就是 连接到一个实际的DNS服务器进行名称解析. 这种类型的函数的 除了 (dns.lookup) 剩下的都是. 2.函数…
本篇讲解swift中通知的用法 前言 通知作为传递事件和数据的载体,在使用中是不受限制的.由于忘记移除某个通知的监听,会造成很多潜在的问题,这些问题在测试中是很难被发现的.但这不是我们这篇文章探讨的主题. 我曾见过,有的团队为了管理通知,开发了一个类似于NotificationManager的类,所有通知的添加移除都通过这个类进行管理,通过打印通知数组就能很清楚的看到添加了哪些通知,以及这些通知被绑定在那些对象之上,这是一个很好地思路. 发通知 swift中发通知的函数原型是这样的: open…
Leader election Raft采用心跳机制来触发Leader选举.Leader周期性的发送心跳(如果有正常的RPC的请求情况下可以不发心跳)包保持自己Leader的角色(避免集群中其他节点认为没有Leader而开始选举). Follower在收到Leader或者Candidate的RPC请求的情况下一直保持Follower状态.而当一段时间内(election timeout)没有收到请求则认为没有Leader节点而出发选举流程. 选举流程如下: Follower递增自己的任期并设置为…