zulip/docs/images/architecture_simple.svg

1012 lines
43 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="2251.0513"
height="1443.7063"
id="svg4152"
version="1.1"
inkscape:version="0.91 r13725"
viewBox="0 0 2251.0513 1443.7063"
sodipodi:docname="system_basic.svg"
inkscape:export-filename="/home/tommy/Documents/gci/system_basic.png"
inkscape:export-xdpi="83.680016"
inkscape:export-ydpi="83.680016">
<defs
id="defs4154">
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker6082"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleInM">
<path
transform="scale(-0.4,-0.4)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
id="path6084"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutM"
orient="auto"
refY="0"
refX="0"
id="marker4933"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path4935"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1pt;stroke-opacity:1"
transform="scale(0.4,0.4)" />
</marker>
<marker
inkscape:stockid="TriangleInM"
orient="auto"
refY="0"
refX="0"
id="marker4815"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
inkscape:connector-curvature="0"
id="path4817"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1pt;stroke-opacity:1"
transform="scale(-0.4,-0.4)" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker17328"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM"
inkscape:collect="always">
<path
transform="scale(0.4,0.4)"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1pt;stroke-opacity:1"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
id="path17330"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker17216"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleInM"
inkscape:collect="always">
<path
transform="scale(-0.4,-0.4)"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1pt;stroke-opacity:1"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
id="path17218"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutM"
orient="auto"
refY="0"
refX="0"
id="marker11972"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path11974"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1pt;stroke-opacity:1"
transform="scale(0.4,0.4)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleInM"
orient="auto"
refY="0"
refX="0"
id="marker11866"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path11868"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1pt;stroke-opacity:1"
transform="scale(-0.4,-0.4)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker6172"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleInM"
inkscape:collect="always">
<path
transform="scale(-0.4,-0.4)"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1pt;stroke-opacity:1"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
id="path6174"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutM"
orient="auto"
refY="0"
refX="0"
id="TriangleOutM"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path4364"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1pt;stroke-opacity:1"
transform="scale(0.4,0.4)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleInM"
orient="auto"
refY="0"
refX="0"
id="marker5422"
style="overflow:visible"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path5424"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#999999;stroke-width:1pt;stroke-opacity:1"
transform="scale(-0.4,-0.4)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleOutL"
orient="auto"
refY="0"
refX="0"
id="TriangleOutL"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4361"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1pt;stroke-opacity:1"
transform="scale(0.8,0.8)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleInL"
orient="auto"
refY="0"
refX="0"
id="marker4642"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4644"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
style="fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1pt;stroke-opacity:1"
transform="scale(-0.8,-0.8)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0"
refX="0"
id="marker4590"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4592"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#666666;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(1.1,0,0,1.1,1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0"
refX="0"
id="marker4545"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4237"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#666666;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(1.1,0,0,1.1,1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleInM"
orient="auto"
refY="0"
refX="0"
id="TriangleInM"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4355"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#666666;stroke-width:1pt;stroke-opacity:1"
transform="scale(-0.4,-0.4)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="TriangleInL"
orient="auto"
refY="0"
refX="0"
id="TriangleInL"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4352"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#666666;stroke-width:1pt;stroke-opacity:1"
transform="scale(-0.8,-0.8)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lstart"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path4743"
style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:#666666;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(1.1,0,0,1.1,1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<inkscape:path-effect
effect="powerstroke"
id="path-effect4717"
is_visible="true"
offset_points="0,0.5"
sort_points="true"
interpolator_type="Linear"
interpolator_beta="0.2"
start_linecap_type="zerowidth"
linejoin_type="round"
miter_limit="4"
end_linecap_type="zerowidth"
cusp_linecap_type="round" />
<marker
markerWidth="266.29822"
markerHeight="236.78403"
refX="129.5909"
refY="153.74734"
orient="auto"
id="marker4704">
<path
inkscape:transform-center-y="-35.355339"
inkscape:transform-center-x="-3.558206"
d="M 266.29821,224.45803 -6.5290075e-6,236.78401 122.47448,-3.3464297e-6 Z"
inkscape:randomized="0"
inkscape:rounded="0"
inkscape:flatsided="true"
sodipodi:arg2="1.5245429"
sodipodi:arg1="0.47734538"
sodipodi:r2="76.955978"
sodipodi:r1="153.91196"
sodipodi:cy="153.74734"
sodipodi:cx="129.5909"
sodipodi:sides="3"
id="path4702"
style="opacity:1;fill:#666666;fill-opacity:1;stroke:none;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
sodipodi:type="star" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="0.35708316"
inkscape:cx="1082.5659"
inkscape:cy="712.19193"
inkscape:document-units="px"
inkscape:current-layer="layer3"
showgrid="false"
inkscape:showpageshadow="false"
borderlayer="true"
inkscape:window-width="1366"
inkscape:window-height="716"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:snap-global="true"
fit-margin-top="50"
fit-margin-left="50"
fit-margin-right="50"
fit-margin-bottom="50" />
<metadata
id="metadata4157">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by/3.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by/3.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Background"
inkscape:groupmode="layer"
transform="translate(-454.98523,1729.0613)"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Database"
transform="translate(-454.98523,-1190.9387)">
<path
inkscape:connector-curvature="0"
d=""
cx="1424.3215"
cy="2675.6086"
rx="180"
ry="174.08916"
id="path11830"
style="opacity:0.97000002;fill:#1976d2;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<g
id="g4416">
<circle
id="circle4409"
style="opacity:0.97000002;fill:#1565c0;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
cy="2246.6667"
cx="900.3476"
r="180" />
<g
id="g4411">
<ellipse
id="circle4402"
style="opacity:0.97000002;fill:#039be5;fill-opacity:1;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
cy="2239.9792"
cx="900.3476"
rx="180"
ry="173.31267" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="765.8017"
y="2259.4841"
id="text11841"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan11843"
x="765.8017"
y="2259.4841"
style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:50px;font-family:Roboto;-inkscape-font-specification:'Roboto Medium';fill:#e8eaf6">PostgreSQL</tspan></text>
</g>
</g>
<path
style="opacity:0.97000002;fill:#999999;fill-rule:evenodd;stroke:#999999;stroke-width:5.34091282;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker11866);marker-end:url(#marker11972)"
d="m 1093.6276,2250.9747 408.2359,0"
id="path11858"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
sodipodi:linespacing="125%"
id="text13376"
y="1959.1974"
x="971.35657"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:0.75;fill:#00bfa5;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:80px;font-family:Roboto;-inkscape-font-specification:Roboto;fill:#03a9f4"
y="1959.1974"
x="971.35657"
id="tspan13378"
sodipodi:role="line">Database</tspan></text>
<rect
rx="0"
ry="28.875956"
y="-933.95203"
x="601.10809"
height="552.62939"
width="724.98999"
id="rect13374"
style="opacity:0.5;fill:none;fill-rule:evenodd;stroke:#03a9f4;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:20, 10;stroke-dashoffset:0;stroke-opacity:1"
transform="translate(0,2920)" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="1126.6213"
y="2225.6379"
id="text14262"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan14264"
x="1126.6213"
y="2225.6379"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;fill:#808080">DB queries</tspan></text>
<text
sodipodi:linespacing="125%"
id="text14858"
y="2473.0166"
x="718.7851"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;fill:#808080"
y="2473.0166"
x="718.7851"
id="tspan14860"
sodipodi:role="line">Persistent data storage</tspan></text>
<rect
style="opacity:0.5;fill:none;fill-rule:evenodd;stroke:#f44336;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:20, 10;stroke-dashoffset:0;stroke-opacity:1"
id="rect18855"
width="2146.0513"
height="956.83954"
x="507.48523"
y="1625.3054"
ry="28.875956"
rx="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Backend"
style="opacity:1"
transform="translate(-454.98523,1729.0613)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:0.75;fill:#00bfa5;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="2204.2158"
y="-907.85754"
id="text4163"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4165"
x="2204.2158"
y="-907.85754"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:80px;font-family:Roboto;-inkscape-font-specification:Roboto;opacity:0.5;fill:#4caf50">Backend</tspan></text>
<rect
style="opacity:0.5;fill:none;fill-rule:evenodd;stroke:#4caf50;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:20, 10;stroke-dashoffset:0;stroke-opacity:1"
id="rect3349"
width="1153.4316"
height="424.00684"
x="1385.6328"
y="-874.86713"
ry="28.875956"
rx="0" />
<path
style="opacity:1;fill:#999999;fill-rule:evenodd;stroke:#999999;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker5422);marker-end:url(#TriangleOutM)"
d="m 1691.9218,-1066.1626 0,319.68528"
id="path4199"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.97000002;fill:none;fill-rule:evenodd;stroke:#999999;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker6172)"
d="m 1728.1552,-1066.3427 0,101.19706 428.2877,0 0,230.29238"
id="path4201"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="2043.5386"
y="-1279.3796"
id="text11796"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan11798"
x="2043.5386"
y="-1279.3796" /></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="1563.3333"
y="-240"
id="text13380"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan13382"
x="1563.3333"
y="-240" /></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="1927.1908"
y="-1156.2931"
id="text13664"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="1927.1908"
y="-1156.2931"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:'Roboto Mono for Powerline';-inkscape-font-specification:'Roboto Mono for Powerline';text-align:start;text-anchor:start;fill:#999999"
id="tspan13668">/static/*</tspan><tspan
sodipodi:role="line"
x="1927.1908"
y="-1112.5431"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;text-align:start;text-anchor:start;fill:#999999"
id="tspan4805">Static asset server</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="1989.2847"
y="-564.81421"
id="text13660"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan13662"
x="1989.2847"
y="-564.81421"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;fill:#808080">Realtime push server</tspan></text>
<flowRoot
xml:space="preserve"
id="flowRoot13698"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"><flowRegion
id="flowRegion13700"><rect
id="rect13702"
width="269.87909"
height="60.104076"
x="1919.7949"
y="1750.2219" /></flowRegion><flowPara
id="flowPara13704" /></flowRoot> <text
sodipodi:linespacing="125%"
id="text14258"
y="-561.4809"
x="1550.264"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;fill:#808080"
y="-561.4809"
x="1550.264"
id="tspan14260"
sodipodi:role="line">Application server</tspan></text>
<path
style="fill:#999999;fill-rule:evenodd;stroke:#999999;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:15, 15;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#marker17216);marker-end:url(#marker17328)"
d="m 1708.6477,-1519.2862 0,291.0507"
id="path17208"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="1872.1224"
y="-1652.8113"
id="text18835"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="1872.1224"
y="-1652.8113"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;text-align:start;text-anchor:start;fill:#999999"
id="tspan18837">Web app</tspan><tspan
sodipodi:role="line"
x="1872.1224"
y="-1609.0613"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;text-align:start;text-anchor:start;fill:#999999"
id="tspan6674">Desktop <tspan
style="fill:#cccccc"
id="tspan6680">(Electron/Qt)</tspan></tspan><tspan
sodipodi:role="line"
x="1872.1224"
y="-1565.3113"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;text-align:start;text-anchor:start;fill:#999999"
id="tspan6676">iOS <tspan
style="fill:#cccccc"
id="tspan6682">(React native)</tspan></tspan><tspan
sodipodi:role="line"
x="1872.1224"
y="-1521.5613"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;text-align:start;text-anchor:start;fill:#999999"
id="tspan6678">Android</tspan></text>
<text
sodipodi:linespacing="125%"
id="text18857"
y="-1332.3333"
x="2455.1602"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:0.75;fill:#00bfa5;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:80px;font-family:Roboto;-inkscape-font-specification:Roboto;opacity:0.55899999;fill:#f44336"
y="-1332.3333"
x="2455.1602"
id="tspan18859"
sodipodi:role="line">Zulip</tspan></text>
<g
id="g4368">
<g
style="fill:#2e7d32"
id="g4167"
transform="translate(1218.387,-1664.6419)">
<g
style="fill:#2e7d32"
transform="translate(-32.998316,-2.3570226)"
id="g4175">
<g
style="fill:#2e7d32"
transform="translate(23.570226,-68.353655)"
id="g4180">
<rect
ry="18.968861"
y="521.43097"
x="353.59869"
height="134.14127"
width="292.18024"
id="rect4169"
style="opacity:1;fill:#2e7d32;fill-opacity:1;stroke:#00bfa5;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text4171"
y="606.27502"
x="422.67465"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#2e7d32;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:50px;font-family:Roboto;-inkscape-font-specification:'Roboto Medium';fill:#2e7d32"
y="606.27502"
x="422.67465"
id="tspan4173"
sodipodi:role="line">NGINX</tspan></text>
</g>
</g>
</g>
<g
transform="translate(1218.387,-1664.6419)"
id="g19395">
<g
id="g19397"
transform="translate(-32.998316,-2.3570226)">
<g
id="g19399"
transform="translate(23.570226,-68.353655)">
<rect
style="opacity:1;fill:#43a047;fill-opacity:1;stroke:#00bfa5;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect19401"
width="292.18024"
height="125.78213"
x="353.59869"
y="521.43097"
ry="18.968861" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="422.67465"
y="606.27502"
id="text19403"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan19405"
x="422.67465"
y="606.27502"
style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:50px;font-family:Roboto;-inkscape-font-specification:'Roboto Medium';fill:#e1f5fe">NGINX</tspan></text>
</g>
</g>
</g>
</g>
<g
id="g4382"
transform="translate(0,0.0908234)">
<g
style="fill:#00695c"
transform="translate(1185.1619,-1258.7962)"
id="g12160">
<rect
style="opacity:1;fill:#00695c;fill-opacity:1;stroke:#00bfa5;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect12144"
width="348.74878"
height="131.78423"
x="332.3855"
y="523.78796"
ry="18.968861" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#00695c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="430.58801"
y="603.09558"
id="text12146"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan12148"
x="430.58801"
y="603.09558"
style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:50px;font-family:Roboto;-inkscape-font-specification:'Roboto Medium';fill:#00695c">django</tspan></text>
</g>
<g
id="g19407"
transform="matrix(1,0,0,1.0136013,1185.1619,-1265.9203)">
<rect
ry="18.968861"
y="523.78796"
x="332.3855"
height="122.91798"
width="348.74878"
id="rect19409"
style="opacity:1;fill:#009688;fill-opacity:1;stroke:#00bfa5;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text19411"
y="603.09558"
x="430.58801"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:50px;font-family:Roboto;-inkscape-font-specification:'Roboto Medium';fill:#e1f5fe"
y="603.09558"
x="430.58801"
id="tspan19413"
sodipodi:role="line">django</tspan></text>
</g>
</g>
<g
id="g4392">
<g
style="fill:#0288d1"
id="g12165"
transform="translate(1648.6722,-1258.7962)">
<rect
ry="18.968861"
y="523.78796"
x="315.88635"
height="131.78423"
width="381.7471"
id="rect12167"
style="opacity:0.97000002;fill:#0288d1;fill-opacity:1;stroke:#00bfa5;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text12169"
y="608.18591"
x="415.71985"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0288d1;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:50px;font-family:Roboto;-inkscape-font-specification:'Roboto Medium';fill:#0288d1"
y="608.18591"
x="415.71985"
id="tspan12171"
sodipodi:role="line">Tornado</tspan></text>
</g>
<g
transform="matrix(1,0,0,1.0136013,1648.6722,-1265.9203)"
id="g19415">
<rect
style="opacity:0.97000002;fill:#29b6f6;fill-opacity:1;stroke:#00bfa5;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect19417"
width="381.74707"
height="122.58911"
x="315.88635"
y="523.78796"
ry="18.968861" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="415.71985"
y="608.18591"
id="text19419"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan19421"
x="415.71985"
y="608.18591"
style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:50px;font-family:Roboto;-inkscape-font-specification:'Roboto Medium';fill:#e1f5fe">Tornado</tspan></text>
</g>
</g>
<g
id="g4669"
transform="translate(-0.41795993,-2.6501464e-6)">
<rect
ry="0"
y="-820.84833"
x="2104.2551"
height="37.583004"
width="104.27901"
id="rect4667"
style="opacity:1;fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text4423"
y="-792.0636"
x="2104.2217"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;fill:#999999"
y="-792.0636"
x="2104.2217"
id="tspan4425"
sodipodi:role="line">Events</tspan></text>
</g>
<g
id="g4689"
transform="translate(-2.4843578,0)">
<rect
y="-1038.6375"
x="1599.2695"
height="44.035774"
width="223.7251"
id="rect4687"
style="opacity:1;fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="1602.5884"
y="-1007.1358"
id="text4683"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="1602.5884"
y="-1007.1358"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;text-align:start;text-anchor:start;fill:#999999"
id="tspan4685">Reverse proxy</tspan></text>
</g>
<path
style="fill:#999999;fill-rule:evenodd;stroke:#999999;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker4815)"
d="m 1869.2274,-1144.4055 50.9979,0"
id="path4807"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<g
transform="translate(0,-2920)"
id="g4676">
<rect
y="2097.4946"
x="1567.0342"
height="40.897015"
width="242.17152"
id="rect4674"
style="opacity:1;fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text11850"
y="2128.6201"
x="1569.8167"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#999999;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;fill:#999999"
y="2128.6201"
x="1569.8167"
id="tspan11852"
sodipodi:role="line">All other routes</tspan></text>
</g>
<path
style="fill:#999999;fill-rule:evenodd;stroke:#999999;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4933)"
d="m 1866.395,-669.11612 83.6647,0"
id="path6074"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Client"
transform="translate(-454.98523,-1190.9387)">
<g
style="opacity:1;fill:#d84315"
id="g16939"
transform="translate(1487.532,792.77009)">
<g
transform="translate(-32.998316,-2.3570226)"
id="g16941"
style="fill:#d84315">
<g
transform="translate(23.570226,-68.353655)"
id="g16943"
style="fill:#d84315">
<g
id="g16957"
transform="translate(-257.46286,10.03102)"
style="fill:#d84315">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#d84315;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="422.67465"
y="606.27502"
id="text16947"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan16949"
x="422.67465"
y="606.27502"
style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:50px;font-family:Roboto;-inkscape-font-specification:'Roboto Medium';fill:#d84315">Client</tspan></text>
</g>
</g>
</g>
</g>
<g
id="g4361">
<rect
ry="18.968861"
y="520.69855"
x="341.91656"
height="134.14127"
width="292.18024"
id="rect16945"
style="opacity:1;fill:#d84315;fill-opacity:1;stroke:#00bfa5;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
transform="translate(1220.6411,732.09043)" />
<g
transform="translate(1220.641,732.09043)"
id="g19387">
<rect
ry="18.968861"
y="520.69855"
x="341.91656"
height="125.51987"
width="292.18024"
id="rect19389"
style="opacity:1;fill:#ff5722;fill-opacity:1;stroke:#00bfa5;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
<text
sodipodi:linespacing="125%"
id="text19391"
y="606.27502"
x="422.67465"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:400;font-stretch:normal;font-size:50px;font-family:Roboto;-inkscape-font-specification:'Roboto Medium';fill:#e1f5fe"
y="606.27502"
x="422.67465"
id="tspan19393"
sodipodi:role="line">Client</tspan></text>
</g>
</g>
<g
id="g4800"
transform="translate(0,4.1375845)">
<g
id="g6069">
<rect
style="opacity:1;fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4694"
width="262.62183"
height="50.023003"
x="1575.85"
y="1497.4863" />
<text
transform="translate(0,2920)"
sodipodi:linespacing="125%"
id="text18587"
y="-1386.6747"
x="1581.3967"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:35px;font-family:Roboto;-inkscape-font-specification:Roboto;text-align:start;text-anchor:start;fill:#999999"
y="-1386.6747"
x="1581.3967"
sodipodi:role="line"
id="tspan18839">HTTPS requests</tspan></text>
</g>
</g>
</g>
</svg>