使用物理机还是虚拟机:这是最大的容器部署问题|「云头条」
我与想搞清楚如何在生产环境下运行容器化应用程序的社区成员多次有过这样的交流:
用户:那么,我该在哪里运行容器呢?裸机还是虚拟机?
我:不是“非此即彼”的问题――那正是Docker的魅力所在。选择完全取决于什么适合你的应用程序和业务目标――物理机还是虚拟机,云端还是本地。如果你的应用程序或业务要求需要(及变化)的话,可以进行混合搭配。
用户:可是,你得有个建议吧。
我:我会给你一个其实没人喜欢的答案:那得看情况。
用户:你说得没错,我不喜欢这样的答案。
我:我有点猜想到你不会喜欢,但这确实是正确的答案。
科技界有些很难回答的问题,“那得看情况”这个答案常常被认为是偷懒的借口。但是说到在哪里运行容器化应用程序,这确实是最佳答案,因为没有两个应用程序是一模一样的,也没有两家公司拥有一模一样的业务要求。
任何IT决策基于众多变化因素:性能、可扩展性、可靠性、安全性、现有系统、当前的技能组合和成本等等。如果有人着手决定如何将基于Docker的应用程序部署到生产环境,需要考虑所有这些因素。
Docker兑现了这一承诺:让你可以无缝地部署应用程序,不管什么样的底层基础设施。 无论是裸机还是虚拟机,无论是数据中心还是公共云。如果你的应用程序或业务要求需要,完全可以将应用程序部署到数据中心的裸机上,也可以部署到跨多家云提供商的虚拟机上。
这里的关键在于,你不被任何一种方案牢牢锁定。你很容易将应用程序从一种基础设施迁移到另一种。这实际上是零磨擦。
但是那种自由也让决定在哪里运行那些应用程序这个过程实际上比想象的来得困难。这个答案会受到你今天所做的工作和将来可能需要做的工作的共同影响。
所以,虽然我没法马上回答“我该在哪里运行应用程序?”,不过可以列出做这个决定时需要考虑的若干因素。
我确信这些因素并不是很全面,但愿它能起到抛砖引玉的作用。
延迟:对延迟容忍度低的应用程序还是放在物理机上比较好。我们在金融服务领域经常看到这一幕(交易应用程序就是典型例子)。
容量:虚拟机实现瘦身的手段就是优化系统负载。如果你的容器化应用程序并不耗用物理设备上的所有容量,虚拟化在这里仍具有优点。
混合工作负载:物理服务器将运行操作系统的单一实例。所以,如果你喜欢在同一个主机上混合Windows和Linux容器,那么就需要使用虚拟化。
灾难恢复:同样,就像容量优化一样,虚拟机的一大优点在于,具有站点恢复和高可用性方面的高级功能。虽然这些物理主机可能也有这些功能,但是虚拟化提供了一系列更广泛的选择。
现有的投入和自动化框架:许多企业组织已经在基础设施配置方面构建了一套全面的工具。在引入新的技术时,充分利用这现有的投入和专长非常明智。
多租户:一些客户拥有的工作负载无法共享内核。这种情况下,相比在裸机上运行容器,虚拟机提供了一道额外的隔离层。
资源池/配额:许多虚拟化解决方案有一系列广泛的功能特性,可以控制虚拟机如何使用资源。Docker提供了资源限制这个概念,但是就裸机而言,在某种程度上来说你得靠自己。
自动化/API:企业组织里面通常很少有人能够通过API来配置裸机。如果目的是自动化,你就需要API,而这可能将裸机排除在外。
许可成本:直接在裸机上运行可降低成本,因为你不需要购买虚拟机管理程序的许可证。当然,你甚至可能不需要为托管容器的操作系统支付任何费用。
最后,这个问题不应该是“裸机还是虚拟机”――这个问题是,哪种基础设施对我的应用程序要求和业务目标来说最合适。所以,今天不妨混合搭配,得到正确的答案,还要知道,借助Docker,你可以在将来迅速、轻松地响应任何变化。
云头条编译|未经授权谢绝转载
相关阅读:
R、Python、Scala和Java,到底该使用哪一种大数据编程语言?
如何使用 Docker、ECS、Terraform 重建基础架构?
美国中央情报局 CIA 被曝秘密投资 Mesosphere 和 Docker
欢迎加入“容器群”,群主微信:aclood