【VM】虚拟化和 hypervisor

【VM】虚拟化和 hypervisor,第1张

虚拟化就是通过某种方式隐藏底层物理硬件的过程,从而让多个 *** 作系统可以透明地使用和共享它。
Hypervisor(虚拟机管理系统)是一种运行在物理服务器和 *** 作系统之间的中间软件层,可允许多个 *** 作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元” *** 作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor)。

Hypervisor是所有虚拟化技术的核心,非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。

当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户 *** 作系统。

Hypervisor 之于 *** 作系统类似于 *** 作系统之于进程,它们为执行提供独立的虚拟硬件平台,而虚拟硬件平台反过来又提供对底层机器的虚拟的完整访问。

在典型的分层架构中,提供平台虚拟化的层称为 hypervisor (有时称为 虚拟机管理程序 或 VMM)。

Guest *** 作系统称为 虚拟机 (VM),因为对这些 VM 而言,硬件是专门针对它们虚拟化的。

平台虚拟化的好处很多。美国环境保护署(EPA)报告的一组有趣的统计数据就证明了其好处:EPA 研究服务器和数据中心的能源效率时发现,实际上服务器只有 5% 的时间是在工作的,在其他时间,服务器都处于 “休眠” 状态。

在单个服务器上的虚拟化平台能够改善服务器的利用率,但是减少服务器的数量才是它的最大功用。减少服务器数量意味着减少不动资产、能耗、冷却和管理成本。使用更少的硬件还能提高可靠性。总之,平台虚拟化不仅带来技术优势,还能创造成本和能源优势。

在图 1 中可以看到,hypervisor 是提供底层机器虚拟化的软件层(在某些情况下需要处理器支持), *** 作系统将对机器的底层资源的访问虚拟化为进程。hypervisor 也做一样的事情,但其对象不是进程,而是整个Guest *** 作系统。

hypervisor 分类

hypervisor 可以划分为两大类:

首先是类型 1,这种 hypervisor 是直接运行在物理硬件之上的。

其次是类型 2,这种 hypervisor 运行在另一个 *** 作系统(运行在物理硬件之上)中。

类型 1 hypervisor 的一个例子是基于内核的虚拟机(KVM —— 它本身是一个基于 *** 作系统的 hypervisor)。

类型 2 hypervisor 包括 QEMU 和 WINE。

hypervisor 的构成

hypervisor(不管是什么类型)仅是一个从其来宾 *** 作系统抽象机器硬件的分层应用程序。通过这种方式,每个来宾 *** 作系统看到的仅是一个 VM 而不是真实的硬件机器。

我们大致看一下 hypervisor 的内部组成,以及它在 VM(来宾 *** 作系统)上的表示。

在较高级别上,hypervisor 需要少量设施启动来宾 *** 作系统:一个需要驱动的内核映像、一个配置(比如 IP 地址和所需的内存量)、一个磁盘盒一个网络设备。

磁盘和网络设备通常映射到机器的物理磁盘和网络设备(如图 2 所示)。

最后,需要使用一组来宾 *** 作系统工具启动和管理来宾 *** 作系统。

参考:

