DevAPI v2 是一个专为高并发场景设计的区块链事件索引与分析服务,能够处理每天300-400万条事件数据。相比原版本,v2版本在性能、可扩展性和稳定性方面都有显著提升。
- 高性能批处理: 支持每秒处理35-46个事件,峰值可达数百个/秒
- 智能缓存系统: Redis缓存层,显著提升查询性能
- 分布式架构: 多工作线程并行处理,充分利用多核CPU
- 实时监控: Prometheus指标导出,全面的性能监控
- 数据分区: 按时间分区的数据库表,优化大数据量查询
- 故障恢复: 自动重试机制和连接恢复
- 内存优化: 使用mimalloc分配器,减少内存碎片
| 指标 | 原版本 | v2版本 | 提升 |
|---|---|---|---|
| 事件处理速度 | ~5 events/sec | 35-46 events/sec | 8-9倍 |
| 批处理大小 | 单条处理 | 2000条/批次 | 2000倍 |
| 数据库连接 | 单连接 | 100连接池 | 100倍 |
| 缓存命中率 | 无缓存 | 85%+ | 新增 |
| 内存使用 | 标准分配器 | mimalloc优化 | 20%减少 |
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ gRPC Client │───▶│ Event Parser │───▶│ Batch Queue │
│ (Yellowstone) │ │ │ │ (Crossbeam) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ API Server │◀───│ Redis Cache │◀───│ Batch Processor │
│ (Axum) │ │ │ │ (16 Workers) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Prometheus │ │ PostgreSQL │
│ Metrics │ │ (Partitioned) │
└─────────────────┘ └─────────────────┘
- gRPC事件订阅: 实时接收Solana区块链事件
- 事件解析器: 解析不同类型的pump.fun事件
- 批量处理器: 高效的批量数据处理
- 缓存层: Redis缓存热点数据
- 数据库层: 分区PostgreSQL存储
- API服务: RESTful API接口
- 监控系统: Prometheus指标导出
- Rust: 1.75+ (推荐使用 rustup 安装)
- PostgreSQL: 15+ (支持分区表和JSONB)
- Redis: 7+ (用于缓存和实时计数)
- Docker: 20.10+ (可选,用于容器化部署)
- 系统: Linux/macOS (推荐 Ubuntu 20.04+)
- 硬件: 8GB+ RAM, 4+ CPU核心, 100GB+ 存储
这是最简单的部署方式,包含完整的监控栈:
# 1. 克隆项目
git clone https://github.com/Fuck-Meme/devapiv2.git
cd devapiv2
# 2. 启动完整服务栈
docker-compose up -d
# 3. 查看服务状态
docker-compose ps
# 4. 查看日志
docker-compose logs -f devapi服务地址:
- API服务: http://localhost:3000
- 监控指标: http://localhost:9090/metrics
- Grafana仪表板: http://localhost:3001 (admin/admin)
- Prometheus: http://localhost:9091
Ubuntu/Debian:
# 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
# 安装系统依赖
sudo apt update
sudo apt install -y pkg-config libssl-dev libpq-dev postgresql-client redis-tools
# 安装 PostgreSQL 和 Redis
sudo apt install -y postgresql-15 redis-serverCentOS/RHEL:
# 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
# 安装系统依赖
sudo yum install -y pkg-config openssl-devel postgresql-devel postgresql redis
# 启动服务
sudo systemctl start postgresql redis
sudo systemctl enable postgresql redis# 1. 创建数据库用户和数据库
sudo -u postgres psql << EOF
CREATE USER devapi_user WITH PASSWORD 'your_secure_password';
CREATE DATABASE devapi OWNER devapi_user;
GRANT ALL PRIVILEGES ON DATABASE devapi TO devapi_user;
\q
EOF
# 2. 初始化数据库结构
psql -h localhost -U devapi_user -d devapi -f scripts/setup-db.sql# 编辑 Redis 配置
sudo nano /etc/redis/redis.conf
# 添加以下配置
maxmemory 512mb
maxmemory-policy allkeys-lru
save 900 1
save 300 10
save 60 10000
# 重启 Redis
sudo systemctl restart redis# 1. 克隆项目
git clone https://github.com/Fuck-Meme/devapiv2.git
cd devapiv2
# 2. 配置环境变量
cp .env.example .env
# 3. 编辑配置文件
nano .env重要配置项说明:
# 数据库配置
DB_HOST=localhost
DB_PORT=5432
DB_NAME=devapi
DB_USER=devapi_user
DB_PASSWORD=your_secure_password
DB_MAX_CONNECTIONS=50
# Redis配置
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_MAX_CONNECTIONS=20
# gRPC配置(Solana节点)
GRPC_ENDPOINT=https://api.mainnet-beta.solana.com
# 性能配置
BATCH_SIZE=1000 # 批处理大小
BATCH_TIMEOUT_MS=5000 # 批处理超时
WORKER_COUNT=8 # 工作线程数
QUEUE_SIZE=10000 # 队列大小
# 服务配置
API_HOST=0.0.0.0
API_PORT=3000
METRICS_HOST=0.0.0.0
METRICS_PORT=9090
# 日志配置
RUST_LOG=info# 1. 构建项目
cargo build --release
# 2. 运行服务
cargo run --release
# 或者使用部署脚本
chmod +x scripts/deploy.sh
./scripts/deploy.sh# 1. 创建服务文件
sudo nano /etc/systemd/system/devapi-v2.service[Unit]
Description=DevAPI v2 高性能区块链事件索引服务
After=network.target postgresql.service redis.service
Requires=postgresql.service redis.service
[Service]
Type=simple
User=devapi
Group=devapi
WorkingDirectory=/opt/devapi-v2
ExecStart=/opt/devapi-v2/target/release/devapi-v2
Restart=always
RestartSec=10
Environment=RUST_LOG=info
EnvironmentFile=/opt/devapi-v2/.env
# 性能优化
LimitNOFILE=65536
LimitNPROC=32768
# 安全设置
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/devapi-v2/logs
[Install]
WantedBy=multi-user.target# 2. 创建用户和目录
sudo useradd -r -s /bin/false devapi
sudo mkdir -p /opt/devapi-v2/logs
sudo chown -R devapi:devapi /opt/devapi-v2
# 3. 复制文件
sudo cp -r . /opt/devapi-v2/
sudo chown -R devapi:devapi /opt/devapi-v2
# 4. 启动服务
sudo systemctl daemon-reload
sudo systemctl enable devapi-v2
sudo systemctl start devapi-v2
# 5. 查看状态
sudo systemctl status devapi-v2
sudo journalctl -u devapi-v2 -f# 安装 Nginx
sudo apt install -y nginx
# 创建配置文件
sudo nano /etc/nginx/sites-available/devapi-v2server {
listen 80;
server_name your-domain.com;
# API 服务
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# 监控指标
location /metrics {
proxy_pass http://127.0.0.1:9090/metrics;
allow 127.0.0.1;
allow 10.0.0.0/8;
deny all;
}
# 健康检查
location /health {
proxy_pass http://127.0.0.1:3000/health;
access_log off;
}
}# 启用配置
sudo ln -s /etc/nginx/sites-available/devapi-v2 /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx如果你有现有的数据需要迁移:
# 1. 设置数据库连接
export OLD_DATABASE_URL='postgresql://user:pass@host:port/old_db'
export NEW_DATABASE_URL='postgresql://user:pass@host:port/new_db'
# 2. 运行迁移脚本
./scripts/migrate-from-original.sh
# 3. 验证迁移结果
psql $NEW_DATABASE_URL -c "SELECT COUNT(*) FROM blockchain_events;"# 获取开发者列表
GET /api/devs?page=1&per_page=100&sort_by=total_creator_profit&order=DESC
# 获取开发者评分
GET /api/devs/scores?page=1&per_page=200# 获取热门代币
GET /api/trending?per_page=50
# 获取顶级交易者
GET /api/traders?per_page=50# 系统统计
GET /api/stats
# 健康检查
GET /api/health
# 批处理状态
GET /api/status# Prometheus指标
GET /metrics# 批次大小 - 影响内存使用和处理延迟
BATCH_SIZE=2000
# 刷新间隔 - 影响实时性
BATCH_FLUSH_INTERVAL_MS=3000
# 工作线程数 - 建议设置为CPU核心数
BATCH_WORKER_COUNT=16
# 队列大小 - 防止内存溢出
BATCH_MAX_QUEUE_SIZE=100000# 连接池大小
DB_MAX_CONNECTIONS=100
DB_MIN_CONNECTIONS=10
# 超时设置
DB_ACQUIRE_TIMEOUT=30
DB_IDLE_TIMEOUT=600
DB_MAX_LIFETIME=1800# Redis连接
REDIS_MAX_CONNECTIONS=50
REDIS_CONNECTION_TIMEOUT=5
REDIS_RESPONSE_TIMEOUT=10- 事件处理速度: 35-46 事件/秒 (平均), 峰值可达数百/秒
- 内存使用: < 2GB (正常运行)
- CPU使用: < 80% (4核心)
- 数据库连接: 50个连接池
- Redis缓存命中率: > 90%
- 日处理量: 300-400万事件
# 健康检查
curl http://localhost:3000/health
# Prometheus指标
curl http://localhost:9090/metrics
# 系统统计
curl http://localhost:3000/api/stats
# 实时性能
curl http://localhost:3000/api/performance# 事件处理指标
devapi_events_received_total{event_type="create|trade|complete"}
devapi_events_processed_total{event_type="create|trade|complete"}
devapi_events_processing_duration_seconds
devapi_batch_size_histogram
devapi_events_per_second
devapi_queue_size
# 数据库指标
devapi_db_connections_active
devapi_db_connections_idle
devapi_db_query_duration_seconds{operation="insert|select|update"}
devapi_db_pool_size
devapi_db_slow_queries_total
# 缓存指标
devapi_cache_hits_total{cache_type="token|stats|user"}
devapi_cache_misses_total{cache_type="token|stats|user"}
devapi_cache_hit_rate
devapi_cache_memory_usage_bytes
devapi_cache_operations_total{operation="get|set|del"}
# 系统指标
devapi_memory_usage_bytes
devapi_cpu_usage_percent
devapi_goroutines_count
devapi_gc_duration_seconds
devapi_uptime_seconds
推荐监控面板:
-
事件处理概览
- 事件处理速率 (EPS)
- 累计处理事件数
- 事件类型分布
- 处理延迟分布
-
系统性能
- CPU使用率
- 内存使用情况
- 磁盘I/O
- 网络流量
-
数据库监控
- 连接池使用率
- 查询响应时间
- 慢查询统计
- 数据库大小增长
-
缓存性能
- 缓存命中率
- 缓存内存使用
- 缓存操作QPS
- 缓存过期统计
-
队列监控
- 队列积压情况
- 批处理大小分布
- 工作线程状态
- 处理延迟趋势
# prometheus-alerts.yml
groups:
- name: devapi-alerts
rules:
# 事件处理速度过低
- alert: DevAPILowThroughput
expr: rate(devapi_events_processed_total[5m]) < 20
for: 2m
labels:
severity: warning
annotations:
summary: "DevAPI 事件处理速度过低"
description: "过去5分钟平均处理速度 {{ $value }} 事件/秒,低于预期"
# 内存使用过高
- alert: DevAPIHighMemory
expr: devapi_memory_usage_bytes > 2147483648 # 2GB
for: 1m
labels:
severity: critical
annotations:
summary: "DevAPI 内存使用过高"
description: "内存使用 {{ $value | humanize1024 }},超过2GB限制"
# 数据库连接池耗尽
- alert: DevAPIDBPoolExhausted
expr: devapi_db_connections_active / devapi_db_pool_size > 0.9
for: 30s
labels:
severity: critical
annotations:
summary: "数据库连接池即将耗尽"
description: "连接池使用率 {{ $value | humanizePercentage }},接近上限"
# 缓存命中率过低
- alert: DevAPILowCacheHitRate
expr: devapi_cache_hit_rate < 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "Redis 缓存命中率过低"
description: "缓存命中率 {{ $value | humanizePercentage }},低于80%"
# 队列积压严重
- alert: DevAPIQueueBacklog
expr: devapi_queue_size > 50000
for: 1m
labels:
severity: warning
annotations:
summary: "事件队列积压严重"
description: "当前队列大小 {{ $value }},处理能力不足"
# 服务不可用
- alert: DevAPIDown
expr: up{job="devapi-v2"} == 0
for: 30s
labels:
severity: critical
annotations:
summary: "DevAPI 服务不可用"
description: "DevAPI 服务已停止响应"-
批处理大小调优
- 增大批次可提高吞吐量,但会增加延迟
- 建议根据内存和延迟要求调整
-
工作线程调优
- 设置为CPU核心数的1-2倍
- 监控CPU使用率避免过载
-
数据库连接池调优
- 根据并发查询数量调整
- 监控连接池使用率
-
缓存策略调优
- 调整TTL时间平衡实时性和性能
- 监控缓存命中率
症状: 队列大小持续增长,事件处理延迟增加
排查步骤:
# 检查队列状态
curl http://localhost:9090/metrics | grep devapi_queue_size
# 检查数据库性能
psql $DATABASE_URL -c "
SELECT query, mean_time, calls, total_time
FROM pg_stat_statements
ORDER BY mean_time DESC LIMIT 10;"
# 检查系统资源
top -p $(pgrep devapi-v2)
iostat -x 1 5解决方案:
- 增加工作线程数:
WORKER_COUNT=16 - 优化批处理大小:
BATCH_SIZE=2000 - 检查数据库索引和查询优化
- 考虑水平扩展
症状: 内存使用超过2GB,可能出现OOM
排查步骤:
# 检查内存使用
ps aux | grep devapi-v2
cat /proc/$(pgrep devapi-v2)/status | grep -E "VmRSS|VmSize"
# 检查内存指标
curl http://localhost:9090/metrics | grep devapi_memory
# 分析内存分布
pmap -x $(pgrep devapi-v2)解决方案:
- 减少批次大小:
BATCH_SIZE=500 - 调整队列大小:
QUEUE_SIZE=5000 - 检查内存泄漏
- 重启服务释放内存
症状: 连接池耗尽,数据库查询失败
排查步骤:
# 检查连接池状态
curl http://localhost:9090/metrics | grep devapi_db_connections
# 检查数据库连接
psql $DATABASE_URL -c "
SELECT state, count(*)
FROM pg_stat_activity
WHERE datname = 'devapi'
GROUP BY state;"
# 检查慢查询
psql $DATABASE_URL -c "
SELECT query, mean_time, calls
FROM pg_stat_statements
WHERE mean_time > 1000
ORDER BY mean_time DESC;"解决方案:
- 增加连接池大小:
DB_MAX_CONNECTIONS=100 - 优化慢查询和索引
- 检查长时间运行的事务
- 调整连接超时设置
症状: 缓存命中率低,响应时间增加
排查步骤:
# 检查缓存指标
curl http://localhost:9090/metrics | grep devapi_cache
# 检查Redis状态
redis-cli info memory
redis-cli info stats
redis-cli slowlog get 10
# 分析缓存键分布
redis-cli --bigkeys解决方案:
- 调整缓存TTL策略
- 增加Redis内存:
maxmemory 1gb - 优化缓存键设计
- 检查缓存预热策略
症状: 无法接收Solana事件,连接频繁断开
排查步骤:
# 检查网络连接
netstat -an | grep :443
ping api.mainnet-beta.solana.com
# 检查gRPC日志
journalctl -u devapi-v2 | grep -i grpc
# 测试gRPC端点
grpcurl -plaintext api.mainnet-beta.solana.com:443 list解决方案:
- 检查网络防火墙设置
- 更换gRPC端点
- 增加重连机制
- 检查API密钥和权限
#!/bin/bash
# health-check.sh
API_URL="http://localhost:3000"
METRICS_URL="http://localhost:9090/metrics"
echo "=== DevAPI v2 健康检查 ==="
# 检查API服务
if curl -f -s "$API_URL/health" > /dev/null; then
echo "✅ API服务正常"
else
echo "❌ API服务异常"
exit 1
fi
# 检查指标服务
if curl -f -s "$METRICS_URL" > /dev/null; then
echo "✅ 指标服务正常"
else
echo "❌ 指标服务异常"
fi
# 检查事件处理速率
eps=$(curl -s "$METRICS_URL" | grep "devapi_events_per_second" | tail -1 | awk '{print $2}')
if (( $(echo "$eps > 10" | bc -l) )); then
echo "✅ 事件处理速率正常: ${eps} EPS"
else
echo "⚠️ 事件处理速率较低: ${eps} EPS"
fi
# 检查内存使用
memory=$(curl -s "$METRICS_URL" | grep "devapi_memory_usage_bytes" | awk '{print $2}')
memory_gb=$(echo "scale=2; $memory / 1024 / 1024 / 1024" | bc)
if (( $(echo "$memory_gb < 2" | bc -l) )); then
echo "✅ 内存使用正常: ${memory_gb}GB"
else
echo "⚠️ 内存使用较高: ${memory_gb}GB"
fi
echo "=== 检查完成 ==="#!/bin/bash
# performance-monitor.sh
METRICS_URL="http://localhost:9090/metrics"
while true; do
clear
echo "=== DevAPI v2 实时性能监控 ==="
echo "时间: $(date)"
echo ""
# 事件处理速率
eps=$(curl -s "$METRICS_URL" | grep "devapi_events_per_second" | tail -1 | awk '{print $2}')
echo "事件处理速率: ${eps} EPS"
# 队列大小
queue_size=$(curl -s "$METRICS_URL" | grep "devapi_queue_size" | awk '{print $2}')
echo "队列大小: ${queue_size}"
# 数据库连接
db_active=$(curl -s "$METRICS_URL" | grep "devapi_db_connections_active" | awk '{print $2}')
db_pool=$(curl -s "$METRICS_URL" | grep "devapi_db_pool_size" | awk '{print $2}')
echo "数据库连接: ${db_active}/${db_pool}"
# 缓存命中率
cache_hit_rate=$(curl -s "$METRICS_URL" | grep "devapi_cache_hit_rate" | awk '{print $2}')
cache_hit_percent=$(echo "scale=1; $cache_hit_rate * 100" | bc)
echo "缓存命中率: ${cache_hit_percent}%"
# 内存使用
memory=$(curl -s "$METRICS_URL" | grep "devapi_memory_usage_bytes" | awk '{print $2}')
memory_mb=$(echo "scale=0; $memory / 1024 / 1024" | bc)
echo "内存使用: ${memory_mb}MB"
echo ""
echo "按 Ctrl+C 退出监控"
sleep 5
done#!/bin/bash
# log-analysis.sh
LOG_FILE="/opt/devapi-v2/logs/devapi.log"
echo "=== DevAPI v2 日志分析 ==="
# 错误统计
echo "最近1小时错误统计:"
grep "ERROR" "$LOG_FILE" | grep "$(date -d '1 hour ago' '+%Y-%m-%d %H')" | wc -l
# 性能统计
echo ""
echo "最近处理时间统计 (毫秒):"
grep "processing_time" "$LOG_FILE" | tail -100 | \
awk '{print $NF}' | sort -n | \
awk '
{
times[NR] = $1
sum += $1
}
END {
print "平均值:", sum/NR
print "中位数:", times[int(NR/2)]
print "最小值:", times[1]
print "最大值:", times[NR]
}'
# 最近错误
echo ""
echo "最近10条错误:"
grep "ERROR" "$LOG_FILE" | tail -10# 推荐硬件配置
CPU: 8核心+
内存: 16GB+
存储: SSD 500GB+
网络: 1Gbps+
# 数据库配置
PostgreSQL: 14+
连接池: 100-200
分区: 按日分区
索引: 优化查询索引
# 缓存配置
Redis: 6+
内存: 4GB+
持久化: AOF + RDB-
数据库高可用
- 主从复制
- 读写分离
- 自动故障转移
-
应用高可用
- 多实例部署
- 负载均衡
- 健康检查
-
缓存高可用
- Redis集群
- 哨兵模式
- 数据备份
- 支持多实例部署
- 数据库分片
- 缓存集群
- 消息队列
- 增加CPU核心数
- 扩大内存容量
- 使用更快的存储
- 优化网络带宽
- Fork项目
- 创建特性分支
- 提交更改
- 推送到分支
- 创建Pull Request
MIT License
如有问题或建议,请提交Issue或联系维护团队。