35人参与 • 2025-02-14 • 云虚拟主机
程序即可以部署在容器内,也可以部署在docker容器中,那么两者有什么区别?
部署在容器中相对于直接部署在宿主机上,网络速度是否会变慢?程序运行是否会慢?
测试使用的服务器是百度智能云轻量级服务器,2核4g,6m宽带。
两个标签窗口,上图直接使用宿主机进行ping 命令,下图docker的容器内进行ping命令,同时ping同一个ip地址。
根据多次ping命令的观察,可以发现在docker容器内进行ping命令速度比宿主机内慢0.1~0.2 ms。
结论:docker 对网络的影响很小,大约比主机慢0.1~0.2毫秒。
程序运行速度的是,我们使用springboot 的web方式测试,代码是生成一个倒序的数组,例如5,4,3,2,1,通过冒泡排序算法对数组排序(从小到大),得出排序所消耗的时间。
注意:
这里不使用随机算法产生数组作为待排序样本,是为了保证每次排序的样本数组是完全一样,保证每次测试公平。
代码如下:
@getmapping("/test/{num}") public string test(@pathvariable("num") int num){ long s=system.currenttimemillis(); int[] arr=new int[num]; for(int i=num;i>0;i--){ arr[num-i]=i; } //system.out.println(arrays.tostring(arr)); bubblesortmethod(arr);//冒泡排序 // system.out.println(arrays.tostring(arr)); long e=system.currenttimemillis(); return "排序:"+num+",耗时:"+(e-s)+" ms"; } public static int[] bubblesortmethod(int[] arr){ int temp = 0; for (int i = 0; i < arr.length-1; i++) { for (int j = 0; j < arr.length-1 -i; j++) { if (arr[j] > arr[j+1]){ temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } return arr; }
将程序打包为jar包,分别直接部署在宿主机和docker容器内。
为了避免不确定因素,我们需要多次测试,求平均值。
测试num=100000,将10万个数字进行排序。
注:
为了避免服务器不同时刻,可能cpu负载不一样,测试采用的交替方式,即一次宿主机,一次docker,降低可能存在的不同时刻主机负载的问题。
编号 | 宿主机模式(ms) | docker模式(ms) |
---|---|---|
1 | 4590 | 4869 |
2 | 4585 | 4647 |
3 | 4792 | 4750 |
4 | 5116 | 4615 |
5 | 5087 | 5087 |
6 | 5063 | 5372 |
7 | 4978 | 5120 |
8 | 5516 | 5098 |
9 | 5125 | 5076 |
10 | 5346 | 5331 |
平均耗时 | 5012 | 5002 |
平均值计算:去掉一个最大,去掉一个最小,求平均数。
总结:
在做这个测试之前,网上的结论是物理机比docker快很多,或者快百分之多少,但是似乎都是以听说的方式得到的结论。这里试验的目的为了以实际数据来得出结论,而不是靠猜测或者听别人说。也非常希望有人以
实际的试验结论进行辩驳,欢迎用事实依据的方法纠正。
上述试验仅供参考。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论