>常用数据库
1 IBM 的DB2
作为关系数据库领域的开拓者和领航人,IBM在1997年完成了System R系统的原型,1980年开始提供集成的数据库服务器—— System/38,随后是SQL/DSforVSE和VM,其初始版本与SystemR研究原型密切相关。DB2 forMVSV1 在1983年推出。该版本的目标是提供这一新方案所承诺的简单性,数据不相关性和用户生产率。1988年DB2 for MVS 提供了强大的在线事务处理(OLTP)支持,1989 年和1993 年分别以远程工作单元和分布式工作单元实现了分布式数据库支持。最近推出的DB2 Universal Database 61则是通用数据库的典范,是第一个具备网上功能的多媒体关系数据库管理系统,支持包括Linux在内的一系列平台。
2 Oracle
Oracle 前身叫SDL,由Larry Ellison 和另两个编程人员在1977创办,他们开发了自己的拳头产品,在市场上大量销售,1979 年,Oracle公司引入了第一个商用SQL 关系数据库管理系统。Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的 *** 作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。
3 Informix
Informix在1980年成立,目的是为Unix等开放 *** 作系统提供专业的关系型数据库产品。公司的名称Informix便是取自Information 和Unix的结合。Informix第一个真正支持SQL语言的关系数据库产品是Informix SE(StandardEngine)。InformixSE是在当时的微机Unix环境下主要的数据库产品。它也是第一个被移植到Linux上的商业数据库产品。
4 Sybase
Sybase公司成立于1984年,公司名称“Sybase”取自“system”和 “database” 相结合的含义。Sybase公司的创始人之一Bob Epstein 是Ingres 大学版(与System/R同时期的关系数据库模型产品)的主要设计人员。公司的第一个关系数据库产品是1987年5月推出的Sybase SQLServer10。Sybase首先提出Client/Server 数据库体系结构的思想,并率先在Sybase SQLServer 中实现。
5 SQL Server
1987 年,微软和 IBM合作开发完成OS/2,IBM 在其销售的OS/2 ExtendedEdition 系统中绑定了OS/2Database Manager,而微软产品线中尚缺少数据库产品。为此,微软将目光投向Sybase,同Sybase 签订了合作协议,使用Sybase的技术开发基于OS/2平台的关系型数据库。1989年,微软发布了SQL Server 10 版。
6 PostgreSQL
PostgreSQL 是一种特性非常齐全的自由软件的对象——关系性数据库管理系统(ORDBMS),它的很多特性是当今许多商业数据库的前身。PostgreSQL最早开始于BSD的Ingres项目。PostgreSQL 的特性覆盖了SQL-2/SQL-92和SQL-3。首先,它包括了可以说是目前世界上最丰富的数据类型的支持;其次,目前PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统
7mySQL
mySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。MySQL的官方网站的网址是: >

我更愿意把StackOverflow看作是能够运行于大规模数据下,但本身并不算大规模的(runningwithscalebutnotatscale)。意思是我们的网站非常有效率,但至少目前为止,我们的规模还不够“大”。让我们通过一些数字来介绍StackOverflow当前是一个怎样的规模吧。以下是一些核心的数字,来自于不久前在一整天(24小时)内的统计,准确说是2013年11月12日。这是一个典型的工作日,并且只统计了我们活动的数据中心,也就是我们自己的服务器。那些对CDN节点的请求和流量被排除在外,因为它们并不直接访问我们的网络。

负载均衡器接受了148,084,833次程序处理上

(我觉得应该发表一篇文章介绍我们如何快速采集这些数据,以及为什么值得耗费精力去获取它们)

注意以上数字包括了整个StackExchange网络,但那并不是我们全部的。除此之外,这些数字也仅仅来自于我们为了检测性能而记录的sticSearch服务器

2个负载均衡器(HAProxy)

2个交换机(Nexus5596和FabricExtenders)

2个Cisco5525-XASA(可看作是防火墙)

2个Cisco3945Router

我们不仅仅运行网站,旁边架子上还有一些运行着虚拟机的服务器和其他设备,它们并不直接服务于网站,而是进行部署、域名控制、监控、 *** 作数据库等其他工作。上面列表中的两个数据库服务器之前一直都是用作备份,直到最近才作为只读的负载(主要用于StackExchangeAPI),于是我们可以不需要太多考虑便继续扩大规模了。Web服务器有两个分别用于开发和存储元数据,运行负载非常低。

核心设备

如果除去那些多余的设备,以下是StackExchange运行需要的(保持目前的性能水平):

2个MSSQL服务器(StackOverflow在一台,其他的在另一台,实际上只需一台机器运行还能有富余)

2个Web服务器(或许3个吧,不过我有信心2个足矣)

1个Redis服务器

1个标签引擎服务器

1个ElasticSearch服务器

1个负载均衡器

1个交换机

1个ASA

1个路由器

(我们真该找个机会尝试这个配置,关闭部分设备,看看极限在哪)

现在还有一些虚拟机运行在后台,执行一些辅助功能,比如域名控制等等。但那都是些相当低负载的任务,我们就不做讨论了,这里把重心放在StackOverflow本身,看看它是怎样全速加载出页面的。如果你希望更精确全面,可以增加一个VMware虚拟机进来,用于执行所有的辅助工作。这样看来并不需要很多机器,但是这些机器的规格通常在云上难以实现,除非你有足够多的钱。以下是这些“增强型”服务器简要的配置介绍:

