guanghulab/server/proxy/service/reverse-boost-agent.js
Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

294 lines
9.9 KiB
JavaScript
Raw Permalink 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.

#!/usr/bin/env node
// ═══════════════════════════════════════════════
// 🔺 Sovereign: TCS-0002∞ | Root: SYS-GLW-0001
// 📜 Copyright: 国作登字-2026-A-00037559
// ═══════════════════════════════════════════════
// server/proxy/service/reverse-boost-agent.js
// 🚀 反向加速Agent · 服务端网络优化活模块
//
// 核心理念 (冰朔定根):
// 服务器只是桥梁,用户的光纤才是主引擎。
// 通过减少服务器瓶颈让用户100M/300M/500M
// 的光纤能力尽可能穿透到外网。
//
// 优化策略:
// 1. BBR拥塞控制检测与优化
// 2. MTU自动探测
// 3. TCP连接参数优化
// 4. 系统级网络栈调优
// 5. Xray连接池配置优化
//
// 运行方式: PM2 managed (zy-reverse-boost)
// 检查间隔: 每15分钟
// ═══════════════════════════════════════════════
'use strict';
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const PROXY_DIR = process.env.ZY_BRAIN_PROXY_DIR || '/opt/zhuyuan-brain/proxy';
const DATA_DIR = path.join(PROXY_DIR, 'data');
const BOOST_STATUS_FILE = path.join(DATA_DIR, 'reverse-boost-status.json');
const CHECK_INTERVAL = 15 * 60 * 1000; // 15分钟
// ── 安全执行命令 ──────────────────────────────
function runCmd(cmd, timeout = 10000) {
try {
return { ok: true, output: execSync(cmd, { encoding: 'utf8', timeout }).trim() };
} catch (err) {
return { ok: false, output: err.message };
}
}
// ── 检查BBR状态 ───────────────────────────────
function checkBBR() {
const result = runCmd('sysctl net.ipv4.tcp_congestion_control');
if (result.ok) {
const algo = result.output.split('=').pop().trim();
return {
ok: true,
algorithm: algo,
is_bbr: algo === 'bbr',
detail: `当前拥塞控制: ${algo}`
};
}
return { ok: false, algorithm: 'unknown', is_bbr: false, detail: '无法检查BBR' };
}
// ── 检查可用拥塞控制算法 ──────────────────────
function getAvailableAlgorithms() {
const result = runCmd('sysctl net.ipv4.tcp_available_congestion_control');
if (result.ok) {
return result.output.split('=').pop().trim().split(/\s+/);
}
return [];
}
// ── 检查当前MTU ───────────────────────────────
function checkMTU() {
const result = runCmd("ip link show | grep 'mtu' | head -5");
if (result.ok) {
const mtuMatch = result.output.match(/mtu\s+(\d+)/);
return {
ok: true,
mtu: mtuMatch ? parseInt(mtuMatch[1], 10) : 1500,
detail: result.output.split('\n')[0]
};
}
return { ok: false, mtu: 1500, detail: '无法检查MTU' };
}
// ── 检查TCP参数 ───────────────────────────────
function checkTcpParams() {
const params = {};
// TCP缓冲区大小
const rmem = runCmd('sysctl net.ipv4.tcp_rmem');
if (rmem.ok) params.tcp_rmem = rmem.output.split('=').pop().trim();
const wmem = runCmd('sysctl net.ipv4.tcp_wmem');
if (wmem.ok) params.tcp_wmem = wmem.output.split('=').pop().trim();
// TCP快速打开
const tfo = runCmd('sysctl net.ipv4.tcp_fastopen');
if (tfo.ok) params.tcp_fastopen = tfo.output.split('=').pop().trim();
// TCP keep-alive
const keepalive = runCmd('sysctl net.ipv4.tcp_keepalive_time');
if (keepalive.ok) params.tcp_keepalive_time = keepalive.output.split('=').pop().trim();
// 连接跟踪
const conntrack = runCmd('sysctl net.netfilter.nf_conntrack_max 2>/dev/null');
if (conntrack.ok) params.conntrack_max = conntrack.output.split('=').pop().trim();
return params;
}
// ── 检查网络负载 ──────────────────────────────
function checkNetworkLoad() {
// 获取主网卡的流量统计
const result = runCmd("cat /proc/net/dev | grep -E 'eth0|ens' | head -1");
if (result.ok) {
const parts = result.output.trim().split(/\s+/);
if (parts.length >= 10) {
return {
ok: true,
interface: parts[0].replace(':', ''),
rx_bytes: parseInt(parts[1], 10),
tx_bytes: parseInt(parts[9], 10),
rx_packets: parseInt(parts[2], 10),
tx_packets: parseInt(parts[10], 10)
};
}
}
return { ok: false };
}
// ── 优化建议生成 ──────────────────────────────
function generateOptimizations() {
const optimizations = [];
const applied = [];
// 1. 检查BBR
const bbr = checkBBR();
if (!bbr.is_bbr) {
const available = getAvailableAlgorithms();
if (available.includes('bbr')) {
optimizations.push({
type: 'bbr',
priority: 'high',
current: bbr.algorithm,
recommended: 'bbr',
description: '启用BBR拥塞控制可显著提升吞吐量',
command: 'sysctl -w net.ipv4.tcp_congestion_control=bbr'
});
}
} else {
applied.push('BBR拥塞控制已启用');
}
// 2. 检查TCP快速打开
const tcpParams = checkTcpParams();
if (tcpParams.tcp_fastopen !== '3') {
optimizations.push({
type: 'tcp_fastopen',
priority: 'medium',
current: tcpParams.tcp_fastopen || 'unknown',
recommended: '3',
description: 'TCP Fast Open可减少握手延迟',
command: 'sysctl -w net.ipv4.tcp_fastopen=3'
});
} else {
applied.push('TCP Fast Open已启用');
}
// 3. 检查TCP缓冲区
// 推荐: rmem = 4096 131072 67108864, wmem = 4096 16384 67108864
if (tcpParams.tcp_rmem) {
const maxRmem = parseInt(tcpParams.tcp_rmem.split(/\s+/).pop(), 10);
if (maxRmem < 67108864) {
optimizations.push({
type: 'tcp_rmem',
priority: 'medium',
current: tcpParams.tcp_rmem,
recommended: '4096 131072 67108864',
description: '增大TCP接收缓冲区可提升大文件传输速度',
command: 'sysctl -w net.ipv4.tcp_rmem="4096 131072 67108864"'
});
} else {
applied.push('TCP接收缓冲区已优化');
}
}
return { optimizations, applied, tcp_params: tcpParams };
}
// ── 应用安全优化(仅无风险的参数)──────────────
function applySafeOptimizations(optimizations) {
const results = [];
for (const opt of optimizations) {
// 只自动应用低风险优化
if (opt.type === 'tcp_fastopen' || opt.type === 'bbr') {
const result = runCmd(opt.command, 5000);
results.push({
type: opt.type,
applied: result.ok,
detail: result.ok ? `✅ 已应用: ${opt.description}` : `❌ 失败: ${result.output}`
});
if (result.ok) {
console.log(`[反向加速] ✅ ${opt.description}`);
}
} else {
results.push({
type: opt.type,
applied: false,
detail: `⏭️ 跳过(需手动): ${opt.description}`
});
}
}
return results;
}
// ── 读取/保存状态 ─────────────────────────────
function readBoostStatus() {
try {
return JSON.parse(fs.readFileSync(BOOST_STATUS_FILE, 'utf8'));
} catch {
return {
checks: 0,
optimizations_applied: 0,
last_check: null,
status: 'initializing'
};
}
}
function saveBoostStatus(status) {
fs.mkdirSync(DATA_DIR, { recursive: true });
fs.writeFileSync(BOOST_STATUS_FILE, JSON.stringify(status, null, 2));
}
// ── 主巡检 ────────────────────────────────────
function boost() {
console.log('[反向加速] 🚀 开始网络优化巡检...');
const status = readBoostStatus();
status.checks++;
status.last_check = new Date().toISOString();
// 检查系统网络状态
const bbr = checkBBR();
const mtu = checkMTU();
const networkLoad = checkNetworkLoad();
const { optimizations, applied, tcp_params } = generateOptimizations();
console.log(`[反向加速] BBR: ${bbr.is_bbr ? '✅ 已启用' : '❌ 未启用'} (${bbr.algorithm})`);
console.log(`[反向加速] MTU: ${mtu.mtu}`);
console.log(`[反向加速] 已优化项: ${applied.length}`);
// 应用安全优化
if (optimizations.length > 0) {
console.log(`[反向加速] 发现${optimizations.length}个可优化项`);
const results = applySafeOptimizations(optimizations);
const appliedCount = results.filter(r => r.applied).length;
status.optimizations_applied += appliedCount;
status.last_optimizations = results;
}
// 更新状态
status.status = 'active';
status.current = {
bbr: bbr,
mtu: mtu,
tcp_params: tcp_params,
network_load: networkLoad.ok ? {
interface: networkLoad.interface,
rx_bytes: networkLoad.rx_bytes,
tx_bytes: networkLoad.tx_bytes
} : null,
already_optimized: applied
};
saveBoostStatus(status);
console.log(`[反向加速] 巡检完成 (第${status.checks}次)`);
}
// ── 启动巡检循环 ──────────────────────────────
console.log('🚀 光湖语言世界 · 反向加速Agent启动');
console.log(` 巡检间隔: ${CHECK_INTERVAL / 1000}`);
console.log(` 优化策略: BBR拥塞控制 + TCP Fast Open + 缓冲区调优`);
console.log(` 核心理念: 服务器只是桥梁,用户光纤才是主引擎`);
// 立即执行一次
try { boost(); } catch (err) { console.error('首次巡检失败:', err.message); }
// 定期执行
setInterval(() => {
try { boost(); } catch (err) { console.error('巡检异常:', err.message); }
}, CHECK_INTERVAL);