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 段,和业务完全隔离。
我的经验: 管理网一定要独立。有一次机房交换机故障,内网全断了,我靠管理网远程登录,硬是手动切了备用链路。要是管理网也走内网,那就彻底抓瞎了。
下面这张图,是我常用的网络拓扑结构:
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 命令快速查看当前端口占用情况。部署前扫一遍,确保没有冲突。我习惯把这个命令写进部署脚本里,自动检查。
好了,环境规划这块就聊到这儿。记住一句话:规划越细,后面越省心。别急着动手,先把服务器、系统、网络、端口都定下来,后面就是按部就班地干活了。