Hyperledger fabric整理

1、版本统一很重要;

docker-image的版本一致性要求比较高,如果不一致最终导致各种问题;如果你不是按照流程从头开始,那就重新拉取下最新镜像,clone一下最新fabric吧。

2、通过docker的volumes进行数据固化,再次启动数据不会丢失;

既然是数据存储就一定有路径,因为docker的优势,可以通过volumes做docker内外的文件映射,而且不会随着docker的关闭而删除,所以数据固化还是很方便的:
orderer数据
volumes:
    - ./chainData/orderer/:/var/hyperledger/production/
peer数据
volumes:
    - ./chainData/peer/peer1org2:/var/hyperledger/production/

3、文件存储的使用?

目前存储文件是非常耗费资源的,建议将文件生成二进制流然后使用hash进行计算,只存储hash的值;或者存储文件路径;
方式仍待议

4、链码数据对象设计

fabric提供一个简单查询,提供一个json作为查询参数:
stub.GetQueryResult(queryString)
queryString:"{\"selector\":{\"docType\":\"user_info\",\"key1\":\"tmpValue\"}}",即查询docType为user_info且key1为tmpValue的数据;当然可以增加更多key+value条件;当然docType也是我们自己定义的一个名字;
所以每个对象都设计一个docType字段,其实用tableName做key名称更好理解点,相当于设计数据库的表名,每次查询的时候先根据docType查询哪个表的数据,然后再根据其他条件进行进一步筛选;
对象第一个字段当作表名;

5、GetHistoryForKey获取key的历史至今value值,getBlocks是获取channel上的区块的信息;

对于GetHistoryForKey因为获取到的是每个交易后的值,但是不会返回什么交易导致改变的,所以建议在对象设计的时候多设计一个remark,记录每次交易操作;

6、joinchannel做节点之间的数据隔离

如果某个组织的peer节点未加入到channel中,则这个节点不会同步这个节点上的数据。

7、多个order创建channel方式

指定多个order即可

8、表字段增加备注字段,保存每次操作的信息 与getHistory结合使用

方便查看某个数据的变化原因

9、多节点背书问题

安装链码时指定,在逻辑成addpeer时,每个peer相当于一个背书,这里的背书只是做验证和预运算

10、solo 跟 kafka区别

solo 是单进程的,必然会有单点问题,处理性能上远远不够;
kafka 在大数据领域应用很广泛,所以处理数据的能力不容小觑,而且没有单点问题;

11、多个channel

新增channel,需要用工具生成新的tx,但管理员证书不需要再新增

sdk -
12、ca服务器的用途

ca-server在启动的时候有配置admin:adminpw,详见yaml配置文件;
ca-server提供校验和获取证书功能,当然注册登记也有,但是不常用。
sdk中用户上下文setUserContext设置的用户需要有证书文件,一般有两种方式获取:1)本地文件方式,即一开始生成的管理员证书;2)本地不保存,用的时候从ca-server获取,caClient.enrollment即可获得证书文件

13、通过数据库进行对象实例化保存

对象实例化时用到的证书等配置可以用数据库保存起来

14、需要用admin账户进行节点通讯

15、链码中GO 变量名要大写

16、链码安装后找不到方法或者日志未打印抑或逻辑未改变问题

单单使用 删除通过docker ps -aq 查询出来的镜像是无法清理干净的,需要将docker images 查询出来的临时镜像也删除掉,再重新安装;

你可能感兴趣的:(Hyperledger fabric整理)