[关闭]
@w460461339 2018-07-24T11:02:12.000000Z 字数 3615 阅读 919

情景模拟-共识算法(任务分配)

顺丰工作


0、题目描述

image_1cipf1gla1q11j8ftie1194t3i9.png-777.3kB
image_1cipf1p8h1o4t1v7r1mgiau3mu9m.png-509kB

1、详细的PBFT算法描述

真*详细(入门):https://zhuanlan.zhihu.com/p/35847127

真真*详细(细节):https://www.jianshu.com/p/fb5edf031afd

github上代码:https://github.com/luckydonald/pbft

2、题目要求

3、问题

1、是否需要考虑作恶节点?

需要:PBFT
不需要:Paxos和Raft

2、压测需要自己做吗?是否有推荐的工具。
貌似要自己做

3、公网和内网的差距是有无恶意节点还是是否需要对节点进行验证(即是否需要对节点的加入做验证)

4、我们需要考虑信息的加密和验证码?
需要

5、需要实现视图更换嘛?
应该也是要的

4、2018年7月20日~2018年7月23日考虑问题

1、模拟客户端,主节点,从节点,节点之间如何通信?(python多个进程跨机通信)

2、数据的存储用哪种数据库?(比如提提到的LevelDB)

3、PBFT基本原理熟悉,知道从节点的三个过程(pre-prepare,prepare和commit),以及视图转换(主节点转换),宕机节点恢复时同数据(加分?),客户端宕机的问题解决?(算加分嘛)

5、安装配置

源码:
https://github.com/luckydonald/pbft

5.1 clone源码

上述地址其实包含了3个项目

如果只clone该地址的pbft项目,运行docker-compose时会报file找不到的错误。

所以需要将3个项目都clone下来。

而node_java项目clone后的名称是pbft-java,需要把它重命名为node_java,并放在和node_java同级文件夹下(就是替代原来的空的node_java).

phppgadmin-docker同理

5.2 mac端的docker安装

参考:
1、https://blog.csdn.net/memoryjdch/article/details/77933012
2、http://cizixs.com/2016/05/31/install-docker-dev-environment-on-mac
3、http://www.genxiaogu.com/docker-on-mac/

mac端是用dockertoolbox来进行docker的安装。

可以通过 env | grep -i docker 查看是否写入。

这个方式是只在每个终端内有用,换了终端需要重新开一遍。= -

5.3 安装项目所需要的docker环境

Dockerfile.txt3.1kB
将这份文件的.txt后缀去掉,并替换 ./pbft/extras/phppgadmin-docker 的同名文件

下面不用了看了啊,直接按照github上面的项目跑就行了~~

5.4 错误&解决方案

https://blog.csdn.net/xiojing825/article/details/79494408

  1. # Python node
  2. # node:
  3. # extends:
  4. # file: node.docker-compose.yml
  5. # service: node
  6. # volumes:
  7. # - /var/run/docker.sock:/var/run/docker.sock
  8. # environment:
  9. # NODE_DEBUGGER: "False"

的注释解开,并在最后加上几句话,变成:

  1. # Python node
  2. node:
  3. extends:
  4. file: node.docker-compose.yml
  5. service: node
  6. volumes:
  7. - /var/run/docker.sock:/var/run/docker.sock
  8. environment:
  9. NODE_DEBUGGER: "False"
  10. NODE_DEBUG: "False"
  11. # API_HOST: "http://192.168.0.42"
  12. API_HOST: ${API_HOST}

同时,将下面几句话注释掉:

  1. node:
  2. extends:
  3. file: code/node_java/docker-compose.yml
  4. service: node_java
  5. volumes:
  6. - /var/run/docker.sock:/var/run/docker.sock
  7. environment:
  8. NODE_DEBUGGER: "False"
  9. NODE_DEBUG: "False"
  10. # API_HOST: "http://192.168.0.42"
  11. API_HOST: ${API_HOST}

不这么做的话,安装的docker环境会是java环境,而不是python环境了。

  1. RUN echo "deb http://packages.dotdeb.org squeeze all" >> /etc/apt/sources.list.d/dotdeb.org.list && \
  2. echo "deb-src http://packages.dotdeb.org squeeze all" >> /etc/apt/sources.list.d/dotdeb.org.list && \
  3. wget -O- http://www.dotdeb.org/dotdeb.gpg | apt-key add -

原因是最后一个apt-key add -需要用sudo执行,而这个装的debian没有sudo,因此需要在这一话之前加上:

  1. # install sudo and gnupg by wzf
  2. RUN apt-get update && \
  3. apt-get -y install sudo
  4. RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
  1. RUN apt-get update && apt-get install -my wget gnupg

最终完整的代码为:

  1. # install sudo and gnupg by wzf
  2. RUN apt-get update && \
  3. apt-get -y install sudo
  4. RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
  5. RUN apt-get update && apt-get install -my wget gnupg
  6. # Added dotdeb to apt
  7. RUN echo "deb http://packages.dotdeb.org squeeze all" >> /etc/apt/sources.list.d/dotdeb.org.list && \
  8. echo "deb-src http://packages.dotdeb.org squeeze all" >> /etc/apt/sources.list.d/dotdeb.org.list && \
  9. wget -O- http://www.dotdeb.org/dotdeb.gpg | sudo apt-key add -
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注