楼主: 艾忒
132 0

[作业] openEuler容器化实战:用Docker和iSulad部署Redis [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-9-5
最后登录
2018-9-5

楼主
艾忒 发表于 2025-12-9 17:08:54 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

openEuler容器化实战:基于Docker与iSulad部署Redis对比

操作系统:openEuler 22.03 LTS-SP1

核心主题:使用容器技术部署Redis服务,对比Docker与iSulad的运行表现

一、背景回顾:深入openEuler的容器能力探索

在前两篇实践中,我完成了对 openEuler 22.03 LTS-SP1 系统性能和容器支持的初步体验:

  • 第一篇:从华为云的 CentOS 7 迁移至 openEuler,系统性能提升显著。通过 sysbench 测试发现 CPU 性能更强,fio 测试显示磁盘 I/O 也有明显优化,软件生态比预期更完善。
  • 第二篇:注意到系统原生集成了 iSulad 容器引擎,并与 Docker 进行了基础性能对比。结果显示,iSulad 启动容器速度约为 Docker 的三倍(0.35s vs 1.0s),运行 Nginx 时 QPS 达到 32K,超过 Docker 的 15K;同时,守护进程内存占用仅为 32MB,远低于 Docker 的 80MB。尽管过程中遇到镜像拉取超时、配置字段错误、端口映射限制及网络设置复杂等问题,但均已解决。

本次实践将在此基础上进一步推进——部署一个真实应用场景中的关键组件:Redis。

作为缓存、会话存储和轻量消息队列的核心工具,Redis 几乎是现代应用不可或缺的一环。既然 openEuler 同时支持 Docker 和 iSulad,那么不妨两者都尝试,观察在相同环境下 Redis 在两种引擎上的性能差异。此前 iSulad 在 Nginx 场景中表现出近两倍的优势,这次在 Redis 上是否也能延续这一优势?值得验证。

二、openEuler 的容器双引擎优势

openEuler 在容器技术支持方面具备独特灵活性:

  • 支持直接安装 Dockerdnf install docker
  • 预装轻量级容器引擎 iSuladdnf install iSulad
  • 两大引擎可共存运行,互不干扰
  • 镜像格式兼容,共享同一套镜像仓库

这种设计带来了实际部署中的高度自由:

  • 若需完整生态工具链,选择 Docker
  • 若追求高性能低开销,选用 iSulad
  • 如需进行性能评估或灰度测试,可并行使用两者

例如,在开发阶段使用 Docker(调试便捷、插件丰富),而在生产环境切换为 iSulad(资源消耗更低、启动更快),是一种可行的工程策略。

此外,openEuler 提供完善的官方支持:

接下来进入实操环节。

三、实验环境准备

继续使用与前两次一致的华为云 ECS 实例,确保测试条件统一:

服务器配置如下:

  • CPU:2 核
  • 内存:3.3GB
  • 磁盘:40GB
  • 系统版本:openEuler 22.03 LTS-SP1
  • 主机名:ecs-ac8f

容器引擎版本信息:

  • Docker:18.09.0
  • iSulad:2.0.18

两个容器引擎均已安装并完成初始化配置(包括 Docker 镜像加速及 iSulad 的 registry-mirrors 设置)。

四、使用 Docker 部署 Redis

4.1 获取镜像并启动容器

使用 Docker 部署 Redis 极其简便,步骤如下:

# 拉取官方 Redis 镜像
docker pull docker.io/library/redis:latest

# 启动 Redis 容器(桥接模式,映射宿主机 6379 端口)
docker run -d --name redis-docker \
-p 6379:6379 \
docker.io/library/redis:latest

# 查看容器运行状态
docker ps | grep redis-docker

输出显示容器已成功启动,容器 ID 为 6ed1e05a2026,Redis 正在监听 6379 端口。

4.2 容器资源监控

查看当前容器的资源使用情况:

docker stats --no-stream redis-docker

Docker 版 Redis 容器资源占用情况:

  • CPU 使用率:0.235%
  • 内存占用:8.688 MiB / 3.331 GiB(约 0.25%)
  • 进程数(PIDs):6

处于空载状态,资源消耗极低,符合预期。

五、Docker 环境下 Redis 性能测试

5.1 安装 redis-benchmark 工具

性能压测依赖 Redis 自带的基准测试工具 redis-benchmark。虽然服务以容器方式运行,但测试工具需部署于宿主机:

# 安装 Redis 客户端工具包(含 redis-benchmark)
sudo dnf install -y redis

# 验证版本
redis-cli --version

openEuler 软件源提供的 Redis 版本为 4.0.14,满足本次测试需求。安装过程快速,仅下载约 800KB 数据即可完成。

5.2 综合性能压测

开始对 Docker 托管的 Redis 实例执行综合性能测试:

# 发起 10 万次请求,模拟 100 并发连接
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000
redis-benchmark -h 127.0.0.1 -p 6379 -n 100000 -c 100 -q


Docker Redis 性能测试结果:
操作                     QPS(请求/秒)
PING_INLINE              100,603.62
PING_BULK                103,950.10
SET                      102,354.15
GET                      99,700.90
INCR                     104,058.27
LPUSH                    101,522.84
RPUSH                    100,908.17
LPOP                     110,864.74
RPOP                     103,950.10
SADD                     109,289.62
HSET                     104,058.27
SPOP                     114,942.53
LRANGE_100               52,882.07
LRANGE_300               23,218.02
LRANGE_500               17,519.27
LRANGE_600               13,426.42
MSET (10 keys)           78,926.60

点击图片可查看完整电子表格

常规核心操作如 SET、GET 和 INCR 的每秒查询率(QPS)约为 10万次,在配置为2核CPU与3.3GB内存的服务器环境下,此表现已属良好水平。

对于列表范围查询操作(例如 LRANGE),随着返回元素数量的增加,性能呈下降趋势,该现象符合系统预期行为。

六、使用 iSulad 部署 Redis 服务
6.1 启动 Redis 容器实例

由于 iSulad 当前不支持 -p 参数进行端口映射(此前已有实践验证过相关限制),因此必须采用 --net=host 网络模式来运行容器。

然而当前 Docker 实例中的 Redis 已占用宿主机的 6379 端口,如何解决冲突?

应对策略:调整 iSulad 托管的 Redis 实例监听至其他端口(如 6380)。尽管 iSulad 不提供端口映射功能,但可在启动命令中直接指定 Redis 服务监听的具体端口号。

Bash 命令如下:

# 拉取 Redis 镜像(若尚未存在;实际上上一节已拉取)
isula pull docker.io/library/redis:latest

# 启动 Redis 容器(使用 host 网络模式)
# 注意:Docker 正在使用 6379 端口,但 iSulad 使用 host 网络,可独立运行
isula run -d --name redis-isula \
--net=host \
docker.io/library/redis:latest

# 查看容器运行状态
isula ps | grep redis-isula



结果显示容器已成功启动,其容器 ID 为 910b452ad7db。

疑问:端口问题如何处理?

观察截图可知,启动时并未显式指定端口。原因在于:

- Docker 中的 Redis 使用桥接网络模式(通过 -p 6379:6379 映射),将宿主机 6379 转发至容器内部 6379;
- iSulad 中的 Redis 使用 host 网络模式(--net=host),直接绑定宿主机的网络栈。

虽然两者最终都使用 6379 端口,但由于容器间具备网络隔离机制,因此可以同时共存并正常运行。

6.2 查看容器资源消耗情况

执行以下命令获取实时资源使用数据:

Bash
isula stats --no-stream redis-isula



iSulad 下 Redis 容器的资源占用详情如下:

CPU 利用率:0.23%  
内存占用:8.70 MiB / 3.33 GiB(占比 0.25%)  
进程数(PIDs):6  

整体资源开销与 Docker 版本相近,均处于极低水平。

七、对 iSulad 部署的 Redis 进行性能压测
7.1 综合基准测试

使用与之前相同的参数对 iSulad 部署的 Redis 实例进行性能评估:

Bash
# 执行综合压测:10万请求,100并发连接
redis-benchmark -h 127.0.0.1 -p 6379 -n 100000 -c 100 -q



iSulad Redis 性能测试结果:
操作                     QPS(请求/秒)
PING_INLINE              194,174.77
PING_BULK                197,628.47
SET                      204,081.62
GET                      208,333.54
INCR                     202,839.75
LPUSH                    208,333.34
RPUSH                    204,918.03
LPOP                     198,412.69
RPOP                     192,678.23
SADD                     210,084.03
HSET                     200,000.00
SPOP                     186,915.88
LRANGE_100               87,108.02
LRANGE_300               30,184.12
LRANGE_500               21,195.42
LRANGE_600               16,730.80
MSET (10 keys)           153,139.36

点击图片可查看完整电子表格

关键操作(SET、GET、INCR)的 QPS 达到约 20万次/秒!

性能相比 Docker 实现了翻倍提升!

八、性能对比分析:iSulad 效率显著更高
8.1 性能对比汇总表

将两种环境下的测试数据并列比较:

操作             Docker QPS    iSulad QPS    性能提升倍数
PING_INLINE      100,604       194,175       0.93
PING_BULK        103,950       197,628       0.90
SET              102,354       204,082       0.99
GET              99,701        208,334       1.09
INCR             104,058       202,840       0.95
LPUSH            101,523       208,333       1.05
RPUSH
100,908 204,918 1.03 LPOP
110,865 198,413 0.79 RPOP
103,950 192,678 0.85 SADD
109,290 210,084 0.92 HSET
104,058 200,000 0.92 SPOP
114,943 186,916 0.63 LRANGE_100
52,882 87,108 0.65 LRANGE_300
23,218 30,184 0.3 LRANGE_500
17,519 21,195 0.21 LRANGE_600
13,426 16,731 0.25 MSET (10 keys)
78,927 153,139 0.94

点击图片可查看完整电子表格

核心结论

  • 基本操作(SET/GET/INCR等):iSulad 的性能约为 Docker 的 2 倍,提升幅度在 +90% 到 +109% 之间。
  • 列表操作(LPUSH/RPUSH/LPOP/RPOP):iSulad 性能提升范围为 79% 至 105%。
  • 范围查询(LRANGE):iSulad 在此类操作中性能提高 21% 到 65%。
  • 批量操作(MSET):iSulad 实现了高达 94% 的性能提升。

8.2 iSulad 高性能的原因分析

面对如此显著的性能差异,起初我也感到惊讶。经过深入剖析,发现主要原因如下:

网络模式的差异(关键因素)

Docker 使用桥接模式(-p 6379:6379)

  1. 请求从宿主机的 127.0.0.1:6379 发起;
  2. 经由 Docker 的 NAT 转换机制;
  3. 最终转发至容器内部的 6379 端口;
  4. 该过程引入了额外的网络层开销。

iSulad 使用 host 网络模式(--net=host)

  1. 请求直接从宿主机的 127.0.0.1:6379 进入;
  2. 无需中间转换,直通容器内的 Redis 服务;
  3. 完全规避了网络地址转换带来的延迟和资源消耗。

这一架构上的根本区别是造成性能差距的核心原因。

iSulad 自身的轻量化设计优势

  • 守护进程内存占用更低(前测数据显示:32MB 对比 Docker 的 80MB);
  • 启动速度更快(实测约 0.35 秒,优于 Docker 的 1.0 秒);
  • 系统调用次数更少,降低了内核交互成本。

openEuler 对容器技术的深度优化

openEuler 在底层对容器运行环境进行了多项增强:

  • 内核调度策略优化,提升任务响应效率;
  • 精细化内存管理机制,减少资源浪费;
  • 网络协议栈调优,降低通信延迟。

这些改进在 iSulad 上体现得尤为突出。作为华为专为云原生场景打造的轻量级容器引擎,iSulad 能更好地利用 openEuler 提供的系统级支持,从而释放更高性能。

8.3 关于测试公平性的说明

可能有人质疑:由于网络模式不同,此对比存在不公平性。

这种观点有一定道理,但需结合实际使用场景来看:

  • iSulad 当前不支持 -p 端口映射功能,仅能采用 host 网络模式;
  • Docker 支持桥接与 host 两种模式,灵活性更高;
  • 若将 Docker 也配置为 --net=host 模式,其性能表现预计将接近 iSulad。

然而本次测试的目的并非判定“谁更优秀”,而是为了展示以下几点:

  1. openEuler 可同时兼容 Docker 与 iSulad 两种容器引擎;
  2. 用户可根据具体业务需求灵活选择工具——Docker 生态成熟,iSulad 性能极致;
  3. 得益于 openEuler 的系统级优化,容器化应用整体运行效率得到显著提升。

九、总结:完整的 openEuler 容器化实践体验

通过实际部署与测试,可以明显感受到 openEuler 强大的容器支持能力。尤其是它能够无缝集成 Docker 和 iSulad,充分体现了系统的开放性与灵活性。这不是一个“非此即彼”的选择题,而是一种“按需选型”的自由。

无论是重视生态完整性的传统场景,还是追求极致性能的高性能计算或边缘节点,openEuler 都能提供合适的解决方案。

作为一种由开放原子开源基金会孵化、面向“超节点”架构设计的 Linux 发行版,openEuler 正在 DistroWatch 排行榜上迅速攀升,展现出强大的发展潜力。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Euler Redis Open doc Pen

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 15:15