虚拟化是指在同一台物理服务器上模拟多台虚拟机的能力。且每台虚拟机在逻辑上拥有独立的CPU、内存、硬盘和网络接口等。虚拟化可以提高硬件资源的利用率,使多个应用能隔离的运行在同一台物理机上。虚拟化分为硬件层面的虚拟化和软件层面的虚拟化。
硬件虚拟化是通过模拟硬件的方式来获得真实计算机的环境,可以运行一个完整的操作系统。在硬件虚拟化中,又有Full Virtualization(全虚拟化,完整的模拟一整套真实的硬件设备)、Partial Virtualization(部分虚拟化,仅对关键性计算组件或者指令集进行模拟。操作系统需要修改才能运行在部分虚拟化环境中)和Paravirtualization(半虚拟化,不对硬件设备进行模拟,虚拟机拥有独立的运行环境,通过虚拟机管理程序共享的硬件资源。大部分操作系统需要修改才能运行在半虚拟化环境中)等不同的实现方式。软件层面的虚拟化,指在同物理服务器上提供多个隔离的虚拟运行环境,也被称为容器技术。
在硬件虚拟化的层面,现代虚拟化技术通常是全虚拟和半虚拟的混合体。常见的虚拟化技术例如VMWare、Xen和KVM都同时支持全虚拟化和半虚拟化。硬件虚拟化方式提供的虚拟机,都独立的运行着一个完整的操作系统,这样在同一台物理宿主机上存在大量相同或者相似的进程和内存页,从而导致较大的性能损耗(比如:宿主机操作系统是Centos,使用KVM生成的多个虚拟机,且在每个虚拟机中都运行Windows操作系统和相同的QQ程序,这样宿主机的性能必然产生较大损耗)。目前,通过KSM(kernel samepage merging)等技术可以识别与合并含有相同内容的内存页,但是还没有对大量相同或者相似的进程进行优化处理的有效手段,相信随着虚拟化技术的发展,该技术也会取得巨大的进展。因此,硬件虚拟化也被称为重量级虚拟化,在同一宿主机上能够同时运行的虚拟机数量相当有限。在软件虚拟化的层面,同一宿主机上的所有虚拟机(又称Container)共享宿主机的操作系统实例,不存在由于运行多个操作系统实例所造成的性能损耗(比如:宿主机的操作系统为Centos,通过软件虚拟化技术生成多个Container,且每个Container都运行着QQ程序,由于它们共享同一个宿主机Centos操作系统,所有Container中QQ程序的进程在Centos中只有一个)。因此,软件虚拟化也被称为轻量级虚拟化,在同一宿主机上能够同时运行的虚拟运行环境数量比较宽松。以Solaris操作系统上的Container为例,一个Solaris操作系统的实例理论上可以支持多达8000个Container(实际能够运行的Container数量取决于系统资源和负载)。与此类似,Linux操作系统上的LXC也可以轻松地在同一宿主机上同时支持数量可观的虚拟运行环境。
在虚拟化这个领域,国内外的各大公司对硬件虚拟化的兴趣较大,在研发和生产环境中也大都采用硬件虚拟化技术。但是近段时间国内外很多云计算厂商纷纷开始尝试使用LXC替代KVM/XEN等硬件虚拟化技术以获得更好的性能。至于在实际的应用场景中到底应该选择硬件虚拟化还是软件虚拟化,需要从以下方面考虑。灵活性、易管理,可靠性、稳定性、性能考虑。硬件虚拟化更灵活、易管理。软件虚拟化则有更高性能。关于稳定性和可靠性没有一个确切的证据证明谁比谁更优。如果最终用户不需要独立的操作系统。而只需要关心运行环境(例如PaaS层面的各种App Engine服务),这样软件虚拟化也是比较好的选择。虽然Container能提升资源利用率,但迁移成本很高,硬件虚拟化具有天生的迁移优势,另外还包括工程师的学习成本,这些都是需要考虑在内的因素。所以选择上还需要根据自身的业务和公司的战略去确定使用哪种虚拟化技术。
目前京东根据自身业务需求,在公有云方面采用Openstack + KVM硬件虚拟化技术。但在PaaS层和私有云,则采用了Openstack + LXC的方式进行实现。让彼此的优势互补,以达到最佳的运行效果。
一般来讲虚拟化发展公认分为5个阶段。阶段一,服务器整合。通过虚拟化技术完成IT基础架构、资源的整合,包括服务器整合、存储整合、网络整合等。以此来进行IT基础设计的简化、达到提高IT设备的利用率,降低运维成本的目的。阶段二,动态工作负载迁移。通过虚拟化技术实现动态工作负载迁移。即在业务不受到任何影响的情况下,实现IT资源的动态调整和迁移,以此实现对局部资源的削峰填谷效应,进一步提高IT投资的利用率。传说中的虚拟机Resize&Live Migrate。阶段三,高可用。通过虚拟化实现高可用,即通过虚拟化技术提升服务质量,增强为前端业务提供服务支持的能力。用户在不增加IT投资的情况下,就可以使用虚拟机的冗余和备份。高可用分为硬件和软件,硬件层面只能通过采购冗余的硬件解决。比如:交换机、路由器、电力,空调,消防,和其他的冗余;软件层面需要考虑有状态的与无状态的区别。如:软件服务集群、Active/Passive、Active/Active等实现。阶段四,工作负载管理。通过虚拟化技术实现工作负载管理,有了前几个阶段的基础,用户可以对虚拟服务器进行统一的规划和管理。例如京东每个月月末都会有促销,那么管理员就可以有计划地在月末为其调配更多的虚拟资源,而无需增加物理设备的购买。这个就是传说中的ELB(Elastic Load Balance)+ AS(AutoScaling)。阶段五,灾难恢复。通过虚拟技术来实现灾难恢复,这同样是建立在前几阶段之上的高级应用,在本地或异地,通过虚拟服务器或虚拟存储实现不同等级的灾难恢复能力,用户可以根据自己能够忍受的业务中断时间来选择相应的方案,而这,也几乎不用增加过多的IT物理设施投入和运维成本。
为了快速的完成虚拟化5个阶段的建设,推动虚拟化技术的发展,IT巨头们纷纷加大对虚拟化投入。从2006年到现在,虚拟化技术进入了爆发期。诸多厂商如雨后春笋般涌现,如微软、红帽、思杰、IBM、Amazon、Rackspace、Google、Oracle等。在国内,京东、腾讯、华为等也都纷纷推出了各自的公有云服务。仿佛一瞬间国内外的IT巨头们都加入了公有云的竞争,将其推向了白日化。最后鹿死谁手还需要时间的验证。
在了解了那么多虚拟化的概念和基础知识之后,那么我们还有一个很大的疑问,为什么我们要用虚拟化,它有什么优点呢?我们将从以下几个方面进行考虑。
基础设施利用率——在没有虚拟化技术之前,公司需要为最高峰时刻而准备充足的服务器,然而平时服务器的利用率极其低下。根据IDC的报告,典型的X86服务器部署平均达到的利用率仅为总容量的10%-15%。而且在每台服务器上都只运行了一个应用程序,以免出现一个应用程序中的漏洞影响同一服务器上其他应用程序的可用性风险。拿京东举例:京东的店庆日是618(6月18日)也是一年中销售的最高峰。京东在每年618之前都会预估这一天的访问量、销量来评估需要采购多少服务器。但是这一天过后,另外364天的平均机器利用率只有10%左右。
物理基础设施成本——为了支持不断增长的业务。物理基础设施和运营成本都在稳步的攀升。大多数的计算基础设施都必须时刻保持运行状态,因此耗电量,制冷设备成本都不会随利用率的水平而变化,提升利用率成本不会提升。
IT管理成本——随着计算环境日益复杂,运维人员所需的专业教育和经验要求都在不断提高。而且此类人员的相关薪资成本也随之增加。如果还在使用手动的维护方式,将花费过多的时间和资源。
灾备——物理机的灾备极其复杂,且恢复时间较长。需要给物理机安装操作系统,相关软件,并恢复相应的App。整个过程至少需要20-30分钟。
为了解决上述问题,虚拟化问题孕育而生了。总而言之,虚拟化降低了用户的各种成本,且稳定,高效,灵活、可靠。