zoukankan      html  css  js  c++  java
  • 虚拟化与云计算

     什么是云计算:把计算能力作为一种像水和电一样的公共事业提供给用户。

    云计算是一种通过因特网服务的方式提供动态可伸缩的虚拟化的资源的计算模式。

    一种按使用量付费的欧式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件和服务),这些资源能够被快速提供,只需要投入很少的管理工作,或与服务供应商进行很少的交互。

    三种服务模式:IaaS、PaaS、SaaS

    亚马逊的AWS——IaaS(底层Xen)

    Google的GAE——PaaS

    Google的GCE——IaaS(底层KVM)


    什么是虚拟化:指计算元件在虚拟的基础上而不是真实的基础上运行。是一个为了简化管理、优化资源的解决方案。

    虚拟化是构建云基础架构不可或缺的关键技术之一

    虚拟化在资源的有效利用、动态调配和高可用性方面有着巨大的优势。

    虚拟化对下管理真实的物理资源,对上提供虚拟的系统资源

    容器虚拟化(LXC),就是在同样的一份Linux操作系统之上,虚拟出多个同样的操作系统

    平台虚拟化,把整个X86平台包括处理器、内存和外设作为资源,在同一个X86平台上,可以虚拟出多个x86平台,每个虚拟机运行自己独自完整的操作系统。

    在X86平台虚拟化中,新引入的虚拟化层通常称为虚拟机监控器(Virtual Machine Monitor,VMM)也叫做Hypervisor。

    准虚拟化(半虚拟化),需要修改guest内核,保证客户机操作系统的特殊指令可以直接通知Host;全虚拟化,无需要修改guest

    KVM(Kernel Virtual Machine),作为一个Linux标准内核的模块,随着虚拟化功能的开启,加载到内核中。

    在KVM架构中,虚拟机实现为常规的Linux进程,由标准Linux调度程序进程调度。(所以Linux系统中,所有资源控制和调度算法对KVM虚拟机都有效,比如:可以通过Cgroup直接控制KVM虚拟机可以使用的物理服务器资源)。事实上,每个虚拟CPU显示为一个常规的Linux进程。(可以通过top 或ps查看到,每个稳定运行的虚拟机在宿主中的表现形式为n+1和线程(n=vcpu的个数,1是qemu的线程))

    !KVM本身不执行任何模拟,需要用户空间程序通过/dev/kvm接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的I/O,并将它的视频显示映射回宿主的显示屏。所以运行的虚拟机需要一个用户空间的模拟器,KVM选择了QEMU。

    KVM的功能特性(KVM虚拟机是一个Linux进程!带着这个认识,下边的特性就很好理解了):

    • 内存管理

    一个虚拟机的内存与任何其他的Linux进程的内存一样进行存储。可以以大页面(Hugepage)的形式进行交换以实现更高的性能,亦可以以磁盘文件的形式进行共享。

    EPT(扩展页表),基于硬件的内存虚拟化功能,以实现更低的CPU利用率和更高的吞吐量。

    KSM(Kernel Same-page Merging)内核同页合并。KVM扫描每个虚拟机的内存,如果虚拟机拥有相同的内存页面,KSM将这些页面合并到一个在虚拟机之间共享的页面,仅存储一个副本。如果一个客户机舱室更改这个共享页面,他将得到自己的专用副本。

    KVM内存虚拟化及其实现原理

    Linux内核中的内存去耦合

    如何使用KSM

    • 存储

    KVM能够使用Linux支持的任何存储来存储虚拟机镜像,包括具有IDE、SCSI和SATA的本地磁盘,网络附加存储(NAS),或者支持iSCSI和光纤通道的SAN。

    多路径I/O可以用于改进存储吞吐量和提供冗余。

    KVM支持全局文件系统(GFS2)等共享文件系统上的虚拟机镜像,以允许虚拟机镜像在多个宿主机之间共享或使用逻辑卷共享。

    磁盘镜像支持按需分配,仅在虚拟机需要是分配存储空间,而不是提前分配整个存储空间,提高存储利用率。(raw的Hole,qcow2的refcount)

    KVM的原生磁盘格式为Qcow2,支持快照,允许多级快照,压缩、加密。

    Qcow disk encrypted

    Qcow2 文件格式简述

    虚拟机硬盘格式的选择:qcow2、 raw

    • 设备驱动程序

    KVM支持混合虚拟化(即在全虚拟化的环境中,使用半虚拟化驱动程序),其中半虚拟化的驱动程序安装在客户机操作系统中,允许虚拟机使用优化的I/O接口而不是使用模拟的设备。从而为网络和块设备提供高性能的I/O。

    KVM准虚拟化的驱动程序使用IBM和RedHat联合Linux社区开发的Virtio标准,它是一个虚拟机管理程序独立的、构建设备驱动程序的接口,允许为多核虚拟机管理程序使用一组相同的设备驱动程序,能够实现更出色的虚拟机交互性。

    Virtio:针对 Linux 的 I/O 虚拟化框架

    • 性能和可伸缩性

    KVM也集成了Linux的性能和可伸缩性。KVM虚拟化性能在很多方面(如计算能力、网络带宽)已经可以达到飞虚拟化原生环境的95%以上的性能。KVM的扩展也非常良好,客户机和宿主机都可以支持非常多的CPU数量和非常大的内存。

    RedHat系统中的一个KVM虚拟机可以支持160个虚拟CPU和2T的内存,KVM宿主机支持4096个CPU核心和64T的内存。

    vCPUs的热插拔、在线快照、在线快照的合并与删除、存储的在线迁移。

  • 相关阅读:
    多线程程序设计学习(10)Future pattern
    Stack编程队列
    JS操作JSON总结
    java并发之TimeUnit理解
    java并发之DelayQueue实际运用示例
    netty的编解码器理解(转)
    spring中@Resource和@Autowired理解
    Netty中解码基于分隔符的协议和基于长度的协议
    构建基于Netty 的HTTP/HTTPS 应用程序
    对于spring中事务@Transactional注解的理解
  • 原文地址:https://www.cnblogs.com/fengrenzw/p/3377807.html
Copyright © 2011-2022 走看看