Hyperledger-Fabric环境搭建笔记

Roy

环境搭建

前提需要电脑中存在gitdockerdocker-compose命令以及有golang开发环境。

首先创建目录存放Fabric代码,注意路径和权限,在启动服务时候会向其中写一些文件,最开始我就是没注意到这点报错了。

sudo mkdir /opt/gopath/src/github.com/hyperledger/

进入刚才创建的目录后拉取代码:

cd /opt/gopath/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git

当前版本是1.1。

Raft算法

Roy

相比与Paxos算法,Raft更容易理解。首先推荐个动画视频 (注意这个动画真的基于raft算法,所以每次选举出的节点都是不同的,我观看某些章节时候甚至出现过3次选举过程),然后是raft论文中文版raft主页,基本结合这3个网站就能理解raft了。

在Raft算法中,有3种角色:

  • Leader
  • Follower
  • Candidate

大体分为2个过程:

  1. 选举(Leader Election)
  2. 日志同步(Log Replication)

GO语言学习笔记-互斥锁

Roy

原文,互斥锁(Mutex)也是go并发系列最后一篇文章。

临界区

在说互斥锁前,理解并发编程中的临界区(Critical section)是十分重要的。当一个程序并发执行时,共享资源不应该在同一时刻被多个goroutine修改。这段修改共享资源的代码就叫做临界区。举个例子,我们有一个代码片段用于修改变量x自增1。

x = x+1

如果上面的代码在唯一的goroutine中执行,不会有任何问题。

GO语言学习笔记-缓冲区Channels和线程池

Roy

原文,这里为了方便理解我把worker pools翻译成线程池。

什么是缓冲区Channel

之前讨论的所有channel都是不带缓冲区的,因此读取和写入都会被阻塞。创建一个带缓冲区的channel也是可能的,这种channel只有在缓冲区满后再写入或者读取一个空的channel时才会被阻塞。

创建一个带缓冲区的channel需要一个额外的参数容量来表明缓冲区大小:

ch := make(chan type, capacity)  

上面代码中的 capacity 需要大于0,如果等于0的话则是之前学习的无缓冲区channel。