概述
我最近发现需要在数据处理系统中进行检查点检查,该系统要求任何数据事件都不会丢失,并且任何事件都不能被处理和无序流式传输。 我想要一种在生产中实时自动检测这一点的方法。
有几种方法可以做到这一点,但由于我们的数据事件已经附加了一个签名(一个 SHA1 散列),我决定做检查点的一个有用的方法基本上是保留一个散列的散列。 可以使用来做到这一点,其中保留了每个数据元素的散列链,并且当出现检查点时,会按顺序获取所有这些散列的散列。
此模型的一个缺点是,如果下游系统检测到哈希不匹配(由于消息丢失或消息无序),则必须迭代完整列表以检测问题所在。
一个优雅的替代方案是哈希树,又名默克尔树,以其发明者拉尔夫默克尔命名。
默克尔树
Merkle 树通常被实现为二叉树,其中每个非叶节点都是它下面两个节点的哈希。 叶子可以是数据本身,也可以是数据的哈希/签名。
因此,如果在系统之间检测到根散列的任何
2021-06-17 18:30:57
15KB
Java
1