Docker 虚拟机的开销高,还是 wsl2 虚拟机的开销高?

2021-03-08 11:30:39 +08:00
 LeeReamond
如题,标题可能有些歧义,我有一个实际应用场景。

有一个网络服务需要部署,公司只提供 windows 系统的物理机器,这个无法更改。该服务是基于 linux 部署的,目前通过 hyperv 虚拟机运行在 windows 系统当中。现在需要使用单例 redis,有两种部署 redis 的方案,一种是再开一台 hyperv 虚拟机,部署 redis,另一种是在现有的 linux 虚拟机里安装 docker,开一个 redis 容器。

想要请教一下各位,单纯追求性能,不考虑维护难度以及内存的情况下,哪种方案的 redis 性能更好?
4261 次点击
所在节点    问与答
22 条回复
cheng6563
2021-03-08 11:46:52 +08:00
wsl2 就是用的 hyper-v 。
直接现有虚拟机里部署就行了,免得浪费内存。
cheng6563
2021-03-08 11:47:36 +08:00
而且 wsl2 的端口转发还需要一堆操作,难搞。
ScepterZ
2021-03-08 11:51:28 +08:00
还有一种方案是这个虚拟机不用 docker 直接开 redis 吧,不太懂虚拟机的网卡会不会瓶颈,感觉 cpu 内存什么的应该都还好
LeeReamond
2021-03-08 11:52:17 +08:00
@cheng6563 hyperv 用的是 wsl2,说反了吧,网络桥接部分问题倒不是很大,我主要想知道这种虚拟机套 docker 的方式会不会增加一层虚拟化开销,底层不是很懂
LeeReamond
2021-03-08 11:53:10 +08:00
@ScepterZ 确实但是我觉得最好隔离一下,虽然不知道有什么用,隔离了总是好的,所以不考虑直接开的方案
also24
2021-03-08 11:56:40 +08:00
> 有两种部署 redis 的方案:
> 一种是再开一台 hyperv 虚拟机,部署 redis,
> 另一种是在现有的 linux 虚拟机里安装 docker,开一个 redis 容器。

我寻思着你这两个方案,和 WSL2 也没啥关系啊?


首先背诵 100 遍:Docker 不是虚拟机
其次,假如两台虚拟机性能上没有差异的话,你这两个方案的性能应该是非常接近的。


不过,如果宿主机内存不大,那方案 2 可以给唯一的一台虚拟机分配更多的可分配内存,有利于更灵活的使用。
同理,方案 1 的好处就是隔离性更强,两台虚拟机之间(一般情况下)不会出现抢占资源的情况。
miyuki
2021-03-08 11:57:34 +08:00
docker 是容器,不是虚拟机……你理解成进程就可以了
Osk
2021-03-08 11:58:58 +08:00
docker 不算虚拟化吧。。。

hyper-v - linux/wsl2 - docker - 程序
hyper-v - linux - 程序

不套 docker 性能肯定更好一点。
至于 wsl2,,,还是别用在生产环境吧。
cheng6563
2021-03-08 12:00:38 +08:00
@LeeReamond wsl2 的网络问题大的很,我都因为他的网络问题放弃使用了。回到 wsl1+vmware 模式了。不要用 wsl2 发生产服务
lostberryzz
2021-03-08 12:04:01 +08:00
docker 部署吧,比较方便点,还可以 portainer web ui 管理容器
LeeReamond
2021-03-08 12:04:06 +08:00
@Osk 但是这个外面还有个 windows 系统,不同 hyperv 之间资源抢占是否有开销,毕竟 docker 那个模式可以在同一个 linux 内由 linux 分配资源
LeeReamond
2021-03-08 12:05:14 +08:00
@cheng6563 大佬能否细说一下 wsl2 的网络问题,我们现在是上生产环境的,服务运行时间大概半年,没遇到过什么问题,可能因为我们服务比较简单。它的网络有什么潜在的坑吗?
NilChan
2021-03-08 12:13:06 +08:00
应该 Docker for Windows 更稳一点吧。
Osk
2021-03-08 12:31:36 +08:00
@LeeReamond hyper-v 中:外面有个 Windows 系统这种说法是不太恰当的,应该是:还有个 Windows 和它一起运行。

但你司只有 Windows 物理机啊。。。
aMR
2021-03-08 13:02:34 +08:00
Docker for Windows + WSL2 后端不香么
https://docs.docker.com/docker-for-windows/wsl/
czwstc
2021-03-08 13:07:52 +08:00
@LeeReamond WSL2 就是基于 hyperv 技术的虚拟化。

https://docs.microsoft.com/en-us/windows/wsl/wsl2-faq


我记得外部访问 WSL2 例如 ssh 经常端口自动关了。 不过我个人觉得,生产环境哪有上 WSL 的? 至于 hyperV 跑 linux 和跑一个在 linux 里面的 docker,性能基本忽略不计,看运维的成本就好了。
成本最大的不是虚拟机性能,而是人去运维的成本。
locoz
2021-03-08 13:14:38 +08:00
这两个东西貌似都是跑在 hyper-v 上,理论上来讲都差不多。
also24
2021-03-08 13:16:40 +08:00
看了各位的回复,更懵逼了,楼主这两个方案和 WSL2 到底有个啥关联啊?
totoro625
2021-03-08 15:24:00 +08:00
用过 wsl2+docker,觉得很难用,强烈不推荐

不太清楚 wsl2+docker 的运行原理的可以尝试一下在自己的 Windows 上安装一个体验一下
你的两种方案拆分来看就是:
1 、开启 hyper-v 虚拟机,在里面安装 Debian 等系统,再运行 Redis 。(或者安装 docker+Redis )
2 、开启 wsl2,wsl2 自动开启 hyper-v 虚拟机,再安装 docker-for-windows,docker-for-windows.exe 自动开启两个 hyper-v 虚拟机( 1 、docker ; 2 、docker-data ),此时你可以在 powershell/cmd 运行 Linux/docker 命令,但是由于三个 hyper-v 虚拟机都是没有管理 GUI 界面的,你会相当的痛苦,尤其是网络管理这一块,要用 powershell 管理,远不如自己开一个 hyper-v 来的舒服

综合考虑人力成本,建议直接开一个 hyper-v 来跑熟悉的 Linux 而不是跑一个不熟悉的 wsl2

单纯追求性能,必须是 wsl2 高,因为可以跑爆宿主机的内存 /CPU/硬盘,相当于直接运行在宿主机,能随意修改宿主机文件;而 hyper-v 的 Linux 是隔了一层保护外壳的

但是你真的不要考虑维护难度么,想好好用上 wsl2 至少要会两种系统,大家都是当做玩具用的,等你研究透了估计能给微软提 bug
also24
2021-03-08 23:47:25 +08:00
@totoro625 #19
楼主的方案 2,不是说在 hyper-v 里的已有的 Linux 虚拟机里安装 docker 么?怎么关联到 WSL2 的?

> 该服务是基于 linux 部署的,目前通过 hyperv 虚拟机运行在 windows 系统当中 ......
> 另一种是在现有的 linux 虚拟机里安装 docker,开一个 redis 容器。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/759530

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX