diff --git a/public/cs.js b/public/cs.js new file mode 100644 index 0000000..f2128b3 --- /dev/null +++ b/public/cs.js @@ -0,0 +1,36 @@ +// 动态分片流 +// 1. 默认提供分片流 +// 2. 允许请求者指定数据段, 返回相应分片, 发送队列可以并行, 接收队列在检查没有新数据时, 补充要求失败的分片 +// 3. 可靠模式下分片是完整的, 但响应不是立即的, 当请求超时时放弃接受和发送队列中的分片 +// 4. 同一个资源可以向不同的提供者请求, 将不同区段的分片合并然后存储 +// 5. 不需要验证hash, 但是需要验证顺序, 发送者应当标记这个分片的开始和结束位置 + +// 资源id, 开始位置, 结束位置, 数据 +// 资源的其他信息, 如hash, 大小, 类型等, 由其他方式获取 +// 并不信任发送者, 所以必须验证发送者的分片HASH, 所以资源信息里应当包含每个分片的HASH +// 但如果每个HASH都要验证, 那么验证的成本太高, 所以应当有一个HASH验证的阈值, 例如每100个分片验证一次, 如果验证失败, 则放弃这个分片, 重新请求 + +// 数据块, 每个数据块验证一次HASH, 如果验证失败, 则放弃这个数据块, 重新请求 +// 数据块的大小应当是2的幂, 例如2, 4, 8, 16, 32, 64, 128, 256, 512, 1024等 +// 数据块的大小应当是分片的倍数, 例如分片大小是1024, 那么数据块大小应当是1024的倍数, 例如1024, 2048, 4096等 + +/** + * { + * id: 'resource id', + * type: 'resource type', + * size: 'resource size', + * hash: 'resource hash', + * blocks: [ + * 'md5 hash of block 1', + * 'md5 hash of block 2', + * 'md5 hash of block 3', + * ] + * } + */ + +// 分片交叉验证 +// 1. 每个分片都没有hash +// 2. 文件有一个完整的hash +// 3. 文件取4个交叉验证维度 +// 4. 16个HASH验证1GB文件 +// 5. 且只在完整hash验证失败时才验证分片