摘要: 跳跃链表的概念 跳跃链表是有序链表的一个变种,在一个有序链表中,查找一个链表中的元素需要进行一次遍历,时间复杂度为O(n),为了加快查找的过程,能够跳过某些元素呢?一个思路就是牺牲一定的空间换时间,对有序链表建立类似索引的结构加快查找过程,跳跃链表基本上就是通过维护一个多层次的链表,每一层链表中的元 阅读全文
posted @ 2020-06-23 10:43 内核思考 阅读(581) 评论(0) 推荐(0) 编辑
摘要: Raft共识算法在分布式系统中是常用的共识算法之一,论文原文In Search of an Understandable Consensus Algorithm ,作者在论文中指出Poxas共识算法的两大问题,其一是难懂,其二是应用到实际系统存在困难。针对Paxos存在的问题,作者的目的是提出一个易 阅读全文
posted @ 2020-06-22 11:10 内核思考 阅读(930) 评论(0) 推荐(0) 编辑
摘要: 一、Fabric网络组织 Fabric网络组织按如下结构组成:Fabric网络-->Channel通道-->组织(成员)-->节点。即整个网络由数个通道组成,每个通道都由多个组织构成,而每个组织内部由数个节点组成(可能由功能或其他划分方式分为多个节点)。如下图所示: 二、主节点(leader pee 阅读全文
posted @ 2020-06-18 15:57 内核思考 阅读(891) 评论(0) 推荐(0) 编辑
摘要: 一个新节点通过已知的节点加入到网络中,此时,它所知的网络节点信息是非常有限的,需要通过节点发现获知更多的节点,建立起足够的连接。另外,当一个新节点加入到网络时,原有网络节点也需要通过节点发现感知到新节点的加入。 分布在各地的网络节点总是会有上线离线的变化,有这就需要Fabric网络必须动态维护一个节 阅读全文
posted @ 2020-06-13 22:05 内核思考 阅读(1095) 评论(0) 推荐(0) 编辑
摘要: 本档前部分翻译自以太坊定义的节点发现协议(版本4),后半部分给出了源码实现的大致流程,以帮助理解。 以太坊节点信息的存储采用的是Kademlia分布式哈希表。理解节点发现协议主要是理解分布式哈希表的原理,再加上定义的节点间通信的报文格式,节点ID的定义,距离的计算,加在一起就是以太坊的节点发现协议了 阅读全文
posted @ 2020-06-12 09:25 内核思考 阅读(1716) 评论(1) 推荐(0) 编辑
摘要: 拜占庭将军问题 我们已知的共识算法,Paxos、Raft解决的都是非拜占庭问题,也就是可以容忍节点故障,消息丢失、延时、乱序等,但节点不能有恶意节点。但如何在有恶意节点存在的情况下达成共识呢?BFT共识算法就是解决这一问题的。即不但能容忍节点故障,还能容忍一定的恶意节点或者说拜占庭节点的存在。我们下 阅读全文
posted @ 2020-06-10 09:33 内核思考 阅读(6845) 评论(7) 推荐(4) 编辑
摘要: 对异步的学习,我们先从Future开始,学习异步的实现原理。等理解了异步是怎么实现的后,再学习Rust异步编程涉及的2个库(futures、tokio)的时候就容易理解多了。 Future rust中Future的定义如下,一个Future可以理解为一段供将来调度执行的代码。我们为什么需要异步呢,异 阅读全文
posted @ 2020-06-09 14:43 内核思考 阅读(5999) 评论(0) 推荐(6) 编辑
摘要: 一、关联类型(associated types) 我们阅读Rust程序的时候,有时候会出现如下的代码: trait Iterator { type Item; fn next(&mut self) -> Option<Self::Item>; } 下面是上面代码的注解:Iterator trait 阅读全文
posted @ 2020-06-08 09:53 内核思考 阅读(3153) 评论(0) 推荐(0) 编辑
摘要: 前言 堆是十分重要的数据结构,我们常用的优先队列就是基于堆实现的数据结构,堆排序也是基于堆实现的,所以,我们要理解堆的实现,之前自己根据堆的原理自己实现了堆,现在来分析一下STL中堆的实现代码,STL的堆实现相比自己实现的代码肯定要多很多,但原理是一样的,我们下面看一下。 堆的实现 STL中提供了堆 阅读全文
posted @ 2020-06-07 22:27 内核思考 阅读(476) 评论(0) 推荐(0) 编辑
摘要: 这里简单学习一下STL关联容器,主要是map、multimap、set、multiset以及unordered_map。前四个底层实现都是利用红黑树实现的,查找算法时间复杂度为$O(log(n))$,而unordered_map从名字上就知道是无序容器,其实现原理类似哈希表,查找算法时间复杂度$O( 阅读全文
posted @ 2020-06-06 10:05 内核思考 阅读(331) 评论(0) 推荐(0) 编辑