文章目录

  • 1、基本概念
  • 2、多核与多 CPU
  • 3、虚拟化
  • 4、VMware
  • 5、docker
  • 6、JVM

参考资料
http://virtual.51cto.com/art/201712/562070.htm

1、基本概念

1、计算机的核心任务:数据计算,数据传输,数据存储。

CPU

OS

Application

传输单元

总线

I/O

RPC,Socket,网络,File

计算单元

ALU:Arithmetic Logic Unit

进程/线程/协程

服务

存储单元

寄存器,高速缓存(L1,L2,L3)

内存,磁盘

数据库,文件系统,NFS

2、技术发展的推动力: 问题 => 解决方案

计算机技术在不断发展,CPU 提供了运行级别的机制之后,OS 才有了 内核模式用户模式。新技术的背后,一定潜伏着特定的问题。虚拟化技术,从硬件虚拟化,到系统虚拟化,容器,库,软件虚拟化,也同样是在各种各样的现实问题下产生的。

  • 资源分配:硬件资源,系统资源,分配的粒度,灵活性,效率;
  • 集中管理:集中存储,集中部署,集中运维

正如,内存管理,从物理内存,到逻辑内存,到虚拟内存,就是为了提高内存资源的利用率、复用率…

3、缓存与数据一致性问题:有缓存的地方,必然要考虑数据一致性的问题

双核心虚拟化 虚拟化的核心是_虚拟化


存储层之间的信息移动可以是显示的,也可以是隐式的,这取决于硬件设计和所控制的操作系统软件。例如高速缓存到 CPU 和寄存器之间的数据传递通常为硬件功能,无需操作系统的干预;而磁盘到内存之间的数据传递通常是由操作系统控制。

高速缓存一致性:在多处理器环境,每个 CPU 不但有自己的内部寄存器,还有自己的本地高速缓存,在多个 CPU 并发执行时,必须确保高速缓存中数据的一致性,这通常是硬件问题,在操作系统级别之下处理。

内存数据一致性:volatile,多线程情况;
磁盘数据一致性:

4、微内核:这里的内核是指操作系统 kernel,跟 cpu 没有关系。所谓的微内核就是将最核心的功能放在内核里,其他功能通过模块的形式挂载。

5、Saas 与 Paas

Saas:Software as service
Paas:Platform as service

6、Cluster 与 集群

7、MinGW 比 Cygwin 更精简

2、多核与多 CPU

1、cpu 的内部结构

双核心虚拟化 虚拟化的核心是_多核与多cpu_02


多核 CPU 的内部结构,如下:

双核心虚拟化 虚拟化的核心是_JVM_03

2、多核与多CPU

双核心虚拟化 虚拟化的核心是_双核心虚拟化_04


Core 与 CPU 之间的关系,有点像线程与进程之间的关系,其本质上是资源共享的范围不同。CPU 是一个独立的芯片,多 CPU 就是多个 CPU 芯片,这个芯片里面有高速缓存和寄存器组和 ALU,而一个 CPU 内部可以有多个 Core,这里的 Core 可以简单的理解为 ALU,它有自己的寄存器组和 1,2 级缓存,各个 Core 之间通过 CPU 芯片内部的总线进行交互,并且共享 3 级缓存。

3、虚拟化

1、什么是虚拟化

虚拟化是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个配置环境。由此,打破实体结构间不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。一般所指的虚拟化资源包括计算能力(云计算)和数据存储(云存储)。

2、为什么要进行虚拟化

双核心虚拟化 虚拟化的核心是_虚拟化_05

  • 降低运营成本:服务器虚拟化降低了IT基础设施的运营成本,运维人员可以从繁重的物理服务器、OS、中间件及兼容性的管理工作解放处理,减少人工干预频率,使管理更加强大、便捷。
  • 缩短上线周期: 虚拟化中对可以将需要批量预安装机器进行模板化,使用模板创建虚拟机,不仅可以缩短安装周期,也可以减少人工带来的配置失误。从而缩短操作系统安装部署周期,进而缩短业务的上线周期。
  • 提高可靠性:通过集群部署、双网卡、双电源以及OS盘的RAID策略都可以为我们提升基础架构的可靠性。通过对集群设置,我们可以实现虚拟机的冷热迁移,故障恢复甚至容错等,从而在架构上实现了高可靠。
  • 提高资源利用率:摆脱传统架构单台服务器单个应用,通过虚拟化技术,资源可以以更小的单位提供,可以实现一比多的形式,很大程度提高了物理资源的利用率,同时,可对虚拟机进行隔离,保证了安全性。
  • 动态资源调度(DRS):通过DRS可以实现机房节能环保,降低功耗,在资源闲置时自动迁移并关闭部分资源,资源紧张时可自动开启资源并负载均衡

