剑客
关注科技互联网

有关容器的三个问题

像Docker和Rocket这样的容器如今越来越受欢迎。在我与客户的交谈中,他们不断的询问什么是容器,以及如何在他们的环境中使用这些容器。如果你像大多数人那样对此感到好奇,请往下看。

产生背景

从我了解的来看,容器起源于Google(或者其他的)对于大规模的横向数据扩展需要。如今,这几乎不是一个不寻常的问题。当时,有好几个可以解决部署编排必要的应用程序和基础设施的不同方案,即虚拟机(VMs)和虚拟机的管理服务(例如VMware的vCenter)。然而,伴随类似Goolge兴起的大众优步等规模的公司推进,服务器虚拟化存在着一些非常严重的缺点,这样容器出现了。

什么是容器?

从本质上来看,容器和虚拟机的最大区别在于每个单元内的顶层资源的使用规模。

虚拟机从字面上理解就是去除了物理硬件、包含所有组件的完整的服务器。简单的来说,它就是一个可以运行应用程序的操作系统和所有服务器虚拟部件。这是一个用来隔离应用程序以提高可移植性的好办法,但是它仍然需要大量的冗余资源。

容器是在操作系统和应用运行的环境,但它本身不是操作系统,所有的容器共享操作系统内核。这种方法减少了在每个虚拟机上运行独立的操作系统所需要的CPU、内存和硬盘。就单个系统规模而言,它不值得考虑。但是,当系统规模达到上百万时,它可以在不降低功能性的同时节约不可思议的资源。

它们之间的关键的本质性区别在于“超级管理程序hypervisor运行在哪一层”,如果这么说太专业了,可以说这两种技术虚拟化了哪一层的基础实施(如下图所示)。对虚拟机而言,它在将操作系统运行的硬件进行了虚拟化。对于容器而言,它虚拟了应用程序运行的操作系统。这样做的好处来源于:容器可以在不需要为每个应用程序添加操作系统副本的情况下使应用程序独立出来,而操作系统占用大量的计算机资源,因此在隔离应用程序时,在顶层进行共享会非常高效。Google报道说粗略算来他们 每周启动了约20亿容器 。在这么大规模下,就能看到它对于提高效能的必要性了。

有关容器的三个问题

如何在虚拟机和容器之间做出抉择?

这是一个关系着数百万的问题。目前,两者常常一起使用。在AWS EC2实例上运行容器时,就是在一个虚拟机里运行容器。然而,请注意如下重要的不同之处:

安全性

安全性=虚拟机

无论何时,在整合资源时,不管用虚拟机或容器,首先要考虑安全性。因为控制资源访问的进程是发起攻击的唯一的重要的目标。如果与这个进程达成一致,就可能可以控制使用它的所有资源,不是吗?

效率

节约成本=容器

像我之前说的那样,你可以两者皆用。然而,容器在节约需要的物理机数量或者在任何云环境上的开支方面具有巨大的潜力,特别是在如今出现了类似 KubernetesSwarm 集群管理方案来管理环境的情况下。

在决定要在容器里放什么内容前,你需要考虑的只有另外一点:

性能

性能取决于需求

如果服务(或应用)的工作负载瞬时增大,或者需要大量的资源,此时,就需要仔细的考虑如何将服务组队了,这点对于虚拟机和容器都适用。这是因为支持服务运行的物理机资源总量是有限的,资源使用率越接近100%,相应的服务响应越慢,应用程序运行的越慢。

总结

容器还在不断成熟,一定还会有很多令人兴奋的报道出现。有一点是确定的:它不是一时的热点!当你没有必要把所有的环境都容器化时,我建议在开始前考虑一下它是否适合你的环境中。总之,有些人比我说的要聪明:“你计划的成功或失败,唯一的区别在于深思熟虑”。

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址