An open API service indexing awesome lists of open source software.

https://github.com/mcloud136/v2node

大幅度提升安全性和性能
https://github.com/mcloud136/v2node

golang high-performance hysteria2 networking proxy shadowsocks trojan tuic v2board v2ray v2x vless vmess xray

Last synced: 16 days ago
JSON representation

大幅度提升安全性和性能

Awesome Lists containing this project

README

          

# v2node

A high-performance v2board backend based on modified xray-core.基于改进的xray-core的高性能v2board后端。

[![Build](https://img.shields.io/github/actions/workflow/status/Mcloud136/v2node/release.yml?label=Build&logo=github&logoColor=white&color=28a745&style=for-the-badge)](https://github.com/Mcloud136/v2node/actions/workflows/release.yml)
[![Version](https://img.shields.io/github/v/release/Mcloud136/v2node?label=Version&logo=semver&logoColor=white&color=0366d6&style=for-the-badge)](https://github.com/Mcloud136/v2node/releases/)
[![Released](https://img.shields.io/github/release-date/Mcloud136/v2node?label=Released&logo=calendar&logoColor=white&color=6f42c1&style=for-the-badge)](https://github.com/Mcloud136/v2node/releases/)
[![Commits](https://img.shields.io/github/commit-activity/m/Mcloud136/v2node?label=Commits&logo=git&logoColor=white&color=f1e05a&style=for-the-badge)](https://github.com/Mcloud136/v2node/)

## 项目简介

本项目基于[https://github.com/wyx2685/v2node](https://github.com/wyx2685/v2node)制作,大幅度提升性能并加入一些新的特性。

**注意**:本项目和[https://github.com/wyx2685/v2node](https://github.com/wyx2685/v2node)一样,需要搭配[修改版 V2board](https://github.com/Mcloud136/v2board) 使用。

## 原版特性

- 支持多种协议
- 高性能并发设计,支持高负载场景
- 完善的流量限制和设备管理
- 自动证书管理和更新
- 配置热更新,无需重启服务
- 优雅的错误处理和日志管理

## 项目概述
- **原始项目**: [wyx2685/v2node](https://github.com/wyx2685/v2node)
- **优化项目**: [Mcloud136/v2node](https://github.com/Mcloud136/v2node)
- **当前版本**: 1.0.2

---

## 性能优化对比

### 1. 并发性能优化

| 优化项目 | 原始实现 | 优化实现 | 效果 |
|---------|---------|---------|------|
| **Limiter Map** | 普通 `map` 加锁 | `sync.Map` | 消除性能瓶颈,高并发下读写更高效 |
| **原子操作** | 普通指针 | `atomic.Pointer` | 无锁读取,提升并发性能 |
| **复合 Key** | 分散结构 | 复合 key 设计 | 简化数据结构,减少内存开销 |

### 2. 字符串处理优化

| 文件 | 优化内容 | 原始方式 | 优化方式 |
|------|---------|---------|---------|
| common/format/user.go | UserTag 函数 | `fmt.Sprintf` | `strings.Builder` + 预分配容量 |
| api/v2board/panel.go | User-Agent 构造 | 字符串拼接 | `strings.Builder` + 预分配容量 |
| limiter/limiter.go | IP Key 构造 | 字符串拼接 | `strings.Builder` + 预分配容量 |

**效果**: 减少内存分配和 GC 压力

### 3. 容量预分配优化

| 文件 | 优化位置 | 优化内容 |
|------|---------|---------|
| node/user.go | `compareUserList` | 预分配 `oldMap`、`added`、`modified`、`deleted` 容量 |
| node/user.go | `reportUserTrafficTask` | 预分配 `result`、`nocountUID`、`data` 容量 |
| limiter/limiter.go | `GetOnlineDevices` | 预分配 `result`、`toDelete` 容量 |

**效果**: 减少切片扩容次数,提升性能

### 4. 算法优化

| 优化项 | 原始实现 | 优化实现 |
|-------|---------|---------|
| `determineSpeedLimit` | 复杂判断逻辑 | 简洁的较小值返回 | 代码减少约 60% |
| `DeviceTracker.DeleteUser` | 遍历整个 Map | 反向索引快速删除 | 大幅提升删除效率 |

---

## 类型安全与兼容性改进

| 改进项 | 说明 |
|-------|------|
| 类型断言替代反射 | 提升代码安全性和执行效率 |
| 新增 `int64` 类型支持 | 增强数据兼容性 |

---

## 配置管理改进

| 功能 | 说明 |
|-----|------|
| 配置验证机制 | 启动前校验参数有效性 |
| 端口可用性检查 | 避免启动失败 |
| 配置热更新回滚 | 失败时保持原配置运行,确保服务连续性 |
| 增量配置更新 | 支持更灵活的配置管理 |

---

## 资源管理改进

| 功能 | 说明 |
|-----|------|
| 统一资源生命周期管理 | 避免资源泄漏 |
| pprof 服务优雅关闭 | 更好的调试支持 |
| 日志文件句柄统一管理 | 确保资源正确释放 |

---

## 新增功能

| 版本 | 新增功能 |
|-----|---------|
| 1.0.0 | cloudflared 服务联动重启 |
| 1.0.1 | Go 版本更新至 1.26.2,修复构建兼容性 |
| 1.0.2 | 大幅度提升性能 |

---
---

## 系统要求

### 支持的操作系统

| 系统 | 最低版本 | 说明 |
|------|----------|------|
| CentOS | 7 | CentOS 7 无法使用 hysteria1/2 协议 |
| Ubuntu | 16 | 推荐 18.04+ |
| Debian | 8 | 推荐 10+ |
| Alpine | 3.10+ | 轻量级发行版 |

### 硬件要求

| 配置 | CPU | 内存 | 带宽 |
|------|-----|------|------|
| 最小配置 | 1核 | 512MB | 100Mbps |
| 推荐配置 | 2核 | 1GB | 1Gbps |

### 架构支持

- x86_64 (amd64) - 推荐(其余版本请自行构建)
- ARM64 (aarch64)
- s390x

---

## 安装方法

### 方法一:一键安装

```bash
wget -N https://raw.githubusercontent.com/Mcloud136/v2node/master/script/install.sh && bash install.sh
```

**带参数安装**(跳过交互):

```bash
wget -N https://raw.githubusercontent.com/Mcloud136/v2node/master/script/install.sh && \
bash install.sh --api-host https://your-panel.com/ --node-id 1 --api-key your-secret-key
```

### 方法二:手动安装

#### 1. 创建目录结构

```bash
mkdir -p /usr/local/v2node
mkdir -p /etc/v2node
```

#### 2. 下载并解压二进制文件

```bash
cd /usr/local/v2node
curl -sL "https://github.com/Mcloud136/v2node/releases/latest/download/v2node-linux-amd64.zip" | unzip -
chmod +x v2node
```

#### 3. 创建 systemd 服务

```bash
cat > /etc/systemd/system/v2node.service <