{"type":"excalidraw","version":2,"source":"https://AwesomeSystemDesign.dev","elements":[{"angle":0,"strokeColor":"#628572","backgroundColor":"#edf5ee","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-1"],"frameId":null,"roundness":null,"boundElements":[{"type":"text","id":"shape-1"}],"updated":0,"link":null,"locked":false,"id":"shape-0","type":"rectangle","seed":41,"x":30,"y":30,"width":498.93124000000006,"height":68,"customData":{"revealStep":1}},{"angle":0,"strokeColor":"#394557","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-1"],"frameId":null,"roundness":null,"boundElements":null,"updated":0,"link":null,"locked":false,"id":"shape-1","type":"text","seed":114,"x":50,"y":52.3,"width":458.93124000000006,"height":23.400000000000002,"fontSize":18,"fontFamily":1,"text":"Content-Addressable Block Store (Global Dedup)","originalText":"Content-Addressable Block Store (Global Dedup)","textAlign":"left","verticalAlign":"middle","containerId":"shape-0","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":1}},{"angle":0,"strokeColor":"#a68a53","backgroundColor":"#fff7e6","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-2"],"frameId":null,"roundness":null,"boundElements":[{"type":"text","id":"shape-3"}],"updated":0,"link":null,"locked":false,"id":"shape-2","type":"rectangle","seed":187,"x":30,"y":123,"width":505.552,"height":82.80000000000001,"customData":{"revealStep":2}},{"angle":0,"strokeColor":"#394557","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-2"],"frameId":null,"roundness":null,"boundElements":null,"updated":0,"link":null,"locked":false,"id":"shape-3","type":"text","seed":260,"x":50,"y":141,"width":465.552,"height":46.800000000000004,"fontSize":18,"fontFamily":1,"text":"Every block is identified by its SHA-256 hash.\nSame content → same hash → stored once globally.","originalText":"Every block is identified by its SHA-256 hash.\nSame content → same hash → stored once globally.","textAlign":"left","verticalAlign":"middle","containerId":"shape-2","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":2}},{"angle":0,"strokeColor":"#9180ac","backgroundColor":"#f4effb","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-3"],"frameId":null,"roundness":null,"boundElements":[{"type":"text","id":"shape-5"}],"updated":0,"link":null,"locked":false,"id":"shape-4","type":"rectangle","seed":333,"x":30,"y":230.8,"width":605.07328,"height":223.20000000000002,"customData":{"revealStep":3}},{"angle":0,"strokeColor":"#394557","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-3"],"frameId":null,"roundness":null,"boundElements":null,"updated":0,"link":null,"locked":false,"id":"shape-5","type":"text","seed":406,"x":50,"y":248.8,"width":565.07328,"height":187.20000000000002,"fontSize":18,"fontFamily":1,"text":"Upload flow:\n1. Client chunks file, computes hash per chunk\n2. Client sends list of block_hashes to server\n3. Server checks: which hashes already exist in block store?\n→ Existing blocks: skip upload (dedup!)\n→ New blocks: generate presigned upload URLs\n4. Client uploads only NEW blocks\n5. Server creates file version pointing to ordered block list","originalText":"Upload flow:\n1. Client chunks file, computes hash per chunk\n2. Client sends list of block_hashes to server\n3. Server checks: which hashes already exist in block store?\n→ Existing blocks: skip upload (dedup!)\n→ New blocks: generate presigned upload URLs\n4. Client uploads only NEW blocks\n5. Server creates file version pointing to ordered block list","textAlign":"left","verticalAlign":"middle","containerId":"shape-4","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":3}},{"angle":0,"strokeColor":"#6577aa","backgroundColor":"#eef1fc","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-4"],"frameId":null,"roundness":null,"boundElements":[{"type":"text","id":"shape-7"}],"updated":0,"link":null,"locked":false,"id":"shape-6","type":"rectangle","seed":479,"x":30,"y":479,"width":486.68188000000004,"height":106.2,"customData":{"revealStep":4}},{"angle":0,"strokeColor":"#394557","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-4"],"frameId":null,"roundness":null,"boundElements":null,"updated":0,"link":null,"locked":false,"id":"shape-7","type":"text","seed":552,"x":50,"y":497,"width":446.68188000000004,"height":70.2,"fontSize":18,"fontFamily":1,"text":"Example:\nAlice uploads \"report.pdf\" (4 blocks: A, B, C, D)\n→ All 4 blocks uploaded (new file)","originalText":"Example:\nAlice uploads \"report.pdf\" (4 blocks: A, B, C, D)\n→ All 4 blocks uploaded (new file)","textAlign":"left","verticalAlign":"middle","containerId":"shape-6","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":4}},{"angle":0,"strokeColor":"#628572","backgroundColor":"#edf5ee","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-5"],"frameId":null,"roundness":null,"boundElements":[{"type":"text","id":"shape-9"}],"updated":0,"link":null,"locked":false,"id":"shape-8","type":"rectangle","seed":625,"x":30,"y":610.2,"width":552.03088,"height":106.2,"customData":{"revealStep":5}},{"angle":0,"strokeColor":"#394557","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-5"],"frameId":null,"roundness":null,"boundElements":null,"updated":0,"link":null,"locked":false,"id":"shape-9","type":"text","seed":698,"x":50,"y":628.2,"width":512.03088,"height":70.2,"fontSize":18,"fontFamily":1,"text":"Bob uploads \"report-v2.pdf\" (4 blocks: A, B, C', D)\n→ Server: blocks A, B, D already exist → upload only C'\n→ 75% bandwidth saved!","originalText":"Bob uploads \"report-v2.pdf\" (4 blocks: A, B, C', D)\n→ Server: blocks A, B, D already exist → upload only C'\n→ 75% bandwidth saved!","textAlign":"left","verticalAlign":"middle","containerId":"shape-8","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":5}},{"angle":0,"strokeColor":"#a68a53","backgroundColor":"#fff7e6","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-6"],"frameId":null,"roundness":null,"boundElements":[{"type":"text","id":"shape-11"}],"updated":0,"link":null,"locked":false,"id":"shape-10","type":"rectangle","seed":771,"x":30,"y":741.4000000000001,"width":548.8636000000001,"height":129.60000000000002,"customData":{"revealStep":6}},{"angle":0,"strokeColor":"#394557","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-6"],"frameId":null,"roundness":null,"boundElements":null,"updated":0,"link":null,"locked":false,"id":"shape-11","type":"text","seed":844,"x":50,"y":759.4000000000001,"width":508.86360000000013,"height":93.60000000000001,"fontSize":18,"fontFamily":1,"text":"Charlie uploads same \"report.pdf\" as Alice\n→ Server: all 4 blocks already exist → upload 0 blocks!\n→ File metadata created, pointing to existing blocks\n→ 100% bandwidth saved (cross-user dedup)","originalText":"Charlie uploads same \"report.pdf\" as Alice\n→ Server: all 4 blocks already exist → upload 0 blocks!\n→ File metadata created, pointing to existing blocks\n→ 100% bandwidth saved (cross-user dedup)","textAlign":"left","verticalAlign":"middle","containerId":"shape-10","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":6}},{"angle":0,"strokeColor":"#9180ac","backgroundColor":"#f4effb","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-7"],"frameId":null,"roundness":null,"boundElements":[{"type":"text","id":"shape-13"}],"updated":0,"link":null,"locked":false,"id":"shape-12","type":"rectangle","seed":917,"x":30,"y":896.0000000000001,"width":556.07584,"height":153,"customData":{"revealStep":7}},{"angle":0,"strokeColor":"#394557","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-7"],"frameId":null,"roundness":null,"boundElements":null,"updated":0,"link":null,"locked":false,"id":"shape-13","type":"text","seed":990,"x":50,"y":914.0000000000001,"width":516.07584,"height":117,"fontSize":18,"fontFamily":1,"text":"Dedup index:\nBlock hash → {storage_url, size, ref_count}\nStored in: distributed hash table or key-value store\nSize: 100B files × 4 blocks avg × 72 bytes = ~28 TB\n→ Fits on SSD-backed cluster","originalText":"Dedup index:\nBlock hash → {storage_url, size, ref_count}\nStored in: distributed hash table or key-value store\nSize: 100B files × 4 blocks avg × 72 bytes = ~28 TB\n→ Fits on SSD-backed cluster","textAlign":"left","verticalAlign":"middle","containerId":"shape-12","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":7}},{"angle":0,"strokeColor":"#6577aa","backgroundColor":"#eef1fc","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-8"],"frameId":null,"roundness":null,"boundElements":[{"type":"text","id":"shape-15"}],"updated":0,"link":null,"locked":false,"id":"shape-14","type":"rectangle","seed":1063,"x":30,"y":1074,"width":619.02076,"height":129.60000000000002,"customData":{"revealStep":8}},{"angle":0,"strokeColor":"#394557","backgroundColor":"transparent","fillStyle":"solid","strokeWidth":1.5,"strokeStyle":"solid","roughness":0.7,"opacity":100,"version":1,"versionNonce":1,"isDeleted":false,"groupIds":["step-8"],"frameId":null,"roundness":null,"boundElements":null,"updated":0,"link":null,"locked":false,"id":"shape-15","type":"text","seed":1136,"x":50,"y":1092,"width":579.02076,"height":93.60000000000001,"fontSize":18,"fontFamily":1,"text":"Security concern: convergent encryption\nIf dedup is cross-user, can attacker confirm if block exists?\n→ Mitigation: authenticated dedup (only check within same\ntenant or across files known to be identical by the platform)","originalText":"Security concern: convergent encryption\nIf dedup is cross-user, can attacker confirm if block exists?\n→ Mitigation: authenticated dedup (only check within same\ntenant or across files known to be identical by the platform)","textAlign":"left","verticalAlign":"middle","containerId":"shape-14","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":8}}],"appState":{"viewBackgroundColor":"#fbfbf8","gridSize":null},"files":{}}