BBVA QED项目集群模式使用指南
概述
BBVA QED是一个基于Merkle树的数据验证系统,它提供了强大的数据完整性验证功能。本文将重点介绍QED在集群模式下的使用方法,包括环境搭建、集群信息查询、事件添加、证明查询等核心操作。
环境准备
前置条件
在开始使用QED集群模式前,需要确保以下工具已安装:
- Docker:容器化运行环境
- Docker Compose:多容器应用编排工具
集群环境搭建
搭建QED集群环境非常简单,只需执行以下步骤:
$ git clone <项目仓库>
$ cd qed/deploy/docker
$ docker-compose -f cluster-mode.yml up -d
这个命令会启动一个由三个QED服务器节点组成的集群:
- qed_server_0:集群领导者(leader)
- qed_server_1和qed_server_2:集群跟随者(follower)
可以通过docker ps
命令查看运行中的服务。
集群操作指南
1. 查询集群信息
QED服务器提供了shard信息端点,可以查询集群的组成情况。我们可以使用curl命令查询:
$ curl -sS -H "Api-key:my-key" http://localhost:8800/info/shards | python -m json.tool
返回结果示例:
{
"nodeId": "server0",
"leaderId": "server0",
"uriScheme": "http",
"shards": {
"server0": {
"nodeId": "server0",
"httpAddr": "qed_server_0:8800"
},
"server1": {
"nodeId": "server1",
"httpAddr": "qed_server_1:8800"
},
"server2": {
"nodeId": "server2",
"httpAddr": "qed_server_2:8800"
}
}
}
集群信息通过Raft协议在服务器间共享。当新服务器加入集群、服务器离开集群或领导者变更时,这些信息会自动更新。
2. 添加事件
在QED集群中,只有领导者节点可以接受事件添加请求。QED客户端工具会自动发现集群拓扑结构并识别领导者节点。
添加事件的基本命令格式:
$ qed_client --endpoints <节点地址列表> add --event "事件内容"
示例:
$ qed_client --endpoints http://qed_server_0:8800,http://qed_server_1:8800,http://qed_server_2:8800 add --event "event 0"
实际上,由于客户端会自动发现集群拓扑,只需提供一个节点地址即可:
$ qed_client --endpoints http://qed_server_1:8800 add --event "event 1"
3. 查询成员证明
成员证明可以从集群中的任何节点查询,不需要专门访问领导者节点。
查询命令:
$ qed_client --endpoints http://qed_server_0:8800 membership --event "event 0"
返回结果包含多个重要字段:
- Exists:事件是否存在
- Hyper audit path:超树审计路径
- History audit path:历史树审计路径
- 各种版本信息
- KeyDigest:事件摘要
4. 集群容错测试
为了验证集群的容错能力,我们可以模拟领导者节点故障:
$ docker stop qed_server_0
停止领导者节点后,集群会自动进行领导者选举,剩余节点中的一个将成为新的领导者。此时可以重复之前的查询操作,验证集群是否仍然正常工作。
注意事项
-
使用Docker运行QED客户端时,可以设置别名简化命令:
$ alias qed_client='docker run -it --net=docker_default bbvalabs/qed:v1.0.0-rc2 qed client --log info'
-
完成集群模式测试后,记得清理环境:
$ docker-compose -f cluster-mode.yml down $ unalias qed_client
-
所有API请求都需要提供正确的Api-key头部信息。
总结
BBVA QED的集群模式提供了高可用性和数据冗余保障。通过本文介绍的操作,您可以轻松搭建QED集群、添加事件数据、查询成员证明,以及验证集群的容错能力。QED的自动发现和领导者选举机制使得集群管理变得非常简单,而数据一致性和完整性则由底层的Merkle树和Raft协议保证。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考