@w460461339
2018-07-24T11:02:12.000000Z
字数 3615
阅读 914
顺丰工作
真*详细(入门):https://zhuanlan.zhihu.com/p/35847127
真真*详细(细节):https://www.jianshu.com/p/fb5edf031afd
github上代码:https://github.com/luckydonald/pbft
1)系统至少7个节点,每个节点在读写数据时保持一致。
2)每个节点能够提供读服务,也能提供写服务
3)使用Paxos算法或者其变体。
4)在公网上而不是内网上。
5)性能至少满足每秒1000以上的读写请求。
6)能够允许至少1/3的节点宕机。
1、是否需要考虑作恶节点?
需要:PBFT
不需要:Paxos和Raft
2、压测需要自己做吗?是否有推荐的工具。
貌似要自己做
3、公网和内网的差距是有无恶意节点还是是否需要对节点进行验证(即是否需要对节点的加入做验证)
4、我们需要考虑信息的加密和验证码?
需要
5、需要实现视图更换嘛?
应该也是要的
1、模拟客户端,主节点,从节点,节点之间如何通信?(python多个进程跨机通信)
2、数据的存储用哪种数据库?(比如提提到的LevelDB)
3、PBFT基本原理熟悉,知道从节点的三个过程(pre-prepare,prepare和commit),以及视图转换(主节点转换),宕机节点恢复时同数据(加分?),客户端宕机的问题解决?(算加分嘛)
源码:
https://github.com/luckydonald/pbft
上述地址其实包含了3个项目
1)一个就是该地址下的pbft项目,
2)另一个是 code/node_java项目。
3)最后一个是 extras/phppgadmin-docker 项目
如果只clone该地址的pbft项目,运行docker-compose时会报file找不到的错误。
所以需要将3个项目都clone下来。
而node_java项目clone后的名称是pbft-java,需要把它重命名为node_java,并放在和node_java同级文件夹下(就是替代原来的空的node_java).
phppgadmin-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的安装。
1)在第一个地址中有dockertoolbox的安装包,下载下来安装就行了(我用的是最新的)。
2)安装完成后,执行: docker-machine ls,应该能够看见如下信息:
看不见的话按照第二个地址中的方法自己创建一个。
3)此时还和熟悉的docker环境不一样。上面其实是创建了一个docker的host,我们需要将这个host的信息写入全局,才能够使用docker images等client端的操作。执行:
eval $(docker-machine env default) # 最后一个是这个host的名字。
可以通过 env | grep -i docker 查看是否写入。
这个方式是只在每个终端内有用,换了终端需要重新开一遍。= -
将这份文件的.txt后缀去掉,并替换 ./pbft/extras/phppgadmin-docker 的同名文件
下面不用了看了啊,直接按照github上面的项目跑就行了~~
https://blog.csdn.net/xiojing825/article/details/79494408
# Python node
# node:
# extends:
# file: node.docker-compose.yml
# service: node
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
# environment:
# NODE_DEBUGGER: "False"
的注释解开,并在最后加上几句话,变成:
# Python node
node:
extends:
file: node.docker-compose.yml
service: node
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
NODE_DEBUGGER: "False"
NODE_DEBUG: "False"
# API_HOST: "http://192.168.0.42"
API_HOST: ${API_HOST}
同时,将下面几句话注释掉:
node:
extends:
file: code/node_java/docker-compose.yml
service: node_java
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
NODE_DEBUGGER: "False"
NODE_DEBUG: "False"
# API_HOST: "http://192.168.0.42"
API_HOST: ${API_HOST}
不这么做的话,安装的docker环境会是java环境,而不是python环境了。
2)安装过程中会出现很多的 read timeout, tsl handshake failed等等错误,都是因为GFW的问题…所以找个好一点VPN,或者多试几次就好了。
3)安装最后会跳出在安装postgres-browser出错,是这一行出错:
RUN echo "deb http://packages.dotdeb.org squeeze all" >> /etc/apt/sources.list.d/dotdeb.org.list && \
echo "deb-src http://packages.dotdeb.org squeeze all" >> /etc/apt/sources.list.d/dotdeb.org.list && \
wget -O- http://www.dotdeb.org/dotdeb.gpg | apt-key add -
原因是最后一个apt-key add -需要用sudo执行,而这个装的debian没有sudo,因此需要在这一话之前加上:
# install sudo and gnupg by wzf
RUN apt-get update && \
apt-get -y install sudo
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
RUN apt-get update && apt-get install -my wget gnupg
最终完整的代码为:
# install sudo and gnupg by wzf
RUN apt-get update && \
apt-get -y install sudo
RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
RUN apt-get update && apt-get install -my wget gnupg
# Added dotdeb to apt
RUN echo "deb http://packages.dotdeb.org squeeze all" >> /etc/apt/sources.list.d/dotdeb.org.list && \
echo "deb-src http://packages.dotdeb.org squeeze all" >> /etc/apt/sources.list.d/dotdeb.org.list && \
wget -O- http://www.dotdeb.org/dotdeb.gpg | sudo apt-key add -