Files
boss/docs/source-material/ha_modes_cn.svg
2026-03-26 23:16:56 +08:00

94 lines
6.3 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<svg width="1600" height="980" viewBox="0 0 1600 980" xmlns="http://www.w3.org/2000/svg">
<defs>
<style>
.bg { fill: #f7f8fc; }
.title { font: 700 34px -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif; fill: #1d2736; }
.sub { font: 500 16px -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif; fill: #526070; }
.panel { fill: #ffffff; stroke: #d8deea; stroke-width: 2; rx: 24; ry: 24; }
.panelTitle { font: 700 24px -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif; fill: #17212e; }
.panelSub { font: 500 15px -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif; fill: #5a6878; }
.boxBlue { fill: #eef5ff; stroke: #8cb5ff; stroke-width: 2; rx: 18; ry: 18; }
.boxGreen { fill: #eefaf2; stroke: #8dcca1; stroke-width: 2; rx: 18; ry: 18; }
.boxOrange { fill: #fff6ea; stroke: #f0b56a; stroke-width: 2; rx: 18; ry: 18; }
.boxGray { fill: #f5f7fb; stroke: #cfd8e6; stroke-width: 2; rx: 18; ry: 18; }
.boxTitle { font: 700 18px -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif; fill: #1e2a39; }
.boxText { font: 500 14px -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif; fill: #556273; }
.tech { font: 600 13px -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif; fill: #3d6fd6; }
.foot { font: 600 13px -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", sans-serif; fill: #7a8796; }
.arrow { stroke: #6f7f95; stroke-width: 3; fill: none; marker-end: url(#arrowhead); }
</style>
<marker id="arrowhead" markerWidth="10" markerHeight="8" refX="9" refY="4" orient="auto">
<polygon points="0 0, 10 4, 0 8" fill="#6f7f95"/>
</marker>
</defs>
<rect class="bg" x="0" y="0" width="1600" height="980"/>
<text class="title" x="70" y="70">容灾保活两种部署模式</text>
<text class="sub" x="70" y="104">系统同时支持“单云 + 单 Mac 备用控制器”和“双云热备 / 温备”,按成本与可用性选择。</text>
<rect class="panel" x="60" y="140" width="710" height="760"/>
<text class="panelTitle" x="90" y="190">模式 A单云 + 单 Mac 备用控制器</text>
<text class="panelSub" x="90" y="220">更省云成本,适合已有常开 Mac 的现场环境。</text>
<rect class="boxBlue" x="100" y="270" width="250" height="150"/>
<text class="boxTitle" x="126" y="305">Cloud A主用</text>
<text class="boxText" x="126" y="338">控制面单体</text>
<text class="boxText" x="126" y="364">PostgreSQL 主库 + pgvector</text>
<text class="boxText" x="126" y="390">HTTP + SSE</text>
<rect class="boxGreen" x="420" y="270" width="290" height="180"/>
<text class="boxTitle" x="446" y="305">Standby Mac备用</text>
<text class="boxText" x="446" y="338">备用控制面轻实例</text>
<text class="boxText" x="446" y="364">PostgreSQL 备库 / 快照恢复实例</text>
<text class="boxText" x="446" y="390">Standby Controller</text>
<text class="boxText" x="446" y="416">Ops Rescue Gateway</text>
<path class="arrow" d="M350 345 C385 345, 390 345, 420 345"/>
<rect class="boxOrange" x="100" y="500" width="610" height="160"/>
<text class="boxTitle" x="126" y="536">必要前提</text>
<text class="boxText" x="126" y="570">1. 备用 Mac 必须常开,并保留可用磁盘做备份与恢复。</text>
<text class="boxText" x="126" y="598">2. 手机 App 必须支持主 / 备 endpoint 列表切换。</text>
<text class="boxText" x="126" y="626">3. 必须有一条不依赖主云的可达通路同局域网、Tailscale/WireGuard 或长期反向隧道。</text>
<rect class="boxGray" x="100" y="700" width="610" height="150"/>
<text class="boxTitle" x="126" y="736">优点与边界</text>
<text class="boxText" x="126" y="770">优点:更省钱,本地接管更快,适合已有常开 Mac mini 的环境。</text>
<text class="boxText" x="126" y="798">边界:如果云和现场 Mac 同时断电 / 断网,这条备援链也会失效。</text>
<text class="tech" x="126" y="826">建议最低M1 / 8GB / 50GB可用更稳16GB / 100GB</text>
<rect class="panel" x="830" y="140" width="710" height="760"/>
<text class="panelTitle" x="860" y="190">模式 B双云热备 / 温备</text>
<text class="panelSub" x="860" y="220">更强的远程连续性,适合把备援独立于现场设备之外。</text>
<rect class="boxBlue" x="870" y="270" width="250" height="150"/>
<text class="boxTitle" x="896" y="305">Cloud A主用</text>
<text class="boxText" x="896" y="338">控制面单体</text>
<text class="boxText" x="896" y="364">PostgreSQL 主库 + pgvector</text>
<text class="boxText" x="896" y="390">HTTP + SSE</text>
<rect class="boxGreen" x="1190" y="270" width="290" height="180"/>
<text class="boxTitle" x="1216" y="305">Cloud B备用</text>
<text class="boxText" x="1216" y="338">备用控制面单体</text>
<text class="boxText" x="1216" y="364">PostgreSQL 备库</text>
<text class="boxText" x="1216" y="390">接管脚本 / 快照 / 恢复钩子</text>
<text class="boxText" x="1216" y="416">Standby Controller</text>
<path class="arrow" d="M1120 345 C1155 345, 1160 345, 1190 345"/>
<rect class="boxOrange" x="870" y="500" width="610" height="160"/>
<text class="boxTitle" x="896" y="536">必要前提</text>
<text class="boxText" x="896" y="570">1. Cloud B 只做热备 / 温备,不承担常态重负载。</text>
<text class="boxText" x="896" y="598">2. 手机 App 与控制面支持主 / 备云 endpoint 切换。</text>
<text class="boxText" x="896" y="626">3. 设备端继续承担重媒体、重审计、重运维执行动作。</text>
<rect class="boxGray" x="870" y="700" width="610" height="150"/>
<text class="boxTitle" x="896" y="736">优点与边界</text>
<text class="boxText" x="896" y="770">优点:公网可达性更稳,不依赖现场某一台设备,接管路径更标准化。</text>
<text class="boxText" x="896" y="798">边界:成本更高;最后一跳的硬件接管仍要依赖现场设备在线。</text>
<text class="tech" x="896" y="826">建议最低Cloud A 2C8G/100GBCloud B 2C8G/100GB</text>
<text class="foot" x="70" y="940">统一抽象建议standby_provider = standby_mac | cloud_b | both</text>
</svg>