3、虚拟化的分类

  • 主机虚拟化:完全虚拟化,半虚拟化,模拟
  • 用户空间虚拟化:容器,lxc,openvz,Solaris Containers,FreeBSD jails
  • 库虚拟化:WINE,Cygwin,mingw
  • 应用程序虚拟化: jvm,pvm

4、VMware

1、虚拟机原理

cpu 提供两种工作模式: 用户模式和内核模式;虚拟机软件可以运行在内核模式,因为它就是操作系统;虚拟机本身运行在用户模式。

虚拟机也有两种模式:虚拟用户模式和虚拟内核模式,这两种模式都运行在物理用户模式上。

双核心虚拟化 虚拟化的核心是_虚拟化_06

  1. 虚拟机之间能共享硬件;
  2. 虚拟机上能运行原来机器所具有的任何操作系统或软件包;

虚拟机软件在 OS 中加入一个虚拟化层 VMM(Virtual Machine Monitor,虚拟机监视器),虚拟化层可以对下层 (HostOS) 硬件资源 (物理CPU、内存、磁盘、网卡、显卡等) 进行封装、隔离,抽象为另一种形式的逻辑资源,再提供给上层 (GuestOS) 使用。所以你可以理解 VMM 其实就是联系 HostOS 和 GuestOS 的一个中间件,当然虚拟化可以将一份资源抽象为多份,也可以将多份资源抽象为一份。

纯软件虚拟化解决方案存在很多限制,客户操作系统很多情况下是通过 VMM来与硬件进行通信。

两大 CPU 巨头 Intel 和 AMD 都想方设法在虚拟化领域中占得先机。

  • 硬件虚拟化:虚拟化 CPU,虚拟化网卡,虚拟化存储,虚拟化内存
  • 硬件辅助虚拟化:对于虚拟机内核来讲,只要将 cpu 标志位设置为虚拟机状态,则可以直接在 CPU 上执行大部分的指令,而不需要虚拟化软件在中间转述。本质上是虚拟机内核知道自己运行在虚拟机上。

2、VMWare

VMware 作为一种应用程序,其本身可以运行在 Windows 或 Linux 系统之上,这里的操作系统称之为 主操作系统;VMware 将几个不同的 客户操作系统 作为独立的虚拟机来并行地运行。

双核心虚拟化 虚拟化的核心是_高速缓存_07

5、docker

Docker 是 Paas 提供商 dotCloud 开源的一个基于 LXC (Linux Container)的高级容器引擎,基于 go 语言并遵从 Apache 2.0 协议。

双核心虚拟化 虚拟化的核心是_高速缓存_08


双核心虚拟化 虚拟化的核心是_虚拟化_09

在docker的网站上提到了docker的典型场景:
Automating the packaging and deployment of applications(使应用的打包与部署自动化)
Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)
Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)

docker 与 devops

6、JVM

JVM 是一个抽象计算机的规范,它包括类加载器和执行与平台无关的字节码的解释器。JVM 可以在 主操作系统 如 Windows,Linux,Mac OS X 的上层软件中实现,或作为 web 浏览器的一部分;另一个选择是 JVM 在特别为 Java 程序设计的芯片硬件上实现,也就是说使用 JVM 指令集来设计专门的芯片。

JIT(just-in-time) 编译器,主要为了提高解释执行的效率,在第一次调用 Java 方法时,将该方法的字节码转换为主机的本地机器语言,以后调用该方法时,就不再需要重新解释了。

在原生支持 Java 字节码的芯片上,因为不需要解释或 just-in-time 编译,运行的更快。