转自:http://www.ciotimes.com/cloud/153978.html
摘要:本篇就针对“Docker运行在物理机还是云主机上,该如何选择?”这个话题展开讨论。
关键词: Docker
从2013年3月dotCloud公司发布第一个版本的Docker以来,已经有越来越多的公司将自己的线上业务跑在了Docker里面,大量的实战经验证明Docker是一种值得信赖和拥抱的技术。不论网上,还是各种技术交流会上,大家也都在交流Docker的使用经验,Docker的话题很多,本篇就针对“Docker运行在物理机还是云主机上,该如何选择?”这个话题展开讨论。
对于这个问题,很多朋友第一反应可能是先找找官网有没有类似的最佳实践,笔者也顺着这个思路来,在搜索之后发现Docker官方并不要求你一定要将Docker跑在物理机或者云主机上,它更关注的是应用而非基础架构,无论是物理机,还是云主机,无论你的操作系统是CentOS,Fedora,Ubuntu,Debian,MAC,Windows它都支持。
官方没有明确的最佳实践,那对于新用户来说怎么办呢?
习惯性的想到了另一条路“借鉴”;对于新用户,借鉴是个不错的选择,看看大公司都是怎么用的,比如BAT,京东,网易他们是怎么用的。不过就笔者在与这些公司的朋友交流之后发现,这条路似乎也给不了我们答案。他们的Docker跑在物理机和云主机里面都有,大家也都用的很好。
两条途径都给不了我们现成的答案,那看来只能靠自己了。
明确了Docker在物理机和云主机里面都能跑,而且每个场景也都有人在线上用,那我们就来比较一下,各种的优势和不足,简单点就从五个关键字出发。
1.性能
性能包括CPU性能和IO性能,相同配置的情况下,物理机都是胜出的,这点源自于云主机的硬件都是由软件模拟出来的(passthrough硬件给云主机的情况,暂不考虑,因为一般情况下passthrough的云主机很难得到,且成本较高),性能到底损耗多少呢?
国外有人做过相关的测试,使用了一台8核32G Amazon EC2 m4.2xlarge 云主机和一台8核32G的物理机进行对比测试,测试的结果是物理机上比云主机上运行Docker,在IO和CPU方面要快25%-30%,当然这个结果只能代表他的测试场景,但大家也可以参考他的测试方法,在自己的环境里面亲测一下。25%-30%的性能优势,物理机完胜;
2.多租户
同一个Docker节点,如果多人使用,且对于某些用户的工作负载无法共享内核或者需要监听相同的端口。在这种情况下,因为云主机提供了额外的隔离层,所以是物理机无法满足的,云主机完胜。
3.自动化
自动化,是目前大家都绕不开的话题,因为对于繁琐重复的事情,谁都不喜欢天天干(特别是运维),所以大部分公司,都有运用自动化,差别在于大公司有完整的平台,小公司有一堆脚本。
目前各大云基本都有各自的API,可以非常方便的管理自己的云主机,创建,删除,都非常方便。但是对于物理机的API,这个就非常困难了,因为涉及到不同的型号,使用IPMI也需要做大量的适配,目前能提供物理机租赁的云厂商也没有好用的API提供给用户。所以当需要临时搞活动的时候,结合自动化/API, 将Docker跑在云主机上是唯一能满足需求的方案。
4.灵活性
灵活性包括两方面,一是服务器配置调整;云主机配置调整,只需要关机,页面升配,开机,整个升配过去1-2分钟就能搞定;物理机调整配置,首先需要确认是否支持,比如硬盘槽位够不够,服务器网口够不够,网线是否布好,交换机口够不够等等,即使可以升配,那升级硬盘还要系统里面重新做raid,升级内存还需要开机箱等等,一系列繁琐的操作,最终完成升配那最快也需要几个小时。1-2分钟 PK 几个小时,云主机完胜。
二是用户配额,云主机的配置是灵活的,可定制的,比如某个用户,需要搭建一套测试环境,需要8核16G的资源就够了,这种情况下,一台云主机即可满足。但如果使用物理机的话,就非常不灵活了,因为物理机在采购的时候,通常是一个规格的,不可能穷举不同的规格。所以这一点上,云主机完胜。
5.灾难恢复
硬件故障,这个谁都无法完全避免,那么出现故障的时候,恢复一台云主机和恢复一台物理机哪个更快?目前的公有云,很多都采用的计算节点和存储节点分开的架构,存储节点做了高可用,所以计算节点出现硬件故障时,只需要将云主机做迁移,再开机即可完成故障恢复。时间可以控制在5分钟内完成。
物理机故障恢复,首先需要判断是什么故障,一般硬盘故障都不影响系统(物理机硬盘都会做raid进行保护),内存故障,主板故障,如果有备机,那可以进行更换至少30分钟+,如果没有备机,那就需要报修,派单,上门更换,整个流程走完需要1-2天(这个还取决你购买的服务,服务器是否过保等等);5分钟 PK 1-2天,云主机完胜。
总结
在通过“性能”,“多租户”,“自动化”,“灵活性”,“灾难恢复”这五个关键字的对比分析之后,简单总结一下, 对于大多数场景,Docker运行在云主机上是就够了,但是对性能要求非常高的应用,还是建议直接在物理机上运行Docker,所以混合云,才是最终的解决之道。将Docker混合部署在物理机和云主机上,根据应用的需求,灵活的分配资源,在满足业务的前提下,最大限度的提高资源利用率才是真正的最佳实践。