{"type":"excalidraw","version":2,"source":"https://AwesomeSystemDesign.dev","elements":[{"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-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":16,"y":16,"width":288,"height":665.2,"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":36,"y":34,"width":248,"height":629.2,"fontSize":22,"fontFamily":1,"text":"Push Model\n(scheduler assigns to\nworkers)\n\nScheduler Workers\n\n-- task → worker-3\n----------->\n-- task → worker-7\n----------->\n\nScheduler tracks\nworker capacity,\nhealth, current load\n\nPros: optimal load\nbalancing,\nlocality-aware\nplacement\nCons: scheduler is a\nbottleneck; complex\nhealth tracking","originalText":"Push Model\n(scheduler assigns to\nworkers)\n\nScheduler Workers\n\n-- task → worker-3\n----------->\n-- task → worker-7\n----------->\n\nScheduler tracks\nworker capacity,\nhealth, current load\n\nPros: optimal load\nbalancing,\nlocality-aware\nplacement\nCons: scheduler is a\nbottleneck; complex\nhealth tracking","textAlign":"left","verticalAlign":"middle","containerId":"shape-0","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":1}},{"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-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":16,"y":725.2,"width":288,"height":836.8000000000001,"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":36,"y":743.2,"width":248,"height":800.8000000000001,"fontSize":22,"fontFamily":1,"text":"Pull Model (workers\nrequest tasks —\nRECOMMENDED)\n\nWorkers Ready Queue\n\n-- give me a task\n------------>\n<-- here's task-ABC\n\n-- [execute]\n------------------>\n\n-- give me next task\n--------->\n<-- here's task-DEF\n\nWorker pulls when it\nhas capacity\n(self-regulating\nbackpressure)\n\nPros: natural\nbackpressure, simple,\nno single bottleneck\nCons: less control\nover placement; slight\nlatency (poll gap)","originalText":"Pull Model (workers\nrequest tasks —\nRECOMMENDED)\n\nWorkers Ready Queue\n\n-- give me a task\n------------>\n<-- here's task-ABC\n\n-- [execute]\n------------------>\n\n-- give me next task\n--------->\n<-- here's task-DEF\n\nWorker pulls when it\nhas capacity\n(self-regulating\nbackpressure)\n\nPros: natural\nbackpressure, simple,\nno single bottleneck\nCons: less control\nover placement; slight\nlatency (poll gap)","textAlign":"left","verticalAlign":"middle","containerId":"shape-2","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":2}},{"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-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":16,"y":1606,"width":288,"height":465,"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":36,"y":1624,"width":248,"height":429,"fontSize":22,"fontFamily":1,"text":"Recommendation: Pull\nmodel with Redis\nBRPOPLPUSH\n→ Worker blocks until\na task is available\n(no polling)\n→ Atomic move from\n\"ready\" list to\n\"processing\" list\n→ If worker crashes,\ntask stays in\n\"processing\" list\n→ Timeout watchdog\ndetects and\nre-enqueues","originalText":"Recommendation: Pull\nmodel with Redis\nBRPOPLPUSH\n→ Worker blocks until\na task is available\n(no polling)\n→ Atomic move from\n\"ready\" list to\n\"processing\" list\n→ If worker crashes,\ntask stays in\n\"processing\" list\n→ Timeout watchdog\ndetects and\nre-enqueues","textAlign":"left","verticalAlign":"middle","containerId":"shape-4","lineHeight":1.3,"autoResize":false,"customData":{"revealStep":3}}],"appState":{"viewBackgroundColor":"#fbfbf8","gridSize":null},"files":{}}