最近使用Container构建云平台的企业越来越多,其实Container并不是新技术,OpenVZ、Linux-VServer、FreeBSD jails、Solaris Containers都是Container技术的实现,随着Paas的发展,Container技术受到更多的重视。那么在进行虚拟化技术选择时,到底是该如何选择呢?
首先,什么是虚拟化?
虚拟化是指在同一台物理服务器上模拟多台虚拟机的能力,且每台虚拟机在逻辑上拥有独立的CPU、内存、硬盘和网络接口等。虚拟化可以提高硬件资源的利用率,使多个应用能隔离的运行在同一台物理机上。虚拟化分为硬件层面的虚拟化和软件层面的虚拟化。
什么是硬件虚拟化?
一种对计算机或操作系统的虚拟,对用户隐藏了真实的计算机硬件,表现出另一个抽象计算平台。硬件虚拟化通过模拟硬件的方式来获得真实计算机的环境,可以运行一个完整的操作系统。在硬件虚拟化中,又有Full Virtualization、Partial Virtualization和Paravirtualization等不同的实现方式。
在硬件虚拟化的层面,现代虚拟化技术通常是全虚拟和半虚拟的混合体。常见的虚拟化技术例如VMWare、Xen和KVM都同时支持全虚拟化和半虚拟化。硬件虚拟化方式提供的虚拟机,都独立的运行着一个完整的操作系统,这样在同一台物理宿主机上存在大量相同或者相似的进程和内存页,从而导致较大的性能损耗(比如:宿主机操作系统是Centos,使用KVM生成的多个虚拟机,且在每个虚拟机中都运行Windows操作系统和相同的QQ程序,这样宿主机的性能必然产生较大损耗)。因此,硬件虚拟化也被称为重量级虚拟化,在同一宿主机上能够同时运行的虚拟机数量相当有限。
什么是软件层面的虚拟化?
指在同物理服务器上提供多个隔离的虚拟运行环境,也被称为容器技术。在软件虚拟化的层面,同一宿主机上的所有虚拟机(又称Container)共享宿主机的操作系统实例,不存在由于运行多个操作系统实例所造成的性能损耗(比如:宿主机的操作系统为Centos,通过软件虚拟化技术生成多个Container,且每个Container都运行着QQ程序,由于它们共享同一个宿主机Centos操作系统,所有Container中QQ程序的进程在Centos中只有一个)。因此,软件虚拟化也被称为轻量级虚拟化,在同一宿主机上能够同时运行的虚拟运行环境数量比较宽松。以Solaris操作系统上的Container为例,一个Solaris操作系统的实例理论上可以支持多达8000个Container(实际能够运行的Container数量取决于系统资源和负载)。与此类似,Linux操作系统上的LXC也可以轻松地在同一宿主机上同时支持数量可观的虚拟运行环境。
LXC(Linux Container)的优势有哪些?
(1)与宿主机使用同一个内核,性能损耗小;
(2)不需要指令级模拟;
(3)不需要即时(Just-in-time)编译;
(4)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
(5)避免了准虚拟化和系统调用替换中的复杂性;
(6)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。
选择时考虑哪些因素?
在虚拟化这个领域,国内外的各大公司对硬件虚拟化的兴趣较大,在研发和生产环境中也大都采用硬件虚拟化技术。但是近段时间国内外很多云计算厂商纷纷开始尝试使用LXC替代KVM/XEN等硬件虚拟化技术以获得更好的性能。至于在实际的应用场景中到底应该选择硬件虚拟化还是软件虚拟化,需要从以下方面考虑。灵活性、易管理,可靠性、稳定性、性能考虑。硬件虚拟化更灵活、易管理,硬件虚拟化具有天生的迁移优势。软件虚拟化则有更高性能,更加节省资源,对于一些小的网站性能可以提升上千倍,在没有用户访问的时候,可以关闭LXC,从而节省资源。在有用户访问的时候,可以快速启动,但缺点是迁移成本高,学习成本高。而且,目前来看LXC仍属于小众路线。
因此,在选择上还需要根据自身的业务和公司的战略去确定使用哪种虚拟化技术。比如京东,在公有云方面采用Openstack + KVM硬件虚拟化技术;但在PaaS层和私有云方面,则采用了Openstack + LXC的方式进行实现。让彼此的优势互补,以达到最佳的运行效果。