归档中心v1.0.0_alpha版本发布,为大规模存储降成本、提效率

 引言 

随着区块链的运行,存储区块数据占用的文件会逐渐增长,尤其当系统面向大数据量存储时会占用大量的磁盘空间,随时间推移存储成本日渐高昂、索引查询效率逐渐降低,为此归档模块可以作为区块链系统PB级存储方案的一部分,起到降成本、提效率的作用。

为了减少冷数据(低频使用的旧的区块数据)的磁盘占用,长安链·归档中心v1.0.0_alpha版本提供了数据归档备份,归档数据查询,已归档链上数据文件清理的一整套解决方案,可以做到无侵入的对正在运行的链节点进行归档、清理、查询,将作为PB级存储方案归档中心的雏形。具体来说使用方法如下:

1. 用户使用CMC工具,发送归档命令.该指令从链上查询出区块,将该区块数据通过GRPC传送到归档中心(对应图1步骤1,2);

2. 用户使用扫描工具,该工具根据已经归档高度扫描区块文件,输出已经归档的文件的扫描信息(CSV文件),用户可根据CSV文件自行将已扫描文件删除,或转移到别的地方做备份(如图步骤5);

3. 使用sdk透明的查询(已归档/链上)区块/交易数据;

4. 用户可以通过CMC工具在归档中心查询已经归档数据(如步骤3),也可以通过http/grpc接口查询(如步骤4)。

图1 归档中心整体流程

 归档区块的逻辑 

•校验区块哈希及连续性。比较待归档区块的块高度和归档中心已经归档的高度,如果该区块与已归档的区块连不上则报错;否则,检查该区块是否已经归档过,如该区块已经归档,则校验该区块hash是否和已归档的hash一致,如果一致则跳过,若不一致,则报错;若该区块尚未归档,则校验该区块hash是否正确,校验该区块指向的前一个区块hash是否正确,若正确则写入该区块数据,否则报错。

图2 归档区块逻辑

 归档中心查询数据的逻辑 

•根据查询条件,首先获取数据存储的索引信息。根据索引信息中的高度和归档中心已压缩数据的高度做比较,若低于压缩高度,说明已压缩,检查是否解压过;若未解压,则解压,然后读取数据即可;若大于压缩高度,则直接从文件中读取数据即可。

图3 归档中心查询数据逻辑

 扫描工具的逻辑 

扫描数据的逻辑

•根据配置的已经归档高度,调用归档中心的查询区块接口,输出已归档高度下的所有的配置区块块高;

•扫描区块链节点上存储区块的文件路径,根据文件名来确定起始区块高度,终止区块高度,输出文件信息列表;

•遍历文件信息列表,确定是否含有创世区块(块高为0),或配置区块,输出该文件的信息到CSV文件中(文件命名格式为stub[year][month][day][hour][minute][second].csv),该文件内容如下图4:

图4 扫描工具扫描输出csv文件示意图

–第1列为扫描的区块文件名;

–第2,3列分别为文件中的起始、结束块高;

–第4列为是否可以清理(如果含有配置块或创世块为“n”代表不可清理,其他为“y”代表可以清理);

–第5列为文件中出现的配置区块的块高,用;进行分割。

清理数据的逻辑

扫描工具也提供了根据扫描出的结果直接删除文件的功能,工具会根据上文生成的csv(需要在配置中配置一下)来进行清理所有第4列为“y”的文件数据。

图5 扫描工具运行逻辑

图6 扫描工具根据CSV删除文件后输出存根结果

 权限控制 

归档中心在数据的归档、查询、归档中心链数据压缩和归档中心tls证书更新上相应的都做了权限的控制,具体来说分为两类:

- 首先是数据的归档和数据的查询的处理,基于ip白名单和tls分别做了调用接口的机器地址和调用接口的身份的认证;

- 其次是对归档中心服务已归档数据的压缩和归档中心tls的证书更新基于http的token做了验证。

图7 归档中心权限的控制

 总结 

通过提供CMC归档工具,归档中心服务解决了链上数据转移的问题;通过提供sdk解决了交易/区块数据(链上/已归档的)透明查询的问题;通过提供扫描工具解决了已归档数据的扫描清理的问题;归档中心v1.0.0版本初步提供了一整套无侵入的数据备份清理查询方案,适用于正在运行已经累计了很多数据的链节点。后续版本我们会将数据的清理功能集成到CMC工具箱,提供从归档中心恢复链上区块数据的能力,欢迎大家试用、反馈问题。

猜你喜欢

转载自blog.csdn.net/weixin_55760491/article/details/128923436