数据库服务器有384GB内存和18TB的SSD硬盘

Redis服务器有96GB内存

ElasticSearch服务器有196GB内存

标签引擎服务器有着我们能买得起的最快的处理器

交换机每个端口有10Gb的带宽

Web服务器不是很特别,有32GB内存、2个4核处理器和300GB的SSD硬盘

有些服务器有2个10Gb带宽的接口(比如数据库),其他有4个1Gb带宽的

20Gb的带宽太多余了你还真特么说对了,活动的数据库服务器平均只利用了20Gb通道中的100-200Mb。然而,像备份、重建等等 *** 作,根据当前内存和SSD硬盘的情况,可以使带宽完全饱和,所以说这样设计还是有意义的。

存储设备

我们目前有大约2TB的数据库存储(第一个集群有18块SSD硬盘——总共163TB,使用106TB;第二个集群由4块SSD硬盘组成——总共145TB,使用889GB),这是我们在云服务器上需要的(嗯哼,又要吐槽价格了吧),请记住这全部都是SSD硬盘。归功于存储器良好的表现,我们数据库的平均写入时间是0毫秒,甚至超出我们能度量的精度了。算上内存中的数据以及两级缓存,StackOverflow中实际的数据库读写比例是40:60。你没看错,60%是写 *** 作(点此了解读写比)。此外,每个Web服务器都有两块320GBSSD硬盘组成的RAID1。ElasticSearch在每个区块大约需要300GB的容量,由于我们会非常频繁的写入或重建索引,SSD硬盘在这里是更好的选择。

值得注意的是我们拥有一个SAN(存储区域网络)连接到核心网络,那就是EqualLogicPS6110X,它有24个可热交换的10KSAS磁盘和2个10Gb的控制器。这个设备仅仅被VM服务器用作共享储存空间以保证虚拟机高度的可用性,但并不实际支撑网站的运行。换句话说,如果SAN挂掉了,在一段时间内网站甚至无法察觉(只有虚拟机中的域名控制器能感知到)。

整合到一起

这所有的设备在一起是为了什么性能。我们需要很高的性能,这是一个对我们来说很重要的特性。所有站点的首页都是问题页面,我们内部把它亲切地称作Question/Show(路由的名字)。在11月12日,这个页面平均渲染时间是28毫秒,而我们的要求是至多50ms。为了使用户获得更好的体验,我们尽一切可能缩短页面加载的时间,哪怕只有一毫秒。在和性能有关的问题上,我们所有的开发人员都是“锱铢必较”的,这也有助于我们的网站保持快速响应。以下是一些StackOverflow上热门页面的平均渲染时间,数据还是来自于前面统计的那24小时:

Question/Show:28ms(2970万次点击)

UserProfiles:39ms(170万次点击)

QuestionList:78ms(110万次点击)

Homepage:65ms(100万次点击)(这对我们来说已经很慢了,KevinMontrose正在着手修复这个问题)

凭借对每一次请求的时间线的记录,我们能够准确观察到页面加载的过程。我们需要这样的数据,否则难道靠脑补来做决定吗有数据在手,我们就可以这样监控性能:

如果你对某个特定页面的数据感兴趣,我也很乐意发布出来。但这里我重点关注渲染时间,因为它表示我们的服务器需要多久来生成一个网页。网络传输速度是一个完全不同的话题了(尽管不得不承认它也有很大的关系),不过将来我会讲到的。

增长空间

非常值得一提的是我们这些服务器运行时的使用率都非常低。比如Web服务器的CPU平均使用率为5-15%,内存只使用了155GB,网络流量只有20-40Mb/s;而数据库服务器CPU平均使用率为5-10%,使用了365GB内存,以及100-200Mb/s的网络。这使我们能做到几件重要的事情:在网站规模增大时不至于需要马上升级设备;当出现问题时(错误的查询、代码以及攻击等等,无论是什么样的问题),我们能保持网站始终不挂;在必要的时候降低功耗。这里有个我们Web层的监控项目:

现在我们了解了StackOverflow运行在怎样的硬件上,下次可以讨论一下为何我们不使用云。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13416285.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-01
下一篇 2023-08-01

发表评论

登录后才能评论

评论列表(0条)

保存