2. 环境规划与准备:服务器选型建议、操作系统标准化、网络规划、端口规划

好,咱们进入第二章。环境规划这事儿,说大不大,说小不小。很多新手一上来就急着装系统、配软件,结果后面网络不通、端口冲突,折腾半天。我个人的习惯是,先把“家底”盘清楚——服务器长什么样、装什么系统、网络怎么走、端口怎么分。这步做好了,后面部署就是水到渠成的事。

2.1 服务器选型建议

先聊聊服务器。交易系统对性能要求其实挺“分裂”的——既要高并发,又要低延迟。我见过有人用云服务器跑生产环境,结果一到行情波动就卡死。嗯,这里要注意,选型不是越贵越好,关键是匹配你的业务量。

核心原则:CPU主频 > 核心数,内存要大,磁盘要快,网络要稳。

我个人建议,按以下标准来选:

  • CPU: 建议 Intel Xeon 或 AMD EPYC 系列,主频 2.5GHz 以上。交易系统很多计算是串行的,主频高比核心多更重要。我在项目中遇到过,用低主频的 CPU,订单处理延迟直接翻倍。
  • 内存: 至少 64GB 起步。如果跑内存数据库(比如 Redis、Aerospike),建议 128GB 以上。别省这点钱,内存不够会频繁 swap,那延迟就崩了。
  • 磁盘: 必须用 SSD,最好是 NVMe 的。机械盘?别想了,日志都写不过来。我建议系统盘和数据盘分开,系统盘 240GB 够用,数据盘根据交易量来,至少 1TB。
  • 网卡: 至少双口万兆网卡。交易系统内部通信量大,千兆网卡会成为瓶颈。我习惯用 Intel X710 系列,稳定,驱动好找。
角色 CPU 内存 磁盘 网卡
交易网关 8核 3.0GHz+ 64GB 240GB SSD 双口万兆
行情服务器 16核 2.8GHz+ 128GB 1TB NVMe 双口万兆
数据库节点 16核 2.5GHz+ 256GB 2TB NVMe 四口万兆
管理节点 4核 2.0GHz+ 32GB 240GB SSD 千兆

小技巧: 如果预算有限,优先保证交易网关和行情服务器的性能。管理节点可以适当降配,毕竟它不参与核心交易链路。

2.2 操作系统标准化

操作系统这块,我踩过不少坑。团队里有人用 CentOS,有人用 Ubuntu,版本还不一样,结果一个脚本在这台机器跑得好好的,到另一台就报错。所以,标准化是必须的。

我个人推荐两个选择:

  • CentOS 7.9:稳定,生命周期长,社区支持好。很多金融系统都基于它。我习惯用最小化安装,只装必要的包,减少攻击面。
  • Ubuntu 20.04 LTS:如果你喜欢新内核、新工具链,选它。Docker、Kubernetes 的支持比 CentOS 好。不过要注意,Ubuntu 的升级节奏快,生产环境一定要锁定 LTS 版本。

标准化配置清单:

# 关闭 SELinux(交易系统很多组件不兼容)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 设置时区为上海
timedatectl set-timezone Asia/Shanghai

# 调整文件描述符限制
echo '* soft nofile 655350' >> /etc/security/limits.conf
echo '* hard nofile 655350' >> /etc/security/limits.conf

# 关闭防火墙(内部网络靠硬件防火墙)
systemctl stop firewalld
systemctl disable firewalld

# 内核参数优化
cat >> /etc/sysctl.conf << EOF
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
vm.swappiness = 10
EOF
sysctl -p

注意: 关闭 SELinux 和防火墙只适用于内部网络环境。如果服务器暴露在公网,一定要配合硬件防火墙或安全组策略。我曾经见过有人直接关防火墙跑公网,结果被扫了端口,教训深刻。

2.3 网络规划

网络规划是重头戏。交易系统通常有三张网:内网、外网、管理网。为什么要分开?说白了,就是隔离风险。外网被攻击了,内网还能正常跑;管理网带宽占满了,不影响交易链路。

我习惯这样规划:

  • 内网(业务网): 用于交易网关、行情服务器、数据库之间的通信。延迟要低,带宽要足。建议用 10.0.0.0/8 私有地址段,配万兆交换机。
  • 外网(接入网): 用于接收客户订单、推送行情。通常绑定公网 IP,通过防火墙映射到内网。建议用 172.16.0.0/12 段,方便和公网 IP 做 NAT。
  • 管理网(带外网): 用于 SSH 登录、监控、日志收集。带宽要求不高,千兆就行。建议用 192.168.0.0/16 段,和业务完全隔离。

我的经验: 管理网一定要独立。有一次机房交换机故障,内网全断了,我靠管理网远程登录,硬是手动切了备用链路。要是管理网也走内网,那就彻底抓瞎了。

下面这张图,是我常用的网络拓扑结构:

外网(接入网) 172.16.1.0/24 客户订单 / 行情推送 内网(业务网) 10.0.0.0/8 交易网关 ↔ 行情 ↔ 数据库 管理网(带外网) 192.168.0.0/16 SSH / 监控 / 日志 防火墙 万兆交换机 交易网关 行情服务器 数据库节点 管理网链路

2.4 端口规划

端口规划看似简单,但最容易出问题。我见过两个服务抢同一个端口,结果业务全挂。所以,端口一定要提前规划好,写进文档里,谁都不许乱改。

我常用的端口分配方案:

服务名称 端口号 协议 说明
交易网关 8080 TCP 接收客户订单
行情推送 8081 UDP 实时行情广播
数据库主库 3306 TCP MySQL 默认端口
数据库从库 3307 TCP 避免和主库冲突
Redis 缓存 6379 TCP 会话缓存
监控代理 9100 TCP Prometheus 采集
日志收集 514 UDP rsyslog 集中日志
SSH 管理 22 TCP 仅限管理网

避坑指南: 我曾经在部署时,把行情推送端口设成了 8080,和交易网关冲突了。结果行情数据发不出去,客户那边直接炸锅。后来我学乖了,每个服务用独立的端口段,比如交易用 8080-8089,行情用 8090-8099,数据库用 3306-3310。这样即使加新服务,也不容易冲突。

另外,端口要分内外网。比如 SSH 端口 22,只允许管理网访问;交易网关端口 8080,只允许外网防火墙映射;数据库端口 3306,只允许内网访问。这个规则一定要写在 iptables 或安全组里,别偷懒。

小技巧: 可以用 ss -tlnp 命令快速查看当前端口占用情况。部署前扫一遍,确保没有冲突。我习惯把这个命令写进部署脚本里,自动检查。

好了,环境规划这块就聊到这儿。记住一句话:规划越细,后面越省心。别急着动手,先把服务器、系统、网络、端口都定下来,后面就是按部就班地干活了。


专注资料整理