分片验证策略
This commit is contained in:
		
							
								
								
									
										36
									
								
								public/cs.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								public/cs.js
									
									
									
									
									
										Normal file
									
								
							@@ -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验证失败时才验证分片
 | 
				
			||||||
		Reference in New Issue
	
	Block a user