SLIDE 19: Sync vs Async: When to Use Each
Synchronous vs Asynchronous Communication
#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .error-icon{fill:#552222;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .error-text{fill:#552222;stroke:#552222;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .edge-thickness-normal{stroke-width:1px;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .edge-thickness-thick{stroke-width:3.5px;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .edge-pattern-solid{stroke-dasharray:0;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .marker{fill:#666;stroke:#666;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .marker.cross{stroke:#666;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e p{margin:0;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .cluster-label text{fill:#333;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .cluster-label span{color:#333;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .cluster-label span p{background-color:transparent;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .label text,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e span{fill:#000000;color:#000000;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .node rect,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .node circle,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .node ellipse,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .node polygon,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .rough-node .label text,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .node .label text,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .image-shape .label,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .icon-shape .label{text-anchor:middle;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .rough-node .label,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .node .label,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .image-shape .label,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .icon-shape .label{text-align:center;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .node.clickable{cursor:pointer;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .arrowheadPath{fill:#333333;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .flowchart-link{stroke:#666;fill:none;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .edgeLabel{background-color:white;text-align:center;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .edgeLabel p{background-color:white;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .cluster text{fill:#333;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .cluster span{color:#333;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e rect.text{fill:none;stroke-width:0;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .icon-shape,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .image-shape{background-color:white;text-align:center;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .icon-shape p,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .image-shape p{background-color:white;padding:2px;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .icon-shape .label rect,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e .node .neo-node{stroke:#999;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e [data-look="neo"].node rect,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e [data-look="neo"].cluster rect,#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e [data-look="neo"].node polygon{stroke:url(#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e [data-look="neo"].node path{stroke:url(#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e-gradient);stroke-width:1px;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e [data-look="neo"].node circle{stroke:url(#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e [data-look="neo"].icon-shape .icon{fill:url(#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-3e968209-d3cb-4a74-8594-55f08a029b3e :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}ClientServiceClientQueueServiceCallback/PollSyncResponseAsyncLater
Synchronous Communication:
Asynchronous Communication:
SLIDE 19B: Sync vs Async: When to Use Each (continued)
Decision Framework:
Examples:
SLIDE 20: Sync vs Async: Synchronous Patterns
Synchronous Communication in Production
Request-Response Pattern:
#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .error-icon{fill:#552222;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .error-text{fill:#552222;stroke:#552222;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .edge-thickness-normal{stroke-width:1px;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .marker{fill:#666;stroke:#666;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .marker.cross{stroke:#666;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 p{margin:0;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .cluster-label text{fill:#333;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .cluster-label span{color:#333;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .cluster-label span p{background-color:transparent;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .label text,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 span{fill:#000000;color:#000000;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .node rect,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .node circle,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .node ellipse,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .node polygon,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .rough-node .label text,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .node .label text,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .image-shape .label,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .icon-shape .label{text-anchor:middle;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .rough-node .label,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .node .label,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .image-shape .label,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .icon-shape .label{text-align:center;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .node.clickable{cursor:pointer;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .arrowheadPath{fill:#333333;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .flowchart-link{stroke:#666;fill:none;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .edgeLabel{background-color:white;text-align:center;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .edgeLabel p{background-color:white;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .cluster text{fill:#333;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .cluster span{color:#333;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 rect.text{fill:none;stroke-width:0;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .icon-shape,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .image-shape{background-color:white;text-align:center;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .icon-shape p,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .image-shape p{background-color:white;padding:2px;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .icon-shape .label rect,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 .node .neo-node{stroke:#999;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 [data-look="neo"].node rect,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 [data-look="neo"].cluster rect,#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 [data-look="neo"].node polygon{stroke:url(#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 [data-look="neo"].node path{stroke:url(#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82-gradient);stroke-width:1px;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 [data-look="neo"].node circle{stroke:url(#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 [data-look="neo"].icon-shape .icon{fill:url(#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-87ada89e-14f9-44f2-87ef-63670d379c82 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}ClientAPI GatewayUser ServiceDatabase1. Request2. Forward3. Query4. Result5. Response6. Response
Timeout Configuration:
Rule: Inner timeouts must be shorter than outer timeouts.
If database timeout is 5 seconds but service timeout is 3 seconds, the service will timeout before the database, causing confusing errors.
SLIDE 20B: Sync vs Async: Synchronous Patterns (continued)
Synchronous Anti-Patterns:
Anti-Pattern 1: Chain of Synchronous Calls
#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .error-icon{fill:#552222;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .error-text{fill:#552222;stroke:#552222;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .edge-thickness-normal{stroke-width:1px;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .marker{fill:#666;stroke:#666;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .marker.cross{stroke:#666;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 p{margin:0;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .cluster-label text{fill:#333;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .cluster-label span{color:#333;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .cluster-label span p{background-color:transparent;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .label text,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 span{fill:#000000;color:#000000;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .node rect,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .node circle,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .node ellipse,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .node polygon,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .rough-node .label text,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .node .label text,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .image-shape .label,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .icon-shape .label{text-anchor:middle;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .rough-node .label,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .node .label,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .image-shape .label,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .icon-shape .label{text-align:center;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .node.clickable{cursor:pointer;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .arrowheadPath{fill:#333333;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .flowchart-link{stroke:#666;fill:none;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .edgeLabel{background-color:white;text-align:center;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .edgeLabel p{background-color:white;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .cluster text{fill:#333;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .cluster span{color:#333;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 rect.text{fill:none;stroke-width:0;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .icon-shape,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .image-shape{background-color:white;text-align:center;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .icon-shape p,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .image-shape p{background-color:white;padding:2px;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .icon-shape .label rect,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 .node .neo-node{stroke:#999;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 [data-look="neo"].node rect,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 [data-look="neo"].cluster rect,#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 [data-look="neo"].node polygon{stroke:url(#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 [data-look="neo"].node path{stroke:url(#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376-gradient);stroke-width:1px;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 [data-look="neo"].node circle{stroke:url(#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 [data-look="neo"].icon-shape .icon{fill:url(#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-73527e8c-33fc-4f65-bd6e-bfed1ec68376 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}APIService AService BService CService DSyncSyncSyncSync
Problem:
- Total latency = A + B + C + D
- Any service failure breaks entire chain
- Debugging spans multiple services
Anti-Pattern 2: Synchronous Fan-Out
#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .error-icon{fill:#552222;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .error-text{fill:#552222;stroke:#552222;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .edge-thickness-normal{stroke-width:1px;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .marker{fill:#666;stroke:#666;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .marker.cross{stroke:#666;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 p{margin:0;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .cluster-label text{fill:#333;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .cluster-label span{color:#333;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .cluster-label span p{background-color:transparent;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .label text,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 span{fill:#000000;color:#000000;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .node rect,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .node circle,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .node ellipse,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .node polygon,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .rough-node .label text,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .node .label text,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .image-shape .label,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .icon-shape .label{text-anchor:middle;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .rough-node .label,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .node .label,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .image-shape .label,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .icon-shape .label{text-align:center;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .node.clickable{cursor:pointer;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .arrowheadPath{fill:#333333;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .flowchart-link{stroke:#666;fill:none;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .edgeLabel{background-color:white;text-align:center;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .edgeLabel p{background-color:white;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .cluster text{fill:#333;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .cluster span{color:#333;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 rect.text{fill:none;stroke-width:0;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .icon-shape,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .image-shape{background-color:white;text-align:center;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .icon-shape p,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .image-shape p{background-color:white;padding:2px;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .icon-shape .label rect,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 .node .neo-node{stroke:#999;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 [data-look="neo"].node rect,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 [data-look="neo"].cluster rect,#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 [data-look="neo"].node polygon{stroke:url(#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 [data-look="neo"].node path{stroke:url(#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52-gradient);stroke-width:1px;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 [data-look="neo"].node circle{stroke:url(#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 [data-look="neo"].icon-shape .icon{fill:url(#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-a9faee60-f8fd-4a07-aae7-b782904b7e52 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}APIService 1Service 2Service 3SyncSyncSync
Problem:
- Must wait for slowest service
- One slow service delays entire response
Solution: Parallelize where possible, or make async.
SLIDE 21: Sync vs Async: Asynchronous Patterns
Asynchronous Communication in Production
Queue-Based Pattern:
#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .error-icon{fill:#552222;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .error-text{fill:#552222;stroke:#552222;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .edge-thickness-normal{stroke-width:1px;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .edge-thickness-thick{stroke-width:3.5px;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .edge-pattern-solid{stroke-dasharray:0;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .marker{fill:#666;stroke:#666;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .marker.cross{stroke:#666;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f p{margin:0;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .cluster-label text{fill:#333;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .cluster-label span{color:#333;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .cluster-label span p{background-color:transparent;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .label text,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f span{fill:#000000;color:#000000;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .node rect,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .node circle,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .node ellipse,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .node polygon,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .rough-node .label text,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .node .label text,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .image-shape .label,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .icon-shape .label{text-anchor:middle;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .rough-node .label,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .node .label,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .image-shape .label,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .icon-shape .label{text-align:center;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .node.clickable{cursor:pointer;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .arrowheadPath{fill:#333333;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .flowchart-link{stroke:#666;fill:none;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .edgeLabel{background-color:white;text-align:center;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .edgeLabel p{background-color:white;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .cluster text{fill:#333;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .cluster span{color:#333;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f rect.text{fill:none;stroke-width:0;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .icon-shape,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .image-shape{background-color:white;text-align:center;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .icon-shape p,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .image-shape p{background-color:white;padding:2px;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .icon-shape .label rect,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f .node .neo-node{stroke:#999;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f [data-look="neo"].node rect,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f [data-look="neo"].cluster rect,#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f [data-look="neo"].node polygon{stroke:url(#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f [data-look="neo"].node path{stroke:url(#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f-gradient);stroke-width:1px;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f [data-look="neo"].node circle{stroke:url(#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f [data-look="neo"].icon-shape .icon{fill:url(#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-64a5ccf8-9fbe-43ac-9858-3a01f16f442f :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}ProducerQueueConsumerResult1. Enqueue2. Dequeue3. Process
When This Pattern Works:
Queue Technologies:
SLIDE 21B: Sync vs Async: Asynchronous Patterns (continued)
Event-Driven Pattern:
#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .error-icon{fill:#552222;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .error-text{fill:#552222;stroke:#552222;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .edge-thickness-normal{stroke-width:1px;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .marker{fill:#666;stroke:#666;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .marker.cross{stroke:#666;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 p{margin:0;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .cluster-label text{fill:#333;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .cluster-label span{color:#333;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .cluster-label span p{background-color:transparent;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .label text,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 span{fill:#000000;color:#000000;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .node rect,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .node circle,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .node ellipse,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .node polygon,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .rough-node .label text,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .node .label text,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .image-shape .label,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .icon-shape .label{text-anchor:middle;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .rough-node .label,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .node .label,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .image-shape .label,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .icon-shape .label{text-align:center;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .node.clickable{cursor:pointer;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .arrowheadPath{fill:#333333;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .flowchart-link{stroke:#666;fill:none;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .edgeLabel{background-color:white;text-align:center;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .edgeLabel p{background-color:white;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .cluster text{fill:#333;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .cluster span{color:#333;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 rect.text{fill:none;stroke-width:0;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .icon-shape,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .image-shape{background-color:white;text-align:center;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .icon-shape p,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .image-shape p{background-color:white;padding:2px;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .icon-shape .label rect,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 .node .neo-node{stroke:#999;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 [data-look="neo"].node rect,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 [data-look="neo"].cluster rect,#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 [data-look="neo"].node polygon{stroke:url(#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 [data-look="neo"].node path{stroke:url(#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51-gradient);stroke-width:1px;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 [data-look="neo"].node circle{stroke:url(#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 [data-look="neo"].icon-shape .icon{fill:url(#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-c1fabf98-06d1-4307-b8dc-2fb0e1885a51 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}User ServiceEvent BusEmail ServiceAnalytics ServiceBilling ServiceUserCreated
Publish-Subscribe Benefits:
Event Schema Example:
{
"event_type": "user.created",
"event_id": "abc-123",
"timestamp": "2025-01-15T10:30:00Z",
"data": {
"user_id": 12345,
"email": "mukul@example.com"
}
}
SLIDE 22: Sync vs Async: Hybrid Patterns
Combining Sync and Async
Pattern: Sync Response, Async Processing
#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .error-icon{fill:#552222;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .error-text{fill:#552222;stroke:#552222;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .edge-thickness-normal{stroke-width:1px;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .edge-thickness-thick{stroke-width:3.5px;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .edge-pattern-solid{stroke-dasharray:0;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .marker{fill:#666;stroke:#666;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .marker.cross{stroke:#666;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a p{margin:0;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .cluster-label text{fill:#333;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .cluster-label span{color:#333;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .cluster-label span p{background-color:transparent;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .label text,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a span{fill:#000000;color:#000000;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .node rect,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .node circle,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .node ellipse,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .node polygon,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .rough-node .label text,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .node .label text,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .image-shape .label,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .icon-shape .label{text-anchor:middle;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .rough-node .label,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .node .label,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .image-shape .label,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .icon-shape .label{text-align:center;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .node.clickable{cursor:pointer;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .arrowheadPath{fill:#333333;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .flowchart-link{stroke:#666;fill:none;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .edgeLabel{background-color:white;text-align:center;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .edgeLabel p{background-color:white;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .cluster text{fill:#333;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .cluster span{color:#333;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a rect.text{fill:none;stroke-width:0;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .icon-shape,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .image-shape{background-color:white;text-align:center;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .icon-shape p,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .image-shape p{background-color:white;padding:2px;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .icon-shape .label rect,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a .node .neo-node{stroke:#999;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a [data-look="neo"].node rect,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a [data-look="neo"].cluster rect,#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a [data-look="neo"].node polygon{stroke:url(#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a [data-look="neo"].node path{stroke:url(#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a-gradient);stroke-width:1px;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a [data-look="neo"].node circle{stroke:url(#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a [data-look="neo"].icon-shape .icon{fill:url(#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-5cd63ebd-7afb-46e5-bdfa-f14cecddb85a :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}ClientAPIQueueWorkerPush/Webhook1. Upload Request2. Store in Queue3. Return 202 Accepted4. Process Later5. Notify
HTTP Response:
HTTP/1.1 202 Accepted
{
"job_id": "abc-123",
"status": "processing",
"status_url": "/v1/jobs/abc-123"
}
Use Cases:
- Photo upload (return immediately, process thumbnails async)
- Report generation (return job ID, poll for completion)
- Batch operations (acknowledge receipt, process in background)
SLIDE 22B: Sync vs Async: Hybrid Patterns (continued)
Pattern: Async with Sync Fallback
#mermaid-1594a53d-d181-46db-a317-e080a73d7265{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .error-icon{fill:#552222;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .error-text{fill:#552222;stroke:#552222;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .edge-thickness-normal{stroke-width:1px;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .marker{fill:#666;stroke:#666;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .marker.cross{stroke:#666;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 p{margin:0;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .cluster-label text{fill:#333;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .cluster-label span{color:#333;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .cluster-label span p{background-color:transparent;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .label text,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 span{fill:#000000;color:#000000;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .node rect,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .node circle,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .node ellipse,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .node polygon,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .rough-node .label text,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .node .label text,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .image-shape .label,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .icon-shape .label{text-anchor:middle;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .rough-node .label,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .node .label,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .image-shape .label,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .icon-shape .label{text-align:center;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .node.clickable{cursor:pointer;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .arrowheadPath{fill:#333333;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .flowchart-link{stroke:#666;fill:none;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .edgeLabel{background-color:white;text-align:center;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .edgeLabel p{background-color:white;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .cluster text{fill:#333;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .cluster span{color:#333;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 rect.text{fill:none;stroke-width:0;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .icon-shape,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .image-shape{background-color:white;text-align:center;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .icon-shape p,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .image-shape p{background-color:white;padding:2px;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .icon-shape .label rect,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 .node .neo-node{stroke:#999;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 [data-look="neo"].node rect,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 [data-look="neo"].cluster rect,#mermaid-1594a53d-d181-46db-a317-e080a73d7265 [data-look="neo"].node polygon{stroke:url(#mermaid-1594a53d-d181-46db-a317-e080a73d7265-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 [data-look="neo"].node path{stroke:url(#mermaid-1594a53d-d181-46db-a317-e080a73d7265-gradient);stroke-width:1px;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 [data-look="neo"].node circle{stroke:url(#mermaid-1594a53d-d181-46db-a317-e080a73d7265-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 [data-look="neo"].icon-shape .icon{fill:url(#mermaid-1594a53d-d181-46db-a317-e080a73d7265-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-1594a53d-d181-46db-a317-e080a73d7265-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-1594a53d-d181-46db-a317-e080a73d7265 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}RequestCache Available?Return CachedEnqueue RefreshReturn Stale or WaitYesNo
Example: Feed Generation
1. User requests feed
2. Check cache for pre-computed feed
3. If cache hit: Return immediately (sync, fast)
4. If cache miss:
- Option A: Compute on demand (sync, slow)
- Option B: Return stale + trigger refresh (hybrid)
- Option C: Return empty + push when ready (async)
Trade-off:
SLIDE 23: Sync vs Async: Trade-offs
Latency vs Consistency vs Complexity
The Trade-off Triangle:
Consistency Implications:
Synchronous:
Asynchronous:
Key Question:
Can the user tolerate seeing stale data for a few seconds?
SLIDE 23B: Sync vs Async: Trade-offs (continued)
Debugging Complexity:
Synchronous Debugging:
1. Request comes in
2. Follow the call stack
3. Find the error
4. Fix and deploy
Single trace, single log stream, straightforward.
Asynchronous Debugging:
1. Request comes in
2. Message goes to queue
3. Worker picks up message (maybe minutes later)
4. Worker processes (different machine, different logs)
5. Error occurs
6. Need to correlate across multiple systems
Production Practice:
For async systems, implement:
- Correlation IDs (trace message across systems)
- Dead letter queues (capture failed messages)
- Message replay (re-process failed messages)
- Distributed tracing (visualize message flow)
SLIDE 24: Stateful vs Stateless: The Basics
Why Stateless is Preferred
Stateless Service:
Does not store any client session data between requests.
Stateful Service:
Stores client session data that persists between requests.
#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .error-icon{fill:#552222;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .error-text{fill:#552222;stroke:#552222;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .edge-thickness-normal{stroke-width:1px;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .marker{fill:#666;stroke:#666;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .marker.cross{stroke:#666;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 p{margin:0;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .cluster-label text{fill:#333;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .cluster-label span{color:#333;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .cluster-label span p{background-color:transparent;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .label text,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 span{fill:#000000;color:#000000;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .node rect,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .node circle,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .node ellipse,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .node polygon,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .rough-node .label text,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .node .label text,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .image-shape .label,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .icon-shape .label{text-anchor:middle;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .rough-node .label,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .node .label,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .image-shape .label,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .icon-shape .label{text-align:center;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .node.clickable{cursor:pointer;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .arrowheadPath{fill:#333333;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .flowchart-link{stroke:#666;fill:none;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .edgeLabel{background-color:white;text-align:center;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .edgeLabel p{background-color:white;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .cluster text{fill:#333;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .cluster span{color:#333;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 rect.text{fill:none;stroke-width:0;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .icon-shape,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .image-shape{background-color:white;text-align:center;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .icon-shape p,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .image-shape p{background-color:white;padding:2px;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .icon-shape .label rect,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 .node .neo-node{stroke:#999;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 [data-look="neo"].node rect,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 [data-look="neo"].cluster rect,#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 [data-look="neo"].node polygon{stroke:url(#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 [data-look="neo"].node path{stroke:url(#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679-gradient);stroke-width:1px;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 [data-look="neo"].node circle{stroke:url(#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 [data-look="neo"].icon-shape .icon{fill:url(#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-afe6bd59-d70c-43c2-ad2a-3ffa7f85a679 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}Request 1Server ARequest 2Server BRequest 3Server C
Stateless Benefits:
SLIDE 24B: Stateful vs Stateless: The Basics (continued)
Stateless Architecture:
#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .error-icon{fill:#552222;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .error-text{fill:#552222;stroke:#552222;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .edge-thickness-normal{stroke-width:1px;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .marker{fill:#666;stroke:#666;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .marker.cross{stroke:#666;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 p{margin:0;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .cluster-label text{fill:#333;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .cluster-label span{color:#333;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .cluster-label span p{background-color:transparent;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .label text,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 span{fill:#000000;color:#000000;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .node rect,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .node circle,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .node ellipse,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .node polygon,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .rough-node .label text,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .node .label text,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .image-shape .label,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .icon-shape .label{text-anchor:middle;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .rough-node .label,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .node .label,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .image-shape .label,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .icon-shape .label{text-align:center;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .node.clickable{cursor:pointer;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .arrowheadPath{fill:#333333;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .flowchart-link{stroke:#666;fill:none;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .edgeLabel{background-color:white;text-align:center;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .edgeLabel p{background-color:white;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .cluster text{fill:#333;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .cluster span{color:#333;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 rect.text{fill:none;stroke-width:0;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .icon-shape,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .image-shape{background-color:white;text-align:center;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .icon-shape p,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .image-shape p{background-color:white;padding:2px;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .icon-shape .label rect,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 .node .neo-node{stroke:#999;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 [data-look="neo"].node rect,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 [data-look="neo"].cluster rect,#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 [data-look="neo"].node polygon{stroke:url(#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 [data-look="neo"].node path{stroke:url(#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6-gradient);stroke-width:1px;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 [data-look="neo"].node circle{stroke:url(#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 [data-look="neo"].icon-shape .icon{fill:url(#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-e8cee467-dc9c-4a1a-8940-0a5771f060a6 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}ClientLoad BalancerServer 1Server 2Server 3Shared State
State is Externalized:
Request Contains All Context:
Authorization: Bearer {jwt_token}
JWT contains:
- user_id
- roles
- expiration
No server-side session lookup needed.
SLIDE 25: Stateful vs Stateless: When State is Unavoidable
Some State Cannot Be Externalized
WebSocket Connections:
#mermaid-2cae084b-8008-4962-b78e-933b6b42698c{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .error-icon{fill:#552222;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .error-text{fill:#552222;stroke:#552222;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .edge-thickness-normal{stroke-width:1px;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .edge-thickness-thick{stroke-width:3.5px;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .edge-pattern-solid{stroke-dasharray:0;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .marker{fill:#666;stroke:#666;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .marker.cross{stroke:#666;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c p{margin:0;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .cluster-label text{fill:#333;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .cluster-label span{color:#333;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .cluster-label span p{background-color:transparent;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .label text,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c span{fill:#000000;color:#000000;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .node rect,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .node circle,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .node ellipse,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .node polygon,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .rough-node .label text,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .node .label text,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .image-shape .label,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .icon-shape .label{text-anchor:middle;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .rough-node .label,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .node .label,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .image-shape .label,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .icon-shape .label{text-align:center;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .node.clickable{cursor:pointer;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .arrowheadPath{fill:#333333;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .flowchart-link{stroke:#666;fill:none;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .edgeLabel{background-color:white;text-align:center;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .edgeLabel p{background-color:white;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .cluster text{fill:#333;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .cluster span{color:#333;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c rect.text{fill:none;stroke-width:0;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .icon-shape,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .image-shape{background-color:white;text-align:center;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .icon-shape p,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .image-shape p{background-color:white;padding:2px;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .icon-shape .label rect,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c .node .neo-node{stroke:#999;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c [data-look="neo"].node rect,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c [data-look="neo"].cluster rect,#mermaid-2cae084b-8008-4962-b78e-933b6b42698c [data-look="neo"].node polygon{stroke:url(#mermaid-2cae084b-8008-4962-b78e-933b6b42698c-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c [data-look="neo"].node path{stroke:url(#mermaid-2cae084b-8008-4962-b78e-933b6b42698c-gradient);stroke-width:1px;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c [data-look="neo"].node circle{stroke:url(#mermaid-2cae084b-8008-4962-b78e-933b6b42698c-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c [data-look="neo"].icon-shape .icon{fill:url(#mermaid-2cae084b-8008-4962-b78e-933b6b42698c-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-2cae084b-8008-4962-b78e-933b6b42698c-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-2cae084b-8008-4962-b78e-933b6b42698c :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}ClientServer AWebSocketPersistent Connection
WebSocket connection is inherently stateful. The connection lives on a specific server.
In-Memory Caches:
Local cache on Server A: { user_123: {...} }
Local cache on Server B: { user_456: {...} }
For extreme low latency, local memory is faster than Redis.
Long-Running Computations:
Server A: Processing video encode job (30 minutes)
Cannot easily move this to another server mid-computation.
SLIDE 25B: Stateful vs Stateless: When State is Unavoidable (continued)
Strategies for Stateful Services:
Strategy 1: Sticky Sessions
#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .error-icon{fill:#552222;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .error-text{fill:#552222;stroke:#552222;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .edge-thickness-normal{stroke-width:1px;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .edge-thickness-thick{stroke-width:3.5px;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .edge-pattern-solid{stroke-dasharray:0;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .marker{fill:#666;stroke:#666;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .marker.cross{stroke:#666;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e p{margin:0;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .cluster-label text{fill:#333;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .cluster-label span{color:#333;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .cluster-label span p{background-color:transparent;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .label text,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e span{fill:#000000;color:#000000;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .node rect,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .node circle,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .node ellipse,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .node polygon,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .rough-node .label text,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .node .label text,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .image-shape .label,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .icon-shape .label{text-anchor:middle;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .rough-node .label,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .node .label,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .image-shape .label,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .icon-shape .label{text-align:center;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .node.clickable{cursor:pointer;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .arrowheadPath{fill:#333333;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .flowchart-link{stroke:#666;fill:none;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .edgeLabel{background-color:white;text-align:center;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .edgeLabel p{background-color:white;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .cluster text{fill:#333;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .cluster span{color:#333;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e rect.text{fill:none;stroke-width:0;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .icon-shape,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .image-shape{background-color:white;text-align:center;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .icon-shape p,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .image-shape p{background-color:white;padding:2px;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .icon-shape .label rect,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e .node .neo-node{stroke:#999;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e [data-look="neo"].node rect,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e [data-look="neo"].cluster rect,#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e [data-look="neo"].node polygon{stroke:url(#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e [data-look="neo"].node path{stroke:url(#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e-gradient);stroke-width:1px;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e [data-look="neo"].node circle{stroke:url(#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e [data-look="neo"].icon-shape .icon{fill:url(#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-2186a3ee-71e7-4da4-a5c4-a78800cb244e :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}ClientLoad BalancerServer AServer BSession AffinityDifferent Client
Load balancer routes same client to same server.
Problem: Server failure loses all sessions on that server.
Strategy 2: State Replication
#mermaid-000304b4-219f-4627-8f09-18845b9722d8{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .error-icon{fill:#552222;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .error-text{fill:#552222;stroke:#552222;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .edge-thickness-normal{stroke-width:1px;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .marker{fill:#666;stroke:#666;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .marker.cross{stroke:#666;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 p{margin:0;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .cluster-label text{fill:#333;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .cluster-label span{color:#333;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .cluster-label span p{background-color:transparent;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .label text,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 span{fill:#000000;color:#000000;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .node rect,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .node circle,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .node ellipse,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .node polygon,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .rough-node .label text,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .node .label text,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .image-shape .label,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .icon-shape .label{text-anchor:middle;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .rough-node .label,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .node .label,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .image-shape .label,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .icon-shape .label{text-align:center;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .node.clickable{cursor:pointer;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .arrowheadPath{fill:#333333;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .flowchart-link{stroke:#666;fill:none;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .edgeLabel{background-color:white;text-align:center;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .edgeLabel p{background-color:white;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .cluster text{fill:#333;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .cluster span{color:#333;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 rect.text{fill:none;stroke-width:0;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .icon-shape,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .image-shape{background-color:white;text-align:center;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .icon-shape p,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .image-shape p{background-color:white;padding:2px;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .icon-shape .label rect,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 .node .neo-node{stroke:#999;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 [data-look="neo"].node rect,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 [data-look="neo"].cluster rect,#mermaid-000304b4-219f-4627-8f09-18845b9722d8 [data-look="neo"].node polygon{stroke:url(#mermaid-000304b4-219f-4627-8f09-18845b9722d8-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 [data-look="neo"].node path{stroke:url(#mermaid-000304b4-219f-4627-8f09-18845b9722d8-gradient);stroke-width:1px;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 [data-look="neo"].node circle{stroke:url(#mermaid-000304b4-219f-4627-8f09-18845b9722d8-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 [data-look="neo"].icon-shape .icon{fill:url(#mermaid-000304b4-219f-4627-8f09-18845b9722d8-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-000304b4-219f-4627-8f09-18845b9722d8-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-000304b4-219f-4627-8f09-18845b9722d8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}Server AServer BServer CReplicateReplicate
All servers have copy of all state.
Problem: Replication overhead, consistency complexity.
Strategy 3: Graceful Handoff
#mermaid-0d95def2-865b-498b-baa8-6b45637e6701{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .error-icon{fill:#552222;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .error-text{fill:#552222;stroke:#552222;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .edge-thickness-normal{stroke-width:1px;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .marker{fill:#666;stroke:#666;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .marker.cross{stroke:#666;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 p{margin:0;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .cluster-label text{fill:#333;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .cluster-label span{color:#333;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .cluster-label span p{background-color:transparent;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .label text,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 span{fill:#000000;color:#000000;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .node rect,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .node circle,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .node ellipse,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .node polygon,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .rough-node .label text,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .node .label text,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .image-shape .label,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .icon-shape .label{text-anchor:middle;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .rough-node .label,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .node .label,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .image-shape .label,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .icon-shape .label{text-align:center;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .node.clickable{cursor:pointer;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .arrowheadPath{fill:#333333;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .flowchart-link{stroke:#666;fill:none;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .edgeLabel{background-color:white;text-align:center;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .edgeLabel p{background-color:white;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .cluster text{fill:#333;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .cluster span{color:#333;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 rect.text{fill:none;stroke-width:0;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .icon-shape,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .image-shape{background-color:white;text-align:center;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .icon-shape p,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .image-shape p{background-color:white;padding:2px;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .icon-shape .label rect,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 .node .neo-node{stroke:#999;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 [data-look="neo"].node rect,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 [data-look="neo"].cluster rect,#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 [data-look="neo"].node polygon{stroke:url(#mermaid-0d95def2-865b-498b-baa8-6b45637e6701-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 [data-look="neo"].node path{stroke:url(#mermaid-0d95def2-865b-498b-baa8-6b45637e6701-gradient);stroke-width:1px;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 [data-look="neo"].node circle{stroke:url(#mermaid-0d95def2-865b-498b-baa8-6b45637e6701-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 [data-look="neo"].icon-shape .icon{fill:url(#mermaid-0d95def2-865b-498b-baa8-6b45637e6701-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-0d95def2-865b-498b-baa8-6b45637e6701-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-0d95def2-865b-498b-baa8-6b45637e6701 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}Server A DrainingServer BClientTransfer StateContinue Session
Before shutdown, transfer active sessions to another server.
Problem: Complex implementation, transfer takes time.
SLIDE 26: Stateful vs Stateless: Session Management
How to Handle User Sessions
Option 1: Server-Side Sessions (Stateful)
Problems:
- Session lives on one server
- Requires sticky sessions or shared session store
- Server memory grows with active users
Option 2: JWT Tokens (Stateless)
Client sends: Authorization: Bearer eyJhbGc...
Server decodes: {user_id: 1, exp: 1234567890, roles: ["user"]}
Benefits:
- No server-side lookup
- Any server can validate
- Scales horizontally
Problems:
- Cannot revoke immediately (must wait for expiration)
- Token size grows with claims
SLIDE 26B: Stateful vs Stateless: Session Management (continued)
Production Pattern: JWT with Refresh Tokens
#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;fill:#000000;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .error-icon{fill:#552222;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .error-text{fill:#552222;stroke:#552222;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .edge-thickness-normal{stroke-width:1px;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .edge-thickness-thick{stroke-width:3.5px;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .edge-pattern-solid{stroke-dasharray:0;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .marker{fill:#666;stroke:#666;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .marker.cross{stroke:#666;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f svg{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:16px;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f p{margin:0;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .label{font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";color:#000000;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .cluster-label text{fill:#333;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .cluster-label span{color:#333;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .cluster-label span p{background-color:transparent;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .label text,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f span{fill:#000000;color:#000000;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .node rect,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .node circle,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .node ellipse,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .node polygon,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .node path{fill:#eee;stroke:#999;stroke-width:1px;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .rough-node .label text,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .node .label text,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .image-shape .label,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .icon-shape .label{text-anchor:middle;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .rough-node .label,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .node .label,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .image-shape .label,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .icon-shape .label{text-align:center;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .node.clickable{cursor:pointer;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .root .anchor path{fill:#666!important;stroke-width:0;stroke:#666;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .arrowheadPath{fill:#333333;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .edgePath .path{stroke:#666;stroke-width:1px;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .flowchart-link{stroke:#666;fill:none;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .edgeLabel{background-color:white;text-align:center;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .edgeLabel p{background-color:white;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .edgeLabel rect{opacity:0.5;background-color:white;fill:white;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .labelBkg{background-color:rgba(255, 255, 255, 0.5);}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .cluster rect{fill:hsl(0, 0%, 98.9215686275%);stroke:#707070;stroke-width:1px;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .cluster text{fill:#333;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .cluster span{color:#333;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI Variable Display","Segoe UI",Helvetica,"Apple Color Emoji","Noto Sans Arabic","Noto Sans Hebrew",Arial,sans-serif,"Segoe UI Emoji","Segoe UI Symbol";font-size:12px;background:hsl(-160, 0%, 93.3333333333%);border:1px solid #707070;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#000000;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f rect.text{fill:none;stroke-width:0;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .icon-shape,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .image-shape{background-color:white;text-align:center;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .icon-shape p,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .image-shape p{background-color:white;padding:2px;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .icon-shape .label rect,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .image-shape .label rect{opacity:0.5;background-color:white;fill:white;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f .node .neo-node{stroke:#999;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f [data-look="neo"].node rect,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f [data-look="neo"].cluster rect,#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f [data-look="neo"].node polygon{stroke:url(#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f [data-look="neo"].swimlane.cluster rect{filter:none;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f [data-look="neo"].node path{stroke:url(#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f-gradient);stroke-width:1px;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f [data-look="neo"].node .neo-line path{stroke:#999;filter:none;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f [data-look="neo"].node circle{stroke:url(#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f [data-look="neo"].node circle .state-start{fill:#000000;}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f [data-look="neo"].icon-shape .icon{fill:url(#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f [data-look="neo"].icon-shape .icon-neo path{stroke:url(#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#mermaid-baa63e11-58a5-4201-81d6-fa44d88bfb8f :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}LoginReturn Access + Refresh TokenAccess Token: 15 minRefresh Token: 7 daysUse for API callsExchange for new Access Token
Token Configuration:
Revocation Strategy:
Access tokens cannot be revoked (short-lived, acceptable).
Refresh tokens can be revoked (stored in database with revoked flag).
For immediate logout:
1. Revoke refresh token in database
2. Access token expires within 15 minutes
3. User cannot get new access token
SLIDE 27: Stateful vs Stateless: Sticky Sessions
When and How to Use Sticky Sessions
What is Sticky Session:
Load balancer routes requests from same client to same server.
Implementation:
When to Use:
SLIDE 27B: Stateful vs Stateless: Sticky Sessions (continued)
Sticky Session Problems:
Problem 1: Uneven Load Distribution
Server A: 1000 sessions (overloaded)
Server B: 100 sessions (idle)
Server C: 50 sessions (idle)
Some users happen to be more active than others.
Problem 2: Server Failure Loses Sessions
Problem 3: Deployment Complexity
Mitigation:
SLIDE 28: Architecture Boundaries: Summary
Key Takeaways
Production Requirements:
- Uptime SLAs compound across dependencies
- Latency budgets force optimization decisions
- Cost constraints shape architecture choices
- Team structure determines service boundaries
- Compliance requirements restrict data flow
Service Boundaries:
- Start with monolith, split when you feel pain
- Every service needs a clear owner
- API contracts are the law between services
- Backward compatibility protects consumers
Sync vs Async:
- Use sync when user waits and operation is fast
- Use async when operation is slow or failure is tolerable
- Hybrid patterns combine the best of both
- Async increases debugging complexity
Stateful vs Stateless:
- Prefer stateless for horizontal scaling
- Externalize state to databases and caches
- Use JWT for session management
- Sticky sessions are a last resort with known trade-offs
SLIDE 29: Architecture Boundaries: Decision Framework
How to Make These Decisions in Practice
Decision 1: Monolith vs Microservices
IF team_size < 10 AND system_age < 2_years:
START with monolith
ELIF different_scaling_needs OR different_deployment_cadence:
SPLIT into services
ELSE:
STAY with monolith
Decision 2: Sync vs Async
IF user_waiting AND operation < 500ms:
USE sync
ELIF operation > 1_second OR can_fail_silently:
USE async
ELSE:
USE hybrid (sync response, async processing)
Decision 3: Stateful vs Stateless
IF can_externalize_state:
USE stateless with external store
ELIF connection_inherently_stateful (WebSocket):
USE sticky sessions with replication
ELSE:
EVALUATE trade-offs case by case
SLIDE 30: Section 1-2 Complete
What We Covered
Section 1: Introduction
- The gap between interview design and production reality
- What production constraints actually look like
- The production mindset of senior engineers
- Course structure and what is coming next
Section 2: Production Requirements and Architecture Boundaries
- Uptime, latency, cost, and compliance constraints
- Team ownership and Conway's Law
- Service boundaries: when to split, API contracts, versioning
- Sync vs async: patterns, trade-offs, and when to use each
- Stateful vs stateless: session management, sticky sessions
Coming Up Next: Section 3 - Data in Production
- Schema evolution and migrations
- Replication lag and consistency
- Hot partitions and data distribution
- Backups and disaster recovery