94 lines
6.3 KiB
XML
94 lines
6.3 KiB
XML
<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/100GB,Cloud B 2C8G/100GB</text>
|
||
|
||
<text class="foot" x="70" y="940">统一抽象建议:standby_provider = standby_mac | cloud_b | both</text>
|
||
</svg>
|