338 lines
39 KiB
Plaintext
338 lines
39 KiB
Plaintext
<mxfile host="65bd71144e" compressed="false">
|
||
<diagram id="architecture" name="01-总体架构">
|
||
<mxGraphModel dx="2753" dy="1547" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="2560" pageHeight="1440" math="0" shadow="0">
|
||
<root>
|
||
<mxCell id="0"/>
|
||
<mxCell id="1" parent="0"/>
|
||
<mxCell id="a-title" value="<b style="font-size:24px">YMS 更新体系:当前实现与目标架构</b>" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#172B4D;" parent="1" vertex="1">
|
||
<mxGeometry x="40" y="20" width="1180" height="45" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-subtitle" value="容器化主线:宿主机 Nginx 作为稳定入口,Frontend 静态目录留在宿主机,Backend 与 Node SSR 容器化;Native 仅作短期兼容" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=14;fontColor=#42526E;" parent="1" vertex="1">
|
||
<mxGeometry x="40" y="65" width="1450" height="35" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-legend-done" value="已实现" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontStyle=1;" parent="1" vertex="1">
|
||
<mxGeometry x="1190" y="25" width="85" height="30" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-legend-doing" value="当前开发" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFAE6;strokeColor=#FFAB00;fontColor=#7A4B00;fontStyle=1;" parent="1" vertex="1">
|
||
<mxGeometry x="1285" y="25" width="90" height="30" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-legend-plan" value="规划" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontStyle=1;" parent="1" vertex="1">
|
||
<mxGeometry x="1385" y="25" width="75" height="30" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-legend-compat" value="兼容" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F4F5F7;strokeColor=#A5ADBA;fontColor=#42526E;fontStyle=1;" parent="1" vertex="1">
|
||
<mxGeometry x="1470" y="25" width="75" height="30" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-source-group" value="<b>发布与开发侧</b>" style="swimlane;html=1;rounded=1;startSize=42;fillColor=#F4F5F7;swimlaneFillColor=#FFFFFF;strokeColor=#A5ADBA;fontColor=#172B4D;fontSize=15;" parent="1" vertex="1">
|
||
<mxGeometry x="40" y="125" width="270" height="720" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-jenkins" value="<b>Jenkins / 开发人员</b><br><font color="#42526E">构建后通过全局 CLI 触发更新</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=14;spacing=10;" parent="1" vertex="1">
|
||
<mxGeometry x="65" y="195" width="220" height="95" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-deploy" value="<b>Deploy 发布中台</b><br><font color="#42526E">按 customerCode 生成 repack<br>在线镜像 / 离线 ZIP</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=14;spacing=10;" parent="1" vertex="1">
|
||
<mxGeometry x="65" y="355" width="220" height="110" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-ci-note" value="<b>开发环境目标</b><br>同一事务、健康检查、切流和回滚框架<br>镜像按 digest 固定" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=13;spacing=10;" parent="1" vertex="1">
|
||
<mxGeometry x="65" y="545" width="220" height="120" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-offline-note" value="<b>客户现场目标</b><br>PC 下载并校验 repack<br>断网后向服务器续传交付" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;spacing=10;" parent="1" vertex="1">
|
||
<mxGeometry x="65" y="690" width="220" height="115" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-client-group" value="<b>客户 PC:yms-daemon client(规划)</b>" style="swimlane;html=1;rounded=1;startSize=42;fillColor=#DEEBFF;swimlaneFillColor=#F7FAFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=15;" parent="1" vertex="1">
|
||
<mxGeometry x="380" y="130" width="510" height="1105" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-client-protocol" value="<b>PC → Server</b><br>HTTPS:可续传上传 ZIP<br>WSS:提交、快照、进度与断联恢复<br><font color="#42526E">断联不取消服务器事务</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=14;spacing=10;" parent="a-client-group" vertex="1">
|
||
<mxGeometry x="40" y="790" width="280" height="135" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-client-store" value="<b>PC 本地持久化</b><br>SQLite:业务状态与恢复位置<br>文件目录:repack ZIP(不进数据库)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=14;spacing=10;" parent="a-client-group" vertex="1">
|
||
<mxGeometry x="30" y="590" width="280" height="110" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-client-gui" value="<b>client gui</b><br>Wails 3<br>刷新、获取、更新、进度、历史" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=14;spacing=10;" parent="a-client-group" vertex="1">
|
||
<mxGeometry x="220" y="445" width="280" height="100" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-client-service" value="<b>client service</b><br>Windows 后台服务<br>轮询、下载、校验、上传、状态恢复" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=14;spacing=10;" parent="a-client-group" vertex="1">
|
||
<mxGeometry x="100" y="225" width="280" height="105" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-ipc-edge" value="本地 IPC" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=12;" parent="a-client-group" source="a-client-gui" target="a-client-service" edge="1">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-store-edge" value="唯一读写者" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=12;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" parent="a-client-group" source="a-client-service" target="a-client-store" edge="1">
|
||
<mxGeometry x="0.0057" relative="1" as="geometry">
|
||
<mxPoint x="170" y="345" as="sourcePoint"/>
|
||
<mxPoint as="offset"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="a-server-group" value="<b>客户服务器 / 开发服务器</b>" style="swimlane;html=1;rounded=1;startSize=42;fillColor=#F4F5F7;swimlaneFillColor=#FFFFFF;strokeColor=#A5ADBA;fontColor=#172B4D;fontSize=15;" parent="1" vertex="1">
|
||
<mxGeometry x="940" y="137.5" width="1600" height="1110" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-static" value="<b>Frontend 静态目录</b><br>/home/yms/client-releases/&lt;版本&gt;<br>/home/yms/client → 当前版本<br>/home/yms/client-previous → 上一版本" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFAE6;strokeColor=#FFAB00;fontColor=#7A4B00;fontSize=13;spacing=9;" parent="a-server-group" vertex="1">
|
||
<mxGeometry x="1180" y="350" width="385" height="120" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-docker" value="<b>Docker Engine API</b><br>pull / inspect / create / start / stop / remove<br>容器 restart policy = no,由 daemon 统一恢复" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=13;spacing=9;" parent="a-server-group" vertex="1">
|
||
<mxGeometry x="480" y="732.5" width="385" height="100" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-nginx" value="<b>宿主机 Nginx:稳定入口</b><br>静态资源 + Backend 路由 + Node SSR 路由<br><font color="#7A4B00">当前:改写 nginx.conf 受控区块<br>下一步:改为 daemon 专属 include</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFAE6;strokeColor=#FFAB00;fontColor=#7A4B00;fontSize=14;spacing=10;" parent="a-server-group" vertex="1">
|
||
<mxGeometry x="815" y="80" width="385" height="125" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-nginx-static-edge" value="静态文件" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#FFAB00;fontColor=#7A4B00;fontSize=11;" parent="a-server-group" source="a-nginx" target="a-static" edge="1">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-backend" value="<b>Backend 容器蓝绿</b><br>backend-8080 / backend-8081<br>host network<br>镜像 digest + Actuator<br><font color="#006644">稳定态更新已实现</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=13;spacing=9;" parent="a-server-group" vertex="1">
|
||
<mxGeometry x="690" y="350" width="185" height="145" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-nginx-backend-edge" value="业务请求" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#36B37E;fontColor=#006644;fontSize=11;" parent="a-server-group" source="a-nginx" target="a-backend" edge="1">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-docker-backend-edge" value="管理" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#36B37E;fontColor=#006644;fontSize=11;" parent="a-server-group" source="a-docker" target="a-backend" edge="1">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-node" value="<b>Node SSR 容器</b><br>图表渲染服务<br>镜像 digest<br><font color="#0747A6">执行器待实现</font>" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;spacing=9;" parent="a-server-group" vertex="1">
|
||
<mxGeometry x="915" y="350" width="185" height="145" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-nginx-node-edge" value="渲染请求" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=11;" parent="a-server-group" source="a-nginx" target="a-node" edge="1">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-docker-node-edge" value="管理" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=11;dashed=1;" parent="a-server-group" source="a-docker" target="a-node" edge="1">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-daemon" value="<b>yms-daemon serve(systemd)</b><br><br>• 全局 CLI + Unix Socket<br>• TOML 严格配置<br>• flock 单实例锁<br>• SQLite 事务 / 步骤 / 事件<br>• 本地文件 + stdout/journal 日志<br>• 健康检查、切流、补偿和恢复" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=14;spacing=12;align=left;verticalAlign=top;" parent="a-server-group" vertex="1">
|
||
<mxGeometry x="320" y="80" width="330" height="245" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-daemon-nginx-edge" value="切流 / 恢复" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#FFAB00;fontColor=#7A4B00;fontSize=12;" parent="a-server-group" source="a-daemon" target="a-nginx" edge="1">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-daemon-docker-edge" value="Engine API" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#36B37E;fontColor=#006644;fontSize=12;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" parent="a-server-group" source="a-daemon" target="a-docker" edge="1">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-rpm" value="<b>RPM / 静态 Go 二进制</b><br>linux/amd64、linux/arm64<br>CGO_ENABLED=0" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=13;spacing=8;" parent="a-server-group" vertex="1">
|
||
<mxGeometry x="20" y="342.5" width="330" height="85" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-native" value="<b>Native 短期兼容</b><br>systemd 双槽 8080 / 8081<br>不可变 JAR + SHA-256" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F4F5F7;strokeColor=#A5ADBA;fontColor=#42526E;fontSize=13;spacing=8;dashed=1;" parent="a-server-group" vertex="1">
|
||
<mxGeometry x="20" y="442.5" width="330" height="100" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-server-p0" value="<b>首次部署安全底座(已实现)</b><br>非活动 Slot 健康后切流<br>SQLite 已提交部署状态 + 恢复核对" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=13;spacing=8;" parent="a-server-group" vertex="1">
|
||
<mxGeometry x="20" y="572.5" width="330" height="95" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-jenkins-edge" value="CLI 触发" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#36B37E;fontColor=#006644;fontSize=12;" parent="1" source="a-jenkins" target="a-daemon" edge="1">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-deploy-client-edge" value="查询 / 下载 repack" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=12;" parent="1" source="a-deploy" target="a-client-service" edge="1">
|
||
<mxGeometry x="-0.5" y="-10" relative="1" as="geometry">
|
||
<mxPoint as="offset"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="a-client-daemon-edge" value="HTTPS + WSS" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=12;dashed=1;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" parent="1" source="a-client-protocol" target="a-daemon" edge="1">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="a-footer" value="汇报口径:容器承担有生命周期的 Backend / Node SSR;静态资源使用不可变目录 + 原子切换;daemon 是事务、恢复和交付入口。" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#172B4D;strokeColor=#172B4D;fontColor=#FFFFFF;fontSize=14;fontStyle=1;spacing=8;" parent="1" vertex="1">
|
||
<mxGeometry x="172.5" y="1380" width="1515" height="45" as="geometry"/>
|
||
</mxCell>
|
||
</root>
|
||
</mxGraphModel>
|
||
</diagram>
|
||
<diagram id="roadmap" name="02-能力与开发路线">
|
||
<mxGraphModel dx="1600" dy="960" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="960" math="0" shadow="0">
|
||
<root>
|
||
<mxCell id="r0"/>
|
||
<mxCell id="r1" parent="r0"/>
|
||
<mxCell id="r-title" value="<b style="font-size:24px">Daemon 已实现能力与开发路线</b>" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontColor=#172B4D;" vertex="1" parent="r1">
|
||
<mxGeometry x="40" y="20" width="1000" height="45" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-subtitle" value="原则:容器主线优先闭环“新机安装 → 稳态蓝绿 → 硬重启恢复”,随后建设离线交付与客户 PC;Native 保持可用但不继续扩张。" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontColor=#42526E;" vertex="1" parent="r1">
|
||
<mxGeometry x="40" y="65" width="1480" height="35" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-done" value="<b>已实现:事务与 Native 闭环</b>" style="swimlane;html=1;rounded=1;startSize=45;fillColor=#E3FCEF;swimlaneFillColor=#F7FFFB;strokeColor=#57D9A3;fontColor=#006644;fontSize=15;" vertex="1" parent="r1">
|
||
<mxGeometry x="40" y="130" width="350" height="560" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-done-cli" value="<b>单一 CLI / 常驻服务</b><br>serve、update、restart<br>Unix Socket 流式进度、--quite" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="65" y="200" width="300" height="95" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-done-core" value="<b>事务原子性底座</b><br>flock + SQLite + 本地事务文件<br>状态机、步骤意图、幂等、事件、补偿" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="65" y="320" width="300" height="105" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-done-native" value="<b>Native Backend 执行器</b><br>JAR / repack ZIP、SHA-256<br>systemd 双槽、Actuator、切流、同版本重启" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="65" y="450" width="300" height="110" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-done-package" value="<b>工程化交付</b><br>严格 TOML、文件 + journal 日志<br>RPM、systemd、amd64/arm64 静态构建" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="65" y="585" width="300" height="85" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-now" value="<b>当前:容器主线补齐</b>" style="swimlane;html=1;rounded=1;startSize=45;fillColor=#FFFAE6;swimlaneFillColor=#FFFDF5;strokeColor=#FFAB00;fontColor=#7A4B00;fontSize=15;" vertex="1" parent="r1">
|
||
<mxGeometry x="420" y="130" width="350" height="560" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-now-existing" value="<b>容器稳定态更新已实现</b><br>Registry pull → RepoDigest<br>Engine API → 非活动槽 → 健康检查<br>Nginx 切流 → 排空旧容器" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="445" y="200" width="300" height="115" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-now-bootstrap" value="<b>已实现:新机首次容器引导</b><br>部署事实核对 → 创建非活动 Slot<br>健康后首次切流并原子提交部署状态" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="445" y="340" width="300" height="105" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-now-recovery" value="<b>P0:部署状态与开机恢复</b><br>SQLite 记录已提交 Slot / digest<br>硬重启只启动活动容器,禁止双实例漂移" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFAE6;strokeColor=#FFAB00;fontColor=#7A4B00;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="445" y="470" width="300" height="105" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-now-gateway" value="<b>P0:Gateway 收敛</b><br>主 nginx.conf 固定<br>daemon 仅原子管理专属 include" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFAE6;strokeColor=#FFAB00;fontColor=#7A4B00;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="445" y="600" width="300" height="70" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-next" value="<b>下一阶段:完整服务器能力</b>" style="swimlane;html=1;rounded=1;startSize=45;fillColor=#DEEBFF;swimlaneFillColor=#F7FAFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=15;" vertex="1" parent="r1">
|
||
<mxGeometry x="800" y="130" width="350" height="560" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-next-front" value="<b>Frontend 静态执行器</b><br>client-releases 不可变目录<br>current / previous 原子切换与旧资源回源" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="825" y="200" width="300" height="100" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-next-node" value="<b>Node SSR 容器执行器</b><br>镜像 digest、健康检查、更新与恢复" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="825" y="325" width="300" height="80" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-next-command" value="<b>统一命令能力</b><br>rollback、query、service all<br>Jenkins 事务查询与结果回写" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="825" y="430" width="300" height="90" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-next-offline" value="<b>离线交付协议</b><br>manifest、长度 / SHA-256 / digest<br>签名验签、Docker load、HTTPS 续传、WSS" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="825" y="545" width="300" height="105" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-future" value="<b>后续:交付与规模化</b>" style="swimlane;html=1;rounded=1;startSize=45;fillColor=#DEEBFF;swimlaneFillColor=#F7FAFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=15;" vertex="1" parent="r1">
|
||
<mxGeometry x="1180" y="130" width="350" height="560" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-future-client" value="<b>客户 PC 工作台</b><br>Windows Service + Wails 3 GUI<br>SQLite、轮询、获取、更新和断联恢复" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="1205" y="200" width="300" height="105" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-future-migrate" value="<b>客户迁移</b><br>Native → Docker standalone 显式事务<br>失败恢复原运行类型" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="1205" y="335" width="300" height="90" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-future-dist" value="<b>分布式主机</b><br>节点子事务 + 全局编排<br>按节点健康与切流结果汇总" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="1205" y="455" width="300" height="90" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-future-k8s" value="<b>Kubernetes</b><br>OCI 导入内部 Registry<br>digest rollout、readiness、rollback" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;spacing=8;" vertex="1" parent="r1">
|
||
<mxGeometry x="1205" y="575" width="300" height="80" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-edge-1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=block;endFill=1;strokeColor=#36B37E;strokeWidth=3;" edge="1" parent="r1" source="r-done" target="r-now">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-edge-2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=block;endFill=1;strokeColor=#FFAB00;strokeWidth=3;" edge="1" parent="r1" source="r-now" target="r-next">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-edge-3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;endArrow=block;endFill=1;strokeColor=#4C9AFF;strokeWidth=3;" edge="1" parent="r1" source="r-next" target="r-future">
|
||
<mxGeometry relative="1" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-native-lane" value="<b>Native 兼容线(冻结范围)</b>&nbsp;&nbsp; 保留现有 JAR / repack ZIP / systemd 双槽 / restart;新增工作只解决客户迁移与必要缺陷,不让 Native 阻塞容器主线。" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F4F5F7;strokeColor=#A5ADBA;fontColor=#42526E;fontSize=14;spacing=12;dashed=1;" vertex="1" parent="r1">
|
||
<mxGeometry x="40" y="735" width="1490" height="70" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="r-quality" value="<b>贯穿全部阶段的验收线</b>&nbsp;&nbsp; 断电 / 进程终止恢复|状态漂移拒绝|原子文件提交|健康检查失败不切流|amd64 + arm64|CGO_ENABLED=0" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#172B4D;strokeColor=#172B4D;fontColor=#FFFFFF;fontSize=14;spacing=12;" vertex="1" parent="r1">
|
||
<mxGeometry x="40" y="835" width="1490" height="60" as="geometry"/>
|
||
</mxCell>
|
||
</root>
|
||
</mxGraphModel>
|
||
</diagram>
|
||
<diagram id="client" name="03-Client规划与断联恢复">
|
||
<mxGraphModel dx="1600" dy="960" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="960" math="0" shadow="0">
|
||
<root>
|
||
<mxCell id="c0"/>
|
||
<mxCell id="c1" parent="c0"/>
|
||
<mxCell id="c-title" value="<b style="font-size:24px">客户 PC 工作台:操作流程与断联恢复</b>" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontColor=#172B4D;" vertex="1" parent="c1">
|
||
<mxGeometry x="40" y="20" width="1050" height="45" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-subtitle" value="规划状态|同一 Windows 二进制提供 client service 与 client gui 两个入口;GUI 不直接访问中台、SQLite 或客户服务器。" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=14;fontColor=#42526E;" vertex="1" parent="c1">
|
||
<mxGeometry x="40" y="65" width="1450" height="35" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-deploy" value="<b>Deploy 发布中台</b><br>customerCode 隔离的 repack" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=14;spacing=8;" vertex="1" parent="c1">
|
||
<mxGeometry x="40" y="125" width="250" height="75" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-gui" value="<b>client gui</b><br>Wails 3:用户交互" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=14;spacing=8;" vertex="1" parent="c1">
|
||
<mxGeometry x="345" y="125" width="250" height="75" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-service" value="<b>client service</b><br>Windows 后台服务:唯一业务执行者" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=14;spacing=8;" vertex="1" parent="c1">
|
||
<mxGeometry x="650" y="125" width="270" height="75" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-store" value="<b>PC 本地状态</b><br>SQLite + repack 文件目录" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#DEEBFF;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=14;spacing=8;" vertex="1" parent="c1">
|
||
<mxGeometry x="975" y="125" width="250" height="75" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-daemon" value="<b>客户服务器 daemon</b><br>上传、事务与更新执行" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3FCEF;strokeColor=#57D9A3;fontColor=#006644;fontSize=14;spacing=8;" vertex="1" parent="c1">
|
||
<mxGeometry x="1280" y="125" width="270" height="75" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-life-deploy" value="" style="shape=line;html=1;strokeColor=#A5ADBA;dashed=1;" vertex="1" parent="c1">
|
||
<mxGeometry x="164" y="200" width="1" height="590" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-life-gui" value="" style="shape=line;html=1;strokeColor=#A5ADBA;dashed=1;" vertex="1" parent="c1">
|
||
<mxGeometry x="469" y="200" width="1" height="590" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-life-service" value="" style="shape=line;html=1;strokeColor=#A5ADBA;dashed=1;" vertex="1" parent="c1">
|
||
<mxGeometry x="784" y="200" width="1" height="590" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-life-store" value="" style="shape=line;html=1;strokeColor=#A5ADBA;dashed=1;" vertex="1" parent="c1">
|
||
<mxGeometry x="1099" y="200" width="1" height="590" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-life-daemon" value="" style="shape=line;html=1;strokeColor=#A5ADBA;dashed=1;" vertex="1" parent="c1">
|
||
<mxGeometry x="1414" y="200" width="1" height="590" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-msg1" value="1 后台轮询:按 customerCode 查询可用 repack" style="endArrow=block;endFill=1;html=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;" edge="1" parent="c1">
|
||
<mxGeometry relative="1" as="geometry">
|
||
<mxPoint x="785" y="235" as="sourcePoint"/>
|
||
<mxPoint x="165" y="235" as="targetPoint"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="c-msg2" value="2 返回包身份、版本、长度、SHA-256 与下载信息" style="endArrow=block;endFill=1;html=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;" edge="1" parent="c1">
|
||
<mxGeometry relative="1" as="geometry">
|
||
<mxPoint x="165" y="285" as="sourcePoint"/>
|
||
<mxPoint x="785" y="285" as="targetPoint"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="c-msg3" value="3 SQLite 登记版本;本地 IPC 刷新 GUI" style="endArrow=block;endFill=1;html=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;" edge="1" parent="c1">
|
||
<mxGeometry relative="1" as="geometry">
|
||
<mxPoint x="785" y="335" as="sourcePoint"/>
|
||
<mxPoint x="470" y="335" as="targetPoint"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="c-msg4" value="4 用户点击“获取”" style="endArrow=block;endFill=1;html=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;" edge="1" parent="c1">
|
||
<mxGeometry relative="1" as="geometry">
|
||
<mxPoint x="470" y="385" as="sourcePoint"/>
|
||
<mxPoint x="785" y="385" as="targetPoint"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="c-msg5" value="5 Range 下载;校验长度、整包 SHA-256、签名与 manifest" style="endArrow=block;endFill=1;html=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;" edge="1" parent="c1">
|
||
<mxGeometry relative="1" as="geometry">
|
||
<mxPoint x="785" y="435" as="sourcePoint"/>
|
||
<mxPoint x="165" y="435" as="targetPoint"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="c-msg6" value="6 ZIP 原子进入可交付目录;SQLite 提交已校验状态" style="endArrow=block;endFill=1;html=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;" edge="1" parent="c1">
|
||
<mxGeometry relative="1" as="geometry">
|
||
<mxPoint x="785" y="485" as="sourcePoint"/>
|
||
<mxPoint x="1100" y="485" as="targetPoint"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="c-msg7" value="7 用户点击“更新”并选择已登记服务器 / service" style="endArrow=block;endFill=1;html=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;" edge="1" parent="c1">
|
||
<mxGeometry relative="1" as="geometry">
|
||
<mxPoint x="470" y="535" as="sourcePoint"/>
|
||
<mxPoint x="785" y="535" as="targetPoint"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="c-msg8" value="8 HTTPS:创建上传、HEAD 查询偏移、PATCH 续传 ZIP" style="endArrow=block;endFill=1;html=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;" edge="1" parent="c1">
|
||
<mxGeometry relative="1" as="geometry">
|
||
<mxPoint x="785" y="585" as="sourcePoint"/>
|
||
<mxPoint x="1415" y="585" as="targetPoint"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="c-msg9" value="9 WSS:提交幂等更新请求;服务器事务脱离连接独立执行" style="endArrow=block;endFill=1;html=1;strokeColor=#36B37E;fontColor=#006644;fontSize=13;" edge="1" parent="c1">
|
||
<mxGeometry relative="1" as="geometry">
|
||
<mxPoint x="785" y="635" as="sourcePoint"/>
|
||
<mxPoint x="1415" y="635" as="targetPoint"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="c-msg10" value="10 事务快照、进度与日志摘要;按事件位置恢复订阅" style="endArrow=block;endFill=1;html=1;strokeColor=#36B37E;fontColor=#006644;fontSize=13;" edge="1" parent="c1">
|
||
<mxGeometry relative="1" as="geometry">
|
||
<mxPoint x="1415" y="685" as="sourcePoint"/>
|
||
<mxPoint x="785" y="685" as="targetPoint"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="c-msg11" value="11 本地 IPC 更新 GUI;SQLite 保存上传偏移、事务 ID 与最后事件位置" style="endArrow=block;endFill=1;html=1;strokeColor=#4C9AFF;fontColor=#0747A6;fontSize=13;" edge="1" parent="c1">
|
||
<mxGeometry relative="1" as="geometry">
|
||
<mxPoint x="785" y="735" as="sourcePoint"/>
|
||
<mxPoint x="470" y="735" as="targetPoint"/>
|
||
</mxGeometry>
|
||
</mxCell>
|
||
<mxCell id="c-recovery" value="<b>断联恢复原则</b>&nbsp;&nbsp; 上传中断:从 daemon 已确认偏移续传|提交响应丢失:按幂等标识查询,不重复创建|事务执行中断联:服务器继续切流或回滚|PC 重启:从 SQLite + 文件实际状态恢复" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFAE6;strokeColor=#FFAB00;fontColor=#7A4B00;fontSize=14;spacing=12;" vertex="1" parent="c1">
|
||
<mxGeometry x="40" y="805" width="1510" height="70" as="geometry"/>
|
||
</mxCell>
|
||
<mxCell id="c-build" value="<b>交付约束</b>&nbsp;&nbsp; Windows amd64 / arm64|CGO_ENABLED=0|SQLite 驱动不得依赖 CGO|GUI 退出不影响后台轮询、下载、上传和服务器事务跟踪" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#172B4D;strokeColor=#172B4D;fontColor=#FFFFFF;fontSize=14;spacing=12;" vertex="1" parent="c1">
|
||
<mxGeometry x="40" y="890" width="1510" height="45" as="geometry"/>
|
||
</mxCell>
|
||
</root>
|
||
</mxGraphModel>
|
||
</diagram>
|
||
</mxfile>
|