Split architecture diagram into separate local and AWS diagrams
This commit is contained in:
225
docs/architecture/01b-aws-architecture.svg
Normal file
225
docs/architecture/01b-aws-architecture.svg
Normal file
@@ -0,0 +1,225 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 14.1.2 (0)
|
||||
-->
|
||||
<!-- Title: aws_architecture Pages: 1 -->
|
||||
<svg width="620pt" height="1094pt"
|
||||
viewBox="0.00 0.00 620.00 1094.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1090.1)">
|
||||
<title>aws_architecture</title>
|
||||
<polygon fill="white" stroke="none" points="-4,4 -4,-1090.1 616.25,-1090.1 616.25,4 -4,4"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="306.12" y="-1066.9" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">MPR - AWS Architecture (Lambda + Step Functions)</text>
|
||||
<g id="clust1" class="cluster">
|
||||
<title>cluster_external</title>
|
||||
<polygon fill="none" stroke="gray" stroke-dasharray="5,2" points="158,-947 158,-1050.6 318,-1050.6 318,-947 158,-947"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="238" y="-1031.4" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">External</text>
|
||||
</g>
|
||||
<g id="clust2" class="cluster">
|
||||
<title>cluster_proxy</title>
|
||||
<polygon fill="#e8f4f8" stroke="black" points="165,-819.25 165,-905.25 311,-905.25 311,-819.25 165,-819.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="238" y="-886.05" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">Reverse Proxy</text>
|
||||
</g>
|
||||
<g id="clust3" class="cluster">
|
||||
<title>cluster_apps</title>
|
||||
<polygon fill="#f0f8e8" stroke="black" points="11,-542.75 11,-789.25 293,-789.25 293,-542.75 11,-542.75"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="152" y="-770.05" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">Application Layer</text>
|
||||
</g>
|
||||
<g id="clust4" class="cluster">
|
||||
<title>cluster_data</title>
|
||||
<polygon fill="#f8e8f0" stroke="black" points="8,-372.91 8,-474.84 122,-474.84 122,-372.91 8,-372.91"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="65" y="-455.64" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">Data Layer</text>
|
||||
</g>
|
||||
<g id="clust5" class="cluster">
|
||||
<title>cluster_aws</title>
|
||||
<polygon fill="#fde8d0" stroke="black" points="245,-8 245,-475.5 577,-475.5 577,-8 245,-8"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="411" y="-456.3" font-family="Helvetica,sans-Serif" font-weight="bold" font-size="16.00">AWS Cloud</text>
|
||||
</g>
|
||||
<!-- browser -->
|
||||
<g id="node1" class="node">
|
||||
<title>browser</title>
|
||||
<ellipse fill="none" stroke="black" cx="238" cy="-985.05" rx="71.77" ry="30.05"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="238" y="-989" font-family="Helvetica,sans-Serif" font-size="14.00">Browser</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="238" y="-971.75" font-family="Helvetica,sans-Serif" font-size="14.00">mpr.mcrn.ar</text>
|
||||
</g>
|
||||
<!-- nginx -->
|
||||
<g id="node2" class="node">
|
||||
<title>nginx</title>
|
||||
<path fill="none" stroke="black" d="M259.5,-869.75C259.5,-869.75 216.5,-869.75 216.5,-869.75 210.5,-869.75 204.5,-863.75 204.5,-857.75 204.5,-857.75 204.5,-839.25 204.5,-839.25 204.5,-833.25 210.5,-827.25 216.5,-827.25 216.5,-827.25 259.5,-827.25 259.5,-827.25 265.5,-827.25 271.5,-833.25 271.5,-839.25 271.5,-839.25 271.5,-857.75 271.5,-857.75 271.5,-863.75 265.5,-869.75 259.5,-869.75"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="238" y="-852.45" font-family="Helvetica,sans-Serif" font-size="14.00">nginx</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="238" y="-835.2" font-family="Helvetica,sans-Serif" font-size="14.00">port 80</text>
|
||||
</g>
|
||||
<!-- browser->nginx -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>browser->nginx</title>
|
||||
<path fill="none" stroke="black" d="M238,-954.75C238,-954.75 238,-881.75 238,-881.75"/>
|
||||
<polygon fill="black" stroke="black" points="241.5,-881.75 238,-871.75 234.5,-881.75 241.5,-881.75"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="250.75" y="-916.5" font-family="Helvetica,sans-Serif" font-size="10.00">HTTP</text>
|
||||
</g>
|
||||
<!-- django -->
|
||||
<g id="node3" class="node">
|
||||
<title>django</title>
|
||||
<path fill="none" stroke="black" d="M120.75,-753.75C120.75,-753.75 31.25,-753.75 31.25,-753.75 25.25,-753.75 19.25,-747.75 19.25,-741.75 19.25,-741.75 19.25,-706 19.25,-706 19.25,-700 25.25,-694 31.25,-694 31.25,-694 120.75,-694 120.75,-694 126.75,-694 132.75,-700 132.75,-706 132.75,-706 132.75,-741.75 132.75,-741.75 132.75,-747.75 126.75,-753.75 120.75,-753.75"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="76" y="-736.45" font-family="Helvetica,sans-Serif" font-size="14.00">Django Admin</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="76" y="-719.2" font-family="Helvetica,sans-Serif" font-size="14.00">/admin</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="76" y="-701.95" font-family="Helvetica,sans-Serif" font-size="14.00">port 8701</text>
|
||||
</g>
|
||||
<!-- nginx->django -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>nginx->django</title>
|
||||
<path fill="none" stroke="black" d="M204.04,-856C156.54,-856 76,-856 76,-856 76,-856 76,-765.7 76,-765.7"/>
|
||||
<polygon fill="black" stroke="black" points="79.5,-765.7 76,-755.7 72.5,-765.7 79.5,-765.7"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="78" y="-859.25" font-family="Helvetica,sans-Serif" font-size="10.00">/admin</text>
|
||||
</g>
|
||||
<!-- fastapi -->
|
||||
<g id="node4" class="node">
|
||||
<title>fastapi</title>
|
||||
<path fill="none" stroke="black" d="M273.38,-610.5C273.38,-610.5 148.62,-610.5 148.62,-610.5 142.62,-610.5 136.62,-604.5 136.62,-598.5 136.62,-598.5 136.62,-562.75 136.62,-562.75 136.62,-556.75 142.62,-550.75 148.62,-550.75 148.62,-550.75 273.38,-550.75 273.38,-550.75 279.38,-550.75 285.38,-556.75 285.38,-562.75 285.38,-562.75 285.38,-598.5 285.38,-598.5 285.38,-604.5 279.38,-610.5 273.38,-610.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="211" y="-593.2" font-family="Helvetica,sans-Serif" font-size="14.00">FastAPI + GraphQL</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="211" y="-575.95" font-family="Helvetica,sans-Serif" font-size="14.00">/api + /graphql</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="211" y="-558.7" font-family="Helvetica,sans-Serif" font-size="14.00">port 8702</text>
|
||||
</g>
|
||||
<!-- nginx->fastapi -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>nginx->fastapi</title>
|
||||
<path fill="none" stroke="black" d="M204.14,-841C190.81,-841 178.61,-841 178.61,-841 178.61,-841 178.61,-622.26 178.61,-622.26"/>
|
||||
<polygon fill="black" stroke="black" points="182.11,-622.26 178.61,-612.26 175.11,-622.26 182.11,-622.26"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="162.68" y="-734.9" font-family="Helvetica,sans-Serif" font-size="10.00">/api, /graphql</text>
|
||||
</g>
|
||||
<!-- timeline -->
|
||||
<g id="node5" class="node">
|
||||
<title>timeline</title>
|
||||
<path fill="none" stroke="black" d="M273,-753.75C273,-753.75 203,-753.75 203,-753.75 197,-753.75 191,-747.75 191,-741.75 191,-741.75 191,-706 191,-706 191,-700 197,-694 203,-694 203,-694 273,-694 273,-694 279,-694 285,-700 285,-706 285,-706 285,-741.75 285,-741.75 285,-747.75 279,-753.75 273,-753.75"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="238" y="-736.45" font-family="Helvetica,sans-Serif" font-size="14.00">Timeline UI</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="238" y="-719.2" font-family="Helvetica,sans-Serif" font-size="14.00">/</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="238" y="-701.95" font-family="Helvetica,sans-Serif" font-size="14.00">port 5173</text>
|
||||
</g>
|
||||
<!-- nginx->timeline -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>nginx->timeline</title>
|
||||
<path fill="none" stroke="black" d="M238,-826.79C238,-826.79 238,-765.72 238,-765.72"/>
|
||||
<polygon fill="black" stroke="black" points="241.5,-765.72 238,-755.72 234.5,-765.72 241.5,-765.72"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="236.5" y="-799.5" font-family="Helvetica,sans-Serif" font-size="10.00">/</text>
|
||||
</g>
|
||||
<!-- postgres -->
|
||||
<g id="node6" class="node">
|
||||
<title>postgres</title>
|
||||
<path fill="none" stroke="black" d="M112.75,-434.03C112.75,-436.96 91.35,-439.34 65,-439.34 38.65,-439.34 17.25,-436.96 17.25,-434.03 17.25,-434.03 17.25,-386.22 17.25,-386.22 17.25,-383.29 38.65,-380.91 65,-380.91 91.35,-380.91 112.75,-383.29 112.75,-386.22 112.75,-386.22 112.75,-434.03 112.75,-434.03"/>
|
||||
<path fill="none" stroke="black" d="M112.75,-434.03C112.75,-431.1 91.35,-428.72 65,-428.72 38.65,-428.72 17.25,-431.1 17.25,-434.03"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="65" y="-414.07" font-family="Helvetica,sans-Serif" font-size="14.00">PostgreSQL</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="65" y="-396.82" font-family="Helvetica,sans-Serif" font-size="14.00">port 5436</text>
|
||||
</g>
|
||||
<!-- django->postgres -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>django->postgres</title>
|
||||
<path fill="none" stroke="black" d="M42.62,-693.51C42.62,-693.51 42.62,-451.11 42.62,-451.11"/>
|
||||
<polygon fill="black" stroke="black" points="46.13,-451.11 42.63,-441.11 39.13,-451.11 46.13,-451.11"/>
|
||||
</g>
|
||||
<!-- fastapi->postgres -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>fastapi->postgres</title>
|
||||
<path fill="none" stroke="black" d="M136.38,-591C100.85,-591 66,-591 66,-591 66,-591 66,-451.1 66,-451.1"/>
|
||||
<polygon fill="black" stroke="black" points="69.5,-451.1 66,-441.1 62.5,-451.1 69.5,-451.1"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="247.38" y="-499.5" font-family="Helvetica,sans-Serif" font-size="10.00">read/write jobs</text>
|
||||
</g>
|
||||
<!-- fastapi->postgres -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>fastapi->postgres</title>
|
||||
<path fill="none" stroke="black" d="M136.4,-571C111.22,-571 89.38,-571 89.38,-571 89.38,-571 89.38,-451.15 89.38,-451.15"/>
|
||||
<polygon fill="black" stroke="black" points="92.88,-451.15 89.38,-441.15 85.88,-451.15 92.88,-451.15"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="106.25" y="-505.88" font-family="Helvetica,sans-Serif" font-size="10.00">callback updates</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="106.25" y="-493.12" font-family="Helvetica,sans-Serif" font-size="10.00">job status</text>
|
||||
</g>
|
||||
<!-- step_functions -->
|
||||
<g id="node7" class="node">
|
||||
<title>step_functions</title>
|
||||
<path fill="none" stroke="black" d="M365.38,-440C365.38,-440 270.62,-440 270.62,-440 264.62,-440 258.62,-434 258.62,-428 258.62,-428 258.62,-392.25 258.62,-392.25 258.62,-386.25 264.62,-380.25 270.62,-380.25 270.62,-380.25 365.38,-380.25 365.38,-380.25 371.38,-380.25 377.38,-386.25 377.38,-392.25 377.38,-392.25 377.38,-428 377.38,-428 377.38,-434 371.38,-440 365.38,-440"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="318" y="-422.7" font-family="Helvetica,sans-Serif" font-size="14.00">Step Functions</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="318" y="-405.45" font-family="Helvetica,sans-Serif" font-size="14.00">Orchestration</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="318" y="-388.2" font-family="Helvetica,sans-Serif" font-size="14.00">state machine</text>
|
||||
</g>
|
||||
<!-- fastapi->step_functions -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>fastapi->step_functions</title>
|
||||
<path fill="none" stroke="black" d="M272,-550.54C272,-550.54 272,-452 272,-452"/>
|
||||
<polygon fill="black" stroke="black" points="275.5,-452 272,-442 268.5,-452 275.5,-452"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="388.25" y="-512.25" font-family="Helvetica,sans-Serif" font-size="10.00">boto3</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="388.25" y="-499.5" font-family="Helvetica,sans-Serif" font-size="10.00">start_execution()</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="388.25" y="-486.75" font-family="Helvetica,sans-Serif" font-size="10.00">execution_arn</text>
|
||||
</g>
|
||||
<!-- timeline->fastapi -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>timeline->fastapi</title>
|
||||
<path fill="none" stroke="black" d="M238,-693.85C238,-693.85 238,-622.13 238,-622.13"/>
|
||||
<polygon fill="black" stroke="black" points="241.5,-622.13 238,-612.13 234.5,-622.13 241.5,-622.13"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="245.75" y="-655.5" font-family="Helvetica,sans-Serif" font-size="10.00">REST API</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="245.75" y="-642.75" font-family="Helvetica,sans-Serif" font-size="10.00">GraphQL</text>
|
||||
</g>
|
||||
<!-- lambda -->
|
||||
<g id="node8" class="node">
|
||||
<title>lambda</title>
|
||||
<path fill="none" stroke="black" d="M467,-296.75C467,-296.75 349,-296.75 349,-296.75 343,-296.75 337,-290.75 337,-284.75 337,-284.75 337,-249 337,-249 337,-243 343,-237 349,-237 349,-237 467,-237 467,-237 473,-237 479,-243 479,-249 479,-249 479,-284.75 479,-284.75 479,-290.75 473,-296.75 467,-296.75"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="408" y="-279.45" font-family="Helvetica,sans-Serif" font-size="14.00">Lambda Function</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="408" y="-262.2" font-family="Helvetica,sans-Serif" font-size="14.00">FFmpeg container</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="408" y="-244.95" font-family="Helvetica,sans-Serif" font-size="14.00">transcoding</text>
|
||||
</g>
|
||||
<!-- step_functions->lambda -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>step_functions->lambda</title>
|
||||
<path fill="none" stroke="black" d="M357.19,-380.1C357.19,-380.1 357.19,-308.38 357.19,-308.38"/>
|
||||
<polygon fill="black" stroke="black" points="360.69,-308.38 357.19,-298.38 353.69,-308.38 360.69,-308.38"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="388.12" y="-341.75" font-family="Helvetica,sans-Serif" font-size="10.00">invoke with</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="388.12" y="-329" font-family="Helvetica,sans-Serif" font-size="10.00">job parameters</text>
|
||||
</g>
|
||||
<!-- lambda->fastapi -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>lambda->fastapi</title>
|
||||
<path fill="none" stroke="black" d="M336.76,-267C274.82,-267 194.94,-267 194.94,-267 194.94,-267 194.94,-538.75 194.94,-538.75"/>
|
||||
<polygon fill="black" stroke="black" points="191.44,-538.75 194.94,-548.75 198.44,-538.75 191.44,-538.75"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="552.62" y="-413.38" font-family="Helvetica,sans-Serif" font-size="10.00">POST /jobs/{id}/callback</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="552.62" y="-400.62" font-family="Helvetica,sans-Serif" font-size="10.00">update status</text>
|
||||
</g>
|
||||
<!-- s3 -->
|
||||
<g id="node9" class="node">
|
||||
<title>s3</title>
|
||||
<polygon fill="none" stroke="black" points="454.62,-153.5 451.62,-157.5 430.62,-157.5 427.62,-153.5 361.38,-153.5 361.38,-117.5 454.62,-117.5 454.62,-153.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="408" y="-130.82" font-family="Helvetica,sans-Serif" font-size="14.00">S3 Buckets</text>
|
||||
</g>
|
||||
<!-- lambda->s3 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>lambda->s3</title>
|
||||
<path fill="none" stroke="black" d="M408,-236.73C408,-236.73 408,-165.27 408,-165.27"/>
|
||||
<polygon fill="black" stroke="black" points="411.5,-165.27 408,-155.27 404.5,-165.27 411.5,-165.27"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="445.5" y="-198.5" font-family="Helvetica,sans-Serif" font-size="10.00">download input</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="445.5" y="-185.75" font-family="Helvetica,sans-Serif" font-size="10.00">upload output</text>
|
||||
</g>
|
||||
<!-- bucket_in -->
|
||||
<g id="node10" class="node">
|
||||
<title>bucket_in</title>
|
||||
<polygon fill="none" stroke="black" points="360.75,-58.5 253.25,-58.5 253.25,-16 366.75,-16 366.75,-52.5 360.75,-58.5"/>
|
||||
<polyline fill="none" stroke="black" points="360.75,-58.5 360.75,-52.5"/>
|
||||
<polyline fill="none" stroke="black" points="366.75,-52.5 360.75,-52.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="310" y="-41.2" font-family="Helvetica,sans-Serif" font-size="14.00">mpr-media-in/</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="310" y="-23.95" font-family="Helvetica,sans-Serif" font-size="14.00">input videos</text>
|
||||
</g>
|
||||
<!-- s3->bucket_in -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>s3->bucket_in</title>
|
||||
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M361.09,-136C354.1,-136 349.19,-136 349.19,-136 349.19,-136 349.19,-87.72 349.19,-58.68"/>
|
||||
</g>
|
||||
<!-- bucket_out -->
|
||||
<g id="node11" class="node">
|
||||
<title>bucket_out</title>
|
||||
<polygon fill="none" stroke="black" points="563.12,-58.5 424.88,-58.5 424.88,-16 569.12,-16 569.12,-52.5 563.12,-58.5"/>
|
||||
<polyline fill="none" stroke="black" points="563.12,-58.5 563.12,-52.5"/>
|
||||
<polyline fill="none" stroke="black" points="569.12,-52.5 563.12,-52.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="497" y="-41.2" font-family="Helvetica,sans-Serif" font-size="14.00">mpr-media-out/</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="497" y="-23.95" font-family="Helvetica,sans-Serif" font-size="14.00">transcoded output</text>
|
||||
</g>
|
||||
<!-- s3->bucket_out -->
|
||||
<g id="edge14" class="edge">
|
||||
<title>s3->bucket_out</title>
|
||||
<path fill="none" stroke="black" stroke-dasharray="1,5" d="M439.75,-117.02C439.75,-100.45 439.75,-76.15 439.75,-58.73"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 17 KiB |
Reference in New Issue
Block a user