4. 环境准备:服务器选型建议、操作系统与依赖安装
批流一体风控链路对计算、存储与网络延迟有极高要求。环境准备阶段需同时兼顾实时计算的低延迟与批量处理的高吞吐,避免因基础设施选型不当导致模型上线后频繁出现资源瓶颈或稳定性问题。本章从服务器选型、操作系统调优、核心依赖安装三个层面给出可落地的配置建议。
4.1 服务器选型建议
风控链路通常包含实时特征计算、模型推理、批量回溯与模型训练四种负载。不同负载对 CPU、内存、磁盘 I/O 与网络的要求差异明显,建议按角色分集群部署,避免资源争抢。
| 负载类型 | CPU 建议 | 内存建议 | 磁盘建议 | 网络建议 | 典型机型参考 |
|---|---|---|---|---|---|
| 实时特征计算 | ≥ 32 核,主频 ≥ 3.0 GHz | ≥ 128 GB | NVMe SSD × 2 (RAID1) | 25 GbE 或 RoCE v2 | Intel 6 系列 / AMD EPYC 7 系列 |
| 模型推理 (在线) | ≥ 16 核,支持 AVX-512 | ≥ 64 GB | NVMe SSD × 1 | 10 GbE | Intel 5 系列 / AMD EPYC 5 系列 |
| 批量回溯 | ≥ 48 核,主频 ≥ 2.5 GHz | ≥ 256 GB | SATA SSD × 4 (RAID10) | 10 GbE | Intel 7 系列 / AMD EPYC 8 系列 |
| 模型训练 | ≥ 64 核 + GPU (A100/ H100) | ≥ 512 GB | NVMe SSD × 4 (RAID0) | 25 GbE 或 InfiniBand | GPU 服务器 (NVIDIA HGX) |
4.2 操作系统与内核调优
推荐使用 Ubuntu 22.04 LTS 或 Rocky Linux 9 作为基础操作系统。两者均提供长期支持、良好的容器生态与稳定的内核版本。以下为关键调优项:
- 内核参数调整: 修改
/etc/sysctl.conf,增加网络缓冲区与文件句柄上限,降低 TCP 重传超时。 - CPU 调频策略: 设置为
performance模式,避免实时推理时因频率切换引入毛刺。 - 透明大页 (THP): 建议关闭,或设置为
madvise模式,减少内存分配延迟。 - 磁盘 I/O 调度器: NVMe 盘使用
none调度器,SATA SSD 使用mq-deadline。
# 关键内核参数示例 (追加到 /etc/sysctl.conf)
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.ipv4.tcp_congestion_control = bbr
fs.file-max = 2097152
vm.max_map_count = 262144
# 关闭透明大页 (需重启生效)
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
sysctl -p 使其立即生效。透明大页关闭需写入 /etc/rc.local 或使用 systemd 服务确保重启后仍生效。
4.3 依赖安装:Docker 与 Kubernetes
批流一体风控链路采用容器化部署,Docker 提供运行时隔离,Kubernetes 负责编排与自动扩缩。安装版本需与后续 Flink、Spark、模型推理框架兼容。
4.3.1 Docker 安装
使用官方脚本安装 Docker CE 24.0+,并配置镜像加速器与 cgroup 驱动。
# 安装 Docker CE
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 配置 cgroup 驱动为 systemd (与 Kubernetes 一致)
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
4.3.2 Kubernetes 集群部署
推荐使用 kubeadm 部署 Kubernetes 1.28+ 集群。控制平面节点至少 3 台,工作节点按负载类型分组并打上标签。
| 组件 | 版本要求 | 说明 |
|---|---|---|
| kubelet / kubeadm / kubectl | ≥ 1.28 | 保持版本一致,避免 API 兼容问题 |
| CRI (容器运行时) | containerd 1.7+ | Docker 仅作为镜像构建工具,运行时统一使用 containerd |
| CNI 网络插件 | Calico 3.26+ 或 Cilium 1.14+ | 需支持 NetworkPolicy 与 eBPF |
| Ingress Controller | nginx-ingress 1.9+ | 用于暴露模型推理 API |
| Metrics Server | ≥ 0.6 | HPA 自动扩缩依赖 |
# 初始化控制平面 (示例)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
# 安装 Calico 网络插件
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26/manifests/calico.yaml
# 工作节点加入集群
sudo kubeadm join <控制平面IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
node-role.kubernetes.io/realtime=true、node-role.kubernetes.io/batch=true 等标签,配合 nodeSelector 将实时任务调度到高性能节点,批量任务调度到高吞吐节点。
4.4 Java / Python 运行时安装
风控链路中,Flink、Kafka Streams 等实时组件依赖 Java 运行时;模型训练与特征工程依赖 Python 运行时。两者需独立安装并配置环境变量。
4.4.1 Java 运行时
推荐使用 JDK 17 (LTS),兼容 Flink 1.17+ 与 Spark 3.4+。安装后需设置 JAVA_HOME 并加入 PATH。
# 下载并解压 JDK 17 (以 OpenJDK 为例)
wget https://download.java.net/java/GA/jdk17/0d483333a00540d886896bac774ff48b/35/GPL/openjdk-17_linux-x64_bin.tar.gz
sudo tar -xzf openjdk-17_linux-x64_bin.tar.gz -C /usr/local/
sudo mv /usr/local/jdk-17 /usr/local/java
# 配置环境变量
cat <<EOF | sudo tee /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
source /etc/profile.d/java.sh
java -version
4.4.2 Python 运行时
推荐使用 Python 3.10+,通过 Conda 或 pyenv 管理多版本环境,避免与系统 Python 冲突。
# 使用 Miniconda 安装 Python 3.10
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/miniconda3
/opt/miniconda3/bin/conda init
# 创建风控专用环境
conda create -n risk python=3.10 -y
conda activate risk
# 安装常用依赖
pip install numpy pandas scikit-learn xgboost lightgbm onnxruntime
requirements.txt 或 environment.yml 锁定所有 Python 依赖版本,配合 Docker 镜像构建,确保开发、测试、生产环境一致。
4.5 环境依赖关系总览
下图展示了批流一体风控链路中各组件与底层环境依赖的层次关系,帮助理解安装顺序与配置要点。
4.6 环境验证清单
完成安装后,建议按以下清单逐项验证,确保所有依赖就绪:
- Docker 验证:
docker run hello-world正常输出,docker info显示 cgroup 驱动为 systemd。 - Kubernetes 验证:
kubectl get nodes所有节点 Ready,kubectl get pods -n kube-system核心组件运行正常。 - Java 验证:
java -version显示 JDK 17,javac -version编译器可用。 - Python 验证:
python --version显示 3.10+,pip list显示已安装风控相关依赖。 - 网络验证: 跨节点 Pod 互通,DNS 解析正常,Ingress 可访问。