<mxfile host="app.diagrams.net" modified="2026-08-12T00:00:00.000Z" agent="TECHSpherex-AI" version="24.0.0" type="device">
  <diagram name="Kien truc LLM noi bo" id="arch-llm-noi-bo">
    <mxGraphModel dx="1700" dy="1300" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1700" pageHeight="1300" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />

        <mxCell id="title" value="Kiến trúc cụm inference LLM nội bộ — vLLM · LiteLLM · Portainer CE · Netdata" style="text;html=1;align=left;verticalAlign=middle;fontSize=18;fontStyle=1;fontFamily=Segoe UI;fontColor=#333333;" vertex="1" parent="1">
          <mxGeometry x="60" y="10" width="900" height="36" as="geometry" />
        </mxCell>

        <mxCell id="B1" value="Vùng người dùng — mạng nội bộ / VPN" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;dashed=1;strokeColor=#666666;verticalAlign=top;align=left;spacingLeft=10;spacingTop=4;fontSize=13;fontStyle=1;fontFamily=Segoe UI;fontColor=#333333;" vertex="1" parent="1">
          <mxGeometry x="60" y="60" width="760" height="160" as="geometry" />
        </mxCell>
        <mxCell id="B2" value="Vùng biên (DMZ) — TLS &amp;amp; xác thực" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;dashed=1;strokeColor=#666666;verticalAlign=top;align=left;spacingLeft=10;spacingTop=4;fontSize=13;fontStyle=1;fontFamily=Segoe UI;fontColor=#333333;" vertex="1" parent="1">
          <mxGeometry x="60" y="260" width="760" height="140" as="geometry" />
        </mxCell>
        <mxCell id="B3" value="Lớp ứng dụng" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;dashed=1;strokeColor=#666666;verticalAlign=top;align=left;spacingLeft=10;spacingTop=4;fontSize=13;fontStyle=1;fontFamily=Segoe UI;fontColor=#333333;" vertex="1" parent="1">
          <mxGeometry x="60" y="440" width="760" height="140" as="geometry" />
        </mxCell>
        <mxCell id="B4" value="Lớp gateway" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;dashed=1;strokeColor=#666666;verticalAlign=top;align=left;spacingLeft=10;spacingTop=4;fontSize=13;fontStyle=1;fontFamily=Segoe UI;fontColor=#333333;" vertex="1" parent="1">
          <mxGeometry x="60" y="620" width="760" height="140" as="geometry" />
        </mxCell>
        <mxCell id="B5" value="Lớp serving — Docker host GPU · network ai-net" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;dashed=1;strokeColor=#666666;verticalAlign=top;align=left;spacingLeft=10;spacingTop=4;fontSize=13;fontStyle=1;fontFamily=Segoe UI;fontColor=#333333;" vertex="1" parent="1">
          <mxGeometry x="60" y="800" width="760" height="180" as="geometry" />
        </mxCell>
        <mxCell id="B6" value="Lớp hạ tầng &amp;amp; dữ liệu" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;dashed=1;strokeColor=#666666;verticalAlign=top;align=left;spacingLeft=10;spacingTop=4;fontSize=13;fontStyle=1;fontFamily=Segoe UI;fontColor=#333333;" vertex="1" parent="1">
          <mxGeometry x="60" y="1020" width="760" height="180" as="geometry" />
        </mxCell>
        <mxCell id="B7" value="Lớp vận hành — control plane &amp;amp; observability" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;dashed=1;strokeColor=#666666;verticalAlign=top;align=left;spacingLeft=10;spacingTop=4;fontSize=13;fontStyle=1;fontFamily=Segoe UI;fontColor=#333333;" vertex="1" parent="1">
          <mxGeometry x="880" y="260" width="700" height="720" as="geometry" />
        </mxCell>

        <mxCell id="N1" value="Nhân viên nội bộ" style="shape=umlActor;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;html=1;outlineConnect=0;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="170" y="110" width="40" height="60" as="geometry" />
        </mxCell>
        <mxCell id="N2" value="Hệ thống nghiệp vụ nội bộ&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;CRM · ticket · workflow&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="440" y="110" width="240" height="60" as="geometry" />
        </mxCell>

        <mxCell id="N3" value="Reverse proxy — Nginx / Caddy&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;TLS · rate limit · IP allowlist&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="140" y="300" width="280" height="60" as="geometry" />
        </mxCell>
        <mxCell id="N4" value="SSO / OIDC&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;định danh người dùng&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="520" y="300" width="220" height="60" as="geometry" />
        </mxCell>

        <mxCell id="N5" value="Open WebUI&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;giao diện chat cho người dùng&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="140" y="480" width="280" height="60" as="geometry" />
        </mxCell>
        <mxCell id="N6" value="RAG / Agent service&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;API nội bộ&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="520" y="480" width="220" height="60" as="geometry" />
        </mxCell>

        <mxCell id="N7" value="LiteLLM Proxy&amp;nbsp; :4000&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;định tuyến · API key · quota · fallback · logging&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="240" y="660" width="360" height="60" as="geometry" />
        </mxCell>

        <mxCell id="N8" value="vLLM container A&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;qwen2.5-7b · GPU 0 · :8001&lt;br&gt;PagedAttention · prefix caching&lt;br&gt;healthcheck start_period 600s&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="120" y="850" width="280" height="80" as="geometry" />
        </mxCell>
        <mxCell id="N9" value="vLLM container B&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;llama3.1-8b · GPU 1 · :8002&lt;br&gt;PagedAttention · prefix caching&lt;br&gt;healthcheck start_period 600s&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="480" y="850" width="280" height="80" as="geometry" />
        </mxCell>

        <mxCell id="N10" value="hf-cache&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;volume weight&lt;/font&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="100" y="1060" width="150" height="100" as="geometry" />
        </mxCell>
        <mxCell id="N11" value="MinIO&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;model registry S3&lt;/font&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fillColor=#e1d5e7;strokeColor=#9673a6;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="290" y="1060" width="150" height="100" as="geometry" />
        </mxCell>
        <mxCell id="N12" value="NVIDIA Container Toolkit&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;driver ≥ 550 · runtime nvidia&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="480" y="1070" width="160" height="80" as="geometry" />
        </mxCell>
        <mxCell id="N19" value="Hugging Face Hub" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=11;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="670" y="1070" width="140" height="80" as="geometry" />
        </mxCell>

        <mxCell id="N13" value="Portainer CE&amp;nbsp; :9443&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;stack · log · exec · healthcheck&lt;br&gt;giới hạn tài nguyên · RBAC&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="920" y="310" width="300" height="90" as="geometry" />
        </mxCell>
        <mxCell id="N14" value="Git repo&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;infra/vllm/docker-compose.yml&lt;/font&gt;" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="1280" y="310" width="260" height="90" as="geometry" />
        </mxCell>

        <mxCell id="N16" value="go.d / prometheus collector&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;metrics ứng dụng: TTFT · KV cache&lt;br&gt;num_requests_running / waiting&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="920" y="520" width="300" height="90" as="geometry" />
        </mxCell>
        <mxCell id="N17" value="nvidia_smi + cgroups collector&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;GPU util · VRAM · nhiệt độ&lt;br&gt;CPU/RAM/IO từng container&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="1280" y="520" width="260" height="90" as="geometry" />
        </mxCell>
        <mxCell id="N15" value="Netdata Agent&amp;nbsp; :19999&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;dbengine nhiều tầng · dashboard tự sinh&lt;br&gt;health engine (health.d/vllm.conf)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="1020" y="700" width="380" height="100" as="geometry" />
        </mxCell>
        <mxCell id="N18" value="Telegram / Slack&lt;br&gt;&lt;font style=&quot;font-size:11px&quot;&gt;kênh cảnh báo&lt;/font&gt;" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;fontSize=12;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="1120" y="870" width="260" height="80" as="geometry" />
        </mxCell>

        <mxCell id="E1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;strokeColor=#333333;fontSize=10;fontFamily=Segoe UI;" edge="1" parent="1" source="N1" target="N3">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="E2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#333333;fontSize=10;fontFamily=Segoe UI;" edge="1" parent="1" source="N2" target="N3">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="500" y="240" />
              <mxPoint x="280" y="240" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E3" value="xác thực OIDC" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;strokeColor=#666666;fontSize=10;fontFamily=Segoe UI;" edge="1" parent="1" source="N3" target="N4">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="E4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#333333;fontSize=10;fontFamily=Segoe UI;" edge="1" parent="1" source="N3" target="N5">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="E5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#333333;fontSize=10;fontFamily=Segoe UI;" edge="1" parent="1" source="N3" target="N6">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="350" y="410" />
              <mxPoint x="630" y="410" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;strokeColor=#333333;fontSize=10;fontFamily=Segoe UI;" edge="1" parent="1" source="N5" target="N7">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="280" y="600" />
              <mxPoint x="330" y="600" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;strokeColor=#333333;fontSize=10;fontFamily=Segoe UI;" edge="1" parent="1" source="N6" target="N7">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="630" y="600" />
              <mxPoint x="510" y="600" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E8" value="OpenAI-compatible&lt;br&gt;/v1/chat/completions" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#333333;fontSize=10;fontFamily=Segoe UI;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="N7" target="N8">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="330" y="790" />
              <mxPoint x="260" y="790" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#333333;fontSize=10;fontFamily=Segoe UI;" edge="1" parent="1" source="N7" target="N9">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="510" y="790" />
              <mxPoint x="620" y="790" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E10" value="đọc weight" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;strokeColor=#333333;fontSize=10;fontFamily=Segoe UI;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="N8" target="N10">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="190" y="1000" />
              <mxPoint x="137" y="1000" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;strokeColor=#333333;fontSize=10;fontFamily=Segoe UI;" edge="1" parent="1" source="N9" target="N10">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="550" y="1000" />
              <mxPoint x="212" y="1000" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E12" value="GPU passthrough&lt;br&gt;device_ids · ipc host" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;dashed=1;strokeColor=#d6b656;fontSize=10;fontFamily=Segoe UI;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="N12" target="B5">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="600" y="1000" />
              <mxPoint x="630" y="1000" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E13" value="đồng bộ" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;dashed=1;strokeColor=#9673a6;fontSize=10;fontFamily=Segoe UI;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="N11" target="N10">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="E14" value="tải weight lần đầu (HF_TOKEN)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;dashed=1;strokeColor=#666666;fontSize=10;fontFamily=Segoe UI;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="N19" target="N10">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="740" y="1185" />
              <mxPoint x="175" y="1185" />
            </Array>
          </mxGeometry>
        </mxCell>

        <mxCell id="E15" value="GitOps: polling / webhook" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;dashed=1;strokeColor=#d79b00;fontSize=10;fontFamily=Segoe UI;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="N14" target="N13">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="E16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;strokeColor=#82b366;fontSize=10;fontFamily=Segoe UI;" edge="1" parent="1" source="N16" target="N15">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1070" y="660" />
              <mxPoint x="1115" y="660" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;strokeColor=#82b366;fontSize=10;fontFamily=Segoe UI;" edge="1" parent="1" source="N17" target="N15">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1410" y="660" />
              <mxPoint x="1305" y="660" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E18" value="alarm: num_requests_waiting&lt;br&gt;gpu_cache_usage_perc" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#82b366;fontSize=10;fontFamily=Segoe UI;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="N15" target="N18">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>

        <mxCell id="E19" value="deploy · redeploy&lt;br&gt;log · exec" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.15;entryDx=0;entryDy=0;dashed=1;strokeColor=#d79b00;fontSize=10;fontFamily=Segoe UI;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="N13" target="B5">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="835" y="355" />
              <mxPoint x="835" y="827" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E20" value="scrape :8001 / :8002&lt;br&gt;/metrics (vllm:*)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;dashed=1;strokeColor=#82b366;fontSize=10;fontFamily=Segoe UI;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="N16" target="B5">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="845" y="565" />
              <mxPoint x="845" y="890" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="E21" value="cgroup · GPU&lt;br&gt;docker.sock (ro)" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.85;entryDx=0;entryDy=0;dashed=1;strokeColor=#82b366;fontSize=10;fontFamily=Segoe UI;labelBackgroundColor=#ffffff;" edge="1" parent="1" source="N15" target="B5">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="875" y="750" />
              <mxPoint x="875" y="953" />
            </Array>
          </mxGeometry>
        </mxCell>

        <mxCell id="LG" value="Chú giải" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#666666;verticalAlign=top;align=left;spacingLeft=10;spacingTop=4;fontSize=13;fontStyle=1;fontFamily=Segoe UI;fontColor=#333333;" vertex="1" parent="1">
          <mxGeometry x="880" y="1010" width="420" height="220" as="geometry" />
        </mxCell>
        <mxCell id="LG1s" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
          <mxGeometry x="900" y="1045" width="18" height="14" as="geometry" />
        </mxCell>
        <mxCell id="LG1t" value="Dịch vụ / container ứng dụng" style="text;html=1;align=left;verticalAlign=middle;fontSize=11;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="926" y="1044" width="350" height="16" as="geometry" />
        </mxCell>
        <mxCell id="LG2s" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" vertex="1" parent="1">
          <mxGeometry x="900" y="1070" width="18" height="14" as="geometry" />
        </mxCell>
        <mxCell id="LG2t" value="Lưu trữ — volume · object storage" style="text;html=1;align=left;verticalAlign=middle;fontSize=11;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="926" y="1069" width="350" height="16" as="geometry" />
        </mxCell>
        <mxCell id="LG3s" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" vertex="1" parent="1">
          <mxGeometry x="900" y="1095" width="18" height="14" as="geometry" />
        </mxCell>
        <mxCell id="LG3t" value="Control plane — Portainer · GitOps" style="text;html=1;align=left;verticalAlign=middle;fontSize=11;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="926" y="1094" width="350" height="16" as="geometry" />
        </mxCell>
        <mxCell id="LG4s" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
          <mxGeometry x="900" y="1120" width="18" height="14" as="geometry" />
        </mxCell>
        <mxCell id="LG4t" value="Observability — Netdata · collector · alarm" style="text;html=1;align=left;verticalAlign=middle;fontSize=11;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="926" y="1119" width="350" height="16" as="geometry" />
        </mxCell>
        <mxCell id="LG5s" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
          <mxGeometry x="900" y="1145" width="18" height="14" as="geometry" />
        </mxCell>
        <mxCell id="LG5t" value="Hạ tầng nền — GPU runtime · driver" style="text;html=1;align=left;verticalAlign=middle;fontSize=11;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="926" y="1144" width="350" height="16" as="geometry" />
        </mxCell>
        <mxCell id="LG6s" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;" vertex="1" parent="1">
          <mxGeometry x="900" y="1170" width="18" height="14" as="geometry" />
        </mxCell>
        <mxCell id="LG6t" value="Hệ thống ngoài / bên thứ ba" style="text;html=1;align=left;verticalAlign=middle;fontSize=11;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="926" y="1169" width="350" height="16" as="geometry" />
        </mxCell>
        <mxCell id="LG7s" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#666666;dashed=1;" vertex="1" parent="1">
          <mxGeometry x="900" y="1195" width="18" height="14" as="geometry" />
        </mxCell>
        <mxCell id="LG7t" value="Nét liền = luồng request · nét đứt = luồng vận hành" style="text;html=1;align=left;verticalAlign=middle;fontSize=11;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="926" y="1194" width="360" height="16" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
