1. 分区
可在一台物理上运行多个操作系统。
可在虚拟机之间分配系统资源。
2. 隔离
可在硬件级别进行故障和安全隔离。
可利用高级资源控制功能保持特性。
3. 封装
可将虚拟机的完整状态保存到文件中。
移动和复制虚拟机就像移动和复制文件一样轻松。
4. 独立于硬件
可将任意虚拟机调配或迁移到任意物理服务器上。
虚拟化技术有那些
KVM、Xen、Vmware、Hyper-V、VirtualBox
笔者只在本地用过VMware workstations,在本地开启2个虚拟机后,笔记本的Cpu和内存使用率飙升。
虚拟化技术有哪些实现(基本都是网上了解的)
1. cpu虚拟化
简单说来,CPU的虚拟化技术就是单CPU串行模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
2. 网络虚拟化
没理解,不做解释…
3. 桌面虚拟化
桌面虚拟化是一种在本地数据中心或云端发布终端用户桌面和应用,并在端点设备上呈现的软件技术。使终端用户能够安全地访问企业资源,以及随时随地在任何设备上工作。精简的现代桌面虚拟化方法使客户的企业能够交付、保护和管理桌面和应用,同时控制成本。
4. 服务器虚拟化
服务器虚拟化是将服务器物理资源抽象成逻辑资源,让一台服务器变成几台甚至上百台相互隔离的虚拟服务器,不再受限于物理上的界限,而是让CPU、内存、磁盘、I/O等硬件变成可以动态管理的“资源池”,从而提高资源的利用率,简化系统管理,实现服务器整合,让IT对业务的变化更具适应力。
5. 存储虚拟化
所谓虚拟存储,就是把多个存储介质模块(如硬盘、RAID)通过一定的手段集中管理起来,所有的存储模块在一个存储池(Storage Pool)中得到统一管理,从主机和工作站的角度,看到就不是多个硬盘,而是一个分区或者卷,就好象是一个超大容量(如1T以上)的硬盘。这种可以将多种、多个存储设备统一管理起来,为使用者提供大容量、高数据传输性能的存储系统,就称之为虚拟存储。个人理解"LVM逻辑卷"就是一种实现方式。
6. 应用虚拟化
官方解释是这么说的,应用程序虚拟化是将应用程序与操作系统解耦合,为应用程序提供了一个虚拟的运行环境。在这个环境中,不仅包括应用程序的可执行文件,还包括它所需要的运行时环境。从本质上说,应用虚拟化是把应用对低层的系统和硬件的依赖抽象出来,可以解决版本不兼容的问题。
笔者balabala几句,和桌面虚拟化技术一样,应用程序不是存在本地电脑上,也是在后台的数据中心里,只是桌面虚拟化推送的是整个桌面,而应用程序虚拟化推送的是某个应用程序,用户只能看到应用程序。
容器vs虚拟机
容器和虚拟机都依赖于宿主机才能运行。宿主机可以是笔记本,是数据中心的物理服务器,也可是公有云的某个实例。
虚拟机
\1. 在虚拟机中,首先要开启物理机并启动Hypervisor引导程序,一旦Hypervisor启动,就会占用机器上的全部资源,如CPU、RAM、存储等。Hypervisor会将这些物理资源划分为虚拟资源,并且看起来与与真是物理资源完全一致。然后Hypervisor会将这些资源打包进一个叫做虚拟机(VM)的软件结构当中。
\2. 每个虚拟机都需要有自己的操作系统,因为操作系统本身都是有额外的开销。例如每个操作系统都需要消耗一点CPU、一点RAM、一点存储空间。相比于Docker虚拟机使用的额外开销更多。
\3. 每个虚拟机都有自身的操作系统,操作系统启动涉及到BIOS启动引导以及初始化过程,所以启动的时间相比于Docker来说更耗时。
\4. 同时每个虚机的操作系统为了提升安全性,有可能面临打补丁升级,也会面临被攻击的风险。
容器
\1. 而容器模型则有些不同,服务器启动后,所选择的操作系统会启动,操作系统会占用全部的硬件资源。在操作系统上层只需要安装Docker引擎,Docker就可以获取系统资源,接着将资源分割为安全的互相隔离的资源结构,称之为容器。
\2. 同一台宿主机上的所有容器共享操作系统,这意味着只有1个操作系统消耗CPU、RAM和存储空间。简而言之,就是只有一份操作系统损耗资源。
\3. 容器是运行在操作系统之上的,内部并不需要内核,也就不涉及BIOS以及初始化过程,更不涉及硬件的遍历和初始化了。唯一对容器启动时间有影响的就是容器内应用启动所花费的时间了。
可以看出,Hypervisor是硬件虚拟化,将硬件物理资源划分为虚拟资源;容器是操作系统虚拟化,将操作系统划分为虚拟资源。
这就是容器模型比虚拟机模型简洁并且高效的原因了。使用容器可以在更少的资源上运行更多的应用,启动更快,同时面对未知攻击的风险也更小。
看图理解
在网上看到一张物理机、虚拟机、容器的类比图,很有意思,这里借鉴一下。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新