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),在宿主机层面统一配置,容器内直接继承。
虚拟机 vs 容器架构对比 虚拟机架构 App A + 中间件 Guest OS (CentOS 7) Hypervisor (VMware/KVM) Host OS (物理机) 物理硬件 (CPU/内存/磁盘) 容器架构 容器 A (Nginx) 容器 B (Redis) 容器 C (Kafka) 容器 D (MySQL) Docker Engine / Containerd Host OS (共享内核) 物理硬件 (CPU/内存/磁盘) 虚拟机:每个 VM 独立内核,资源隔离强但开销大;容器:共享宿主机内核,启动快且资源利用率高

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 服务。
开发环境端口分配与网络拓扑 宿主机 (CentOS 7 / Ubuntu 22.04) — 192.168.1.100 Nginx :80 / :443 Redis :6379 MySQL :3306 Kafka :9092 Elasticsearch :9200 / :9300 Kibana :5601 Prometheus :9090 Grafana :3000 所有服务均通过宿主机 IP + 映射端口对外暴露,容器间通过 host 网络直接通信

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。