2. 开发环境规划:操作系统选择、虚拟化方案对比与资源分配
开发环境是支付系统中间件稳定运行的基石。本章从操作系统选型、虚拟化/容器化方案对比、资源规划与端口分配三个维度,梳理环境搭建前的关键决策点,确保后续部署步骤有据可依。
2.1 操作系统选择:CentOS vs Ubuntu
支付系统中间件(Nginx、Kafka、Redis、MySQL、Elasticsearch 等)对操作系统的内核参数、文件系统、网络栈有特定要求。以下从生产环境与开发环境两个视角对比 CentOS 与 Ubuntu:
| 对比维度 | CentOS 7/8 (RHEL 系) | Ubuntu 20.04/22.04 (Debian 系) |
|---|---|---|
| 内核版本 | 3.10+ (CentOS 7) / 4.18+ (CentOS 8) | 5.4+ (20.04) / 5.15+ (22.04) |
| 包管理 | yum / dnf + RPM | apt + DEB |
| 默认防火墙 | firewalld | ufw |
| SELinux | 默认 Enforcing | 默认 Disabled (AppArmor) |
| 中间件官方支持 | 多数中间件提供 RPM 包或二进制 | 多数中间件提供 DEB 包或 PPA |
| 生产环境占比 | 金融/传统企业 > 60% | 互联网/创业公司 > 50% |
| 学习曲线 | 中等(需熟悉 SELinux、systemd) | 较低(社区文档丰富) |
选型建议: 本课程以 CentOS 7.9 作为生产环境参考系统,同时提供 Ubuntu 22.04 的等效命令。若你所在团队使用 Ubuntu,可直接对照执行,核心配置逻辑一致。
2.2 虚拟机与容器化方案对比
在开发环境中,我们需要在单台物理机上模拟多节点中间件集群。虚拟机(VM)与容器(Container)是两种主流隔离方案,其差异直接影响资源利用率、启动速度和网络拓扑复杂度。
| 对比维度 | 虚拟机 (VMware/VirtualBox/KVM) | 容器 (Docker/Podman/Containerd) |
|---|---|---|
| 隔离级别 | 硬件级虚拟化(独立内核) | 进程级虚拟化(共享宿主机内核) |
| 启动时间 | 30s ~ 2min | 1s ~ 5s |
| 镜像大小 | 2GB ~ 10GB | 100MB ~ 1GB |
| 资源开销 | 高(每个 VM 需完整 OS) | 低(共享 OS 内核) |
| 网络模型 | NAT / Bridged / Host-Only | Bridge / Host / Overlay |
| 适用场景 | 需要完整 OS 环境、内核参数调优 | 微服务、快速扩缩容、CI/CD |
| 支付系统中间件适配 | 适合 Kafka、Elasticsearch 等有状态服务 | 适合 Nginx、Redis、MySQL(需持久化卷) |
本课程方案: 采用 Docker Compose 作为主要容器编排工具,配合 host 网络模式 简化端口映射。对于需要内核参数调优的中间件(如 Kafka、Elasticsearch),在宿主机层面统一配置,容器内直接继承。
2.3 资源规划与端口分配
支付系统中间件集群通常包含 6~10 个核心服务。以下给出单机开发环境的资源分配建议,以及端口规划表,避免服务端口冲突。
2.3.1 硬件资源规划(单机开发环境)
| 资源项 | 最低配置 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU | 4 核 | 8 核 | Kafka + ES 对 CPU 敏感 |
| 内存 | 8 GB | 16 GB | ES 堆内存建议 4GB,Kafka 建议 2GB |
| 磁盘 | 100 GB SSD | 256 GB SSD | 中间件日志与数据持久化 |
| 网络 | 千兆以太网 | 千兆以太网 | 容器间通信延迟 < 1ms |
2.3.2 端口分配表(宿主机映射)
所有容器使用 host 网络模式 或 bridge 模式 + 端口映射,确保宿主机端口不冲突:
| 中间件 | 默认端口 | 宿主机映射端口 | 协议 | 备注 |
|---|---|---|---|---|
| Nginx | 80 / 443 | 80 / 443 | HTTP/HTTPS | 反向代理入口 |
| Redis | 6379 | 6379 | TCP | 缓存 / 分布式锁 |
| MySQL | 3306 | 3306 | TCP | 支付核心数据库 |
| Kafka | 9092 | 9092 | TCP | 消息队列 |
| Elasticsearch | 9200 / 9300 | 9200 / 9300 | HTTP / TCP | 日志与搜索 |
| Kibana | 5601 | 5601 | HTTP | ES 可视化 |
| Prometheus | 9090 | 9090 | HTTP | 监控采集 |
| Grafana | 3000 | 3000 | HTTP | 监控面板 |
端口冲突避坑: 宿主机上若已运行 MySQL、Redis 等原生服务,需先停止或修改其端口,避免与容器映射端口冲突。建议开发环境统一使用容器化部署,宿主机仅保留 SSH 与 Docker 服务。
2.4 环境初始化脚本示例
以下脚本在 CentOS 7 上完成基础环境配置,包括关闭 SELinux、设置内核参数、安装 Docker 与 Docker Compose:
#!/bin/bash
# centos_env_init.sh — 支付系统中间件开发环境初始化
# 1. 关闭 SELinux(生产环境请按需配置)
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 2. 设置内核参数(Kafka/ES 依赖)
cat >> /etc/sysctl.conf <<EOF
vm.max_map_count = 262144
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 8
EOF
sysctl -p
# 3. 安装 Docker
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable docker --now
# 4. 安装 Docker Compose
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 5. 验证
docker --version
docker-compose --version
echo "环境初始化完成!"
Ubuntu 等效命令: 将
yum install 替换为 apt install,SELinux 相关步骤替换为 ufw disable,内核参数配置方式相同。
2.5 本章小结
- 操作系统: CentOS 7 作为生产参考,Ubuntu 22.04 作为开发备选,核心配置逻辑通用。
- 虚拟化方案: 采用 Docker Compose + host 网络模式,兼顾资源效率与网络简化。
- 资源规划: 最低 4 核 8GB 内存,推荐 8 核 16GB 内存 + SSD 磁盘。
- 端口分配: 8 个核心中间件端口已规划,避免冲突,后续章节将基于此端口表编写 docker-compose.yml。