bdee12f4e9
Replace ASCII-art diagrams across the README and docs/ with editable .drawio sources plus exported PNGs, so the diagrams render clearly in rendered markdown and can be maintained/regenerated instead of being hand-edited as fragile text art. Non-diagram blocks (code, folder trees, UI wireframes) were left as text.
117 lines
8.2 KiB
Plaintext
117 lines
8.2 KiB
Plaintext
<mxfile host="app.diagrams.net">
|
|
<diagram id="topology" name="Topology">
|
|
<mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" arrows="1"
|
|
fold="1" page="1" pageScale="1" pageWidth="1300" pageHeight="900" math="0" shadow="0">
|
|
<root>
|
|
<mxCell id="0" />
|
|
<mxCell id="1" parent="0" />
|
|
|
|
<!-- Central Cluster container -->
|
|
<mxCell id="central" value="Central Cluster" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;verticalAlign=top;fontStyle=1;fontSize=14;" vertex="1" parent="1">
|
|
<mxGeometry x="60" y="60" width="380" height="320" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="cc-a" value="ClusterClient (command/control)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" vertex="1" parent="1">
|
|
<mxGeometry x="90" y="110" width="150" height="50" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="cc-b" value="ClusterClient (command/control)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" vertex="1" parent="1">
|
|
<mxGeometry x="90" y="170" width="150" height="50" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="cc-n" value="ClusterClient (command/control)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" vertex="1" parent="1">
|
|
<mxGeometry x="90" y="230" width="150" height="50" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="grpc-client" value="SiteStreamGrpcClient (real-time data)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" vertex="1" parent="1">
|
|
<mxGeometry x="90" y="300" width="150" height="50" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Site A -->
|
|
<mxCell id="siteA" value="Site A Cluster" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;verticalAlign=top;fontStyle=1;fontSize=14;" vertex="1" parent="1">
|
|
<mxGeometry x="720" y="60" width="380" height="250" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="siteA-comm" value="SiteCommunicationActor (via Receptionist)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" vertex="1" parent="1">
|
|
<mxGeometry x="760" y="110" width="190" height="50" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="siteA-grpc" value="SiteStreamGrpcServer (Kestrel HTTP/2, port 8083)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" vertex="1" parent="1">
|
|
<mxGeometry x="760" y="180" width="190" height="50" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="siteA-clusterclient" value="ClusterClient → Central (CentralCommunicationActor)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="760" y="245" width="190" height="50" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Site B -->
|
|
<mxCell id="siteB" value="Site B Cluster" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;verticalAlign=top;fontStyle=1;fontSize=14;" vertex="1" parent="1">
|
|
<mxGeometry x="720" y="370" width="380" height="130" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="siteB-comm" value="SiteCommunicationActor (via Receptionist)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" vertex="1" parent="1">
|
|
<mxGeometry x="760" y="410" width="190" height="40" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="siteB-grpc" value="SiteStreamGrpcServer" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" vertex="1" parent="1">
|
|
<mxGeometry x="760" y="455" width="190" height="35" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Site N -->
|
|
<mxCell id="siteN" value="Site N Cluster" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;verticalAlign=top;fontStyle=1;fontSize=14;" vertex="1" parent="1">
|
|
<mxGeometry x="720" y="560" width="380" height="130" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="siteN-comm" value="SiteCommunicationActor (via Receptionist)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;" vertex="1" parent="1">
|
|
<mxGeometry x="760" y="600" width="190" height="40" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="siteN-grpc" value="SiteStreamGrpcServer" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;" vertex="1" parent="1">
|
|
<mxGeometry x="760" y="645" width="190" height="35" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- Command/control edges: Central ClusterClients -> Site comm actors -->
|
|
<mxCell id="e-cca" value="command/control" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;fontSize=11;" edge="1" parent="1" source="cc-a" target="siteA-comm">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="e-ccb" value="command/control" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;fontSize=11;" edge="1" parent="1" source="cc-b" target="siteB-comm">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
<mxCell id="e-ccn" value="command/control" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;fontSize=11;" edge="1" parent="1" source="cc-n" target="siteN-comm">
|
|
<mxGeometry relative="1" as="geometry" />
|
|
</mxCell>
|
|
|
|
<!-- gRPC stream edges: site servers -> central grpc client (data flows site->central) -->
|
|
<mxCell id="e-grpca" value="gRPC stream (real-time data)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;fontSize=11;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="siteA-grpc" target="grpc-client">
|
|
<mxGeometry relative="1" as="geometry">
|
|
<Array as="points">
|
|
<mxPoint x="540" y="205" />
|
|
<mxPoint x="540" y="325" />
|
|
</Array>
|
|
</mxGeometry>
|
|
</mxCell>
|
|
<mxCell id="e-grpcb" value="gRPC stream" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;fontSize=11;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="siteB-grpc" target="grpc-client">
|
|
<mxGeometry relative="1" as="geometry">
|
|
<Array as="points">
|
|
<mxPoint x="600" y="472" />
|
|
<mxPoint x="600" y="335" />
|
|
</Array>
|
|
</mxGeometry>
|
|
</mxCell>
|
|
<mxCell id="e-grpcn" value="gRPC stream" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;fontSize=11;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="siteN-grpc" target="grpc-client">
|
|
<mxGeometry relative="1" as="geometry">
|
|
<Array as="points">
|
|
<mxPoint x="660" y="662" />
|
|
<mxPoint x="660" y="345" />
|
|
</Array>
|
|
</mxGeometry>
|
|
</mxCell>
|
|
|
|
<!-- Site A -> Central command/control (ClusterClient to central) -->
|
|
<mxCell id="e-sa-central" value="command/control" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;fontSize=11;dashed=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.7;entryDx=0;entryDy=0;" edge="1" parent="1" source="siteA-clusterclient" target="central">
|
|
<mxGeometry relative="1" as="geometry">
|
|
<Array as="points">
|
|
<mxPoint x="480" y="270" />
|
|
<mxPoint x="480" y="284" />
|
|
</Array>
|
|
</mxGeometry>
|
|
</mxCell>
|
|
|
|
<!-- Note: sites do not talk to each other -->
|
|
<mxCell id="note" value="Sites do NOT communicate with each other. All inter-cluster communication flows through Central." style="shape=note;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=11;" vertex="1" parent="1">
|
|
<mxGeometry x="60" y="560" width="380" height="80" as="geometry" />
|
|
</mxCell>
|
|
</root>
|
|
</mxGraphModel>
|
|
</diagram>
|
|
</mxfile>
|