1.虚拟化的历史和定义

Putting it bluntly, virtualization is deception.

(坦白说,虚拟化就是欺骗)

1.虚拟技术带来的好处与问题

随着21世纪,信息时代的步伐加快,一些基础设施遭到了虚拟机服务器、虚拟网络、虚拟存储、虚拟设备和其他的“虚拟技术”的逆袭,从而带来不少好处同时也面临了一些新的问题需要我们来思考。

1.1虚拟技术的不断深入带来的好处:

  • 降低成本,提高资产利用率;
  • 更稳定和更高的可用性;
  • 简化操作流程

1.2 可能带来的问题:

  • 所有的这些技术是否真的能带来这么多好处?
  • 什么是虚拟设备?它近乎是一个设备吗?会实现的更好吗?
  • 所有的虚拟化技术是否都一样?

2.数据中心的基本定义

2.1数据中心的定义

数据中心:它是一个特殊设施,他被设想用来为一个或多个组织安置、管理和支持那些被认为至关重要的计算机资源。

典型数据中心包含:

特殊建筑结构、电源备份结构、冷却系统、专用室(例如:入口和电信接入)、设备机柜、结构化布线、网络设备、存储系统、服务器、主机、应用软件、物理安全系统、监控中心,以及许多其他支持系统。所有的这些资源极其相互关系均为专门人员(本地或远程)管理。

如下图所示:描绘的是一个单一的数据中心机房情况,而现实中模块数据中心可能包括多个类似的跨越不通楼层或建筑的机房环境。

需要注意的是:数据中心目前已经成为各大公司以及技术人员的关注焦点,因为现在普遍公司实现利润增长,业务对IT的依赖越来越密不可分,对公司而言所有的数据中心组件协调工作,以保障以下商业应用具备足够的服务等级协议(Service-Level Agreement,SLA)

  • 商业智能(Business Intelligence,BI)例如:常常谈到的大数据技术
  • 客户关系管理(Customer Relationship Management,CRM)
  • 数据仓库(Data Warehouse,DW)
  • 电子商务
  • 企业资源规划(Enterprise Resource Planning,ERP)
  • 供应链管理(Supply Chain Management,SCM)
  • 其他诸多系统

2.2 数据中心的演进

2.2.1 DC1.0阶段(20世纪50年代~20世纪80年代)

可视为一份“艺术许可协议”,因为这些设施被简单的成为计算机室。通常有IBM设计体型庞大,基于庞大的软件体系机构,这些集中的系统需要更加严密的控制,才能获得较高的资源利用率。

2.2.2 DC2.0阶段(20世纪80年代到21世纪初)

主要由于“客户端—服务器”应用模型的普及,个人PC的兴起,应用环境开始从大型机向更小的“服务器”平台迁移,并且通过安装在PC机上的客户端应用程序来实现访问。

就性能预测和软件模块化而言,C/S模型被纳入到了应用协议层之中,每一层都部署了专用的服务器来执行特定的功能。典型的分层应用架构的例子:

三层模型:呈现(WEB页面)、应用(APP或业务逻辑)、数据库服务器(DB)

2.2.3 DC3.0 阶段(21世纪初到至今)

DC2.0的突出问题:
数据中心的空间和功耗不断趋于饱和,而扩容和部署新的设施昂贵。(说白了,也就是资源利用率低到尴尬,而且管理不便)

虚拟化技术项目的应用是来解决DC2.0时代产生的的问题

虚拟化项目的目标:

  • 统一的架构下环境隔离
  • 离散资源聚集形成共享池
  • 操作程序简单化,最好使用自动化技术

2.3 作业区以及数据中心架构

2.3.1 数据中心组织

 

 上图中是数据中心组织结构关系,但实际上他们不是相互独立的,而是相互依存的关系。

例如:

  • 每机架的服务器数量取决于电源动力分配设计;
  • 网络设计必须依据每个机架安装多少服务器以及提供多少个接口;
  • 数据中心网络设备的物理位置会影响结构布线设计;
  • 线缆可以布在活动地板下(EOR布线);
  • 活动地板会对冷却系统产生直接影响,而冷却系统通常是消耗电力最高的;

注意:在数据中心“万物互联”的环境中,一个团队的单独决定可能会损害整个设施。因为在整合数据中心的演变过程中,强烈推荐站到端到端的角度去考虑,也就是从整体出发,弄清之间的关联性。

2.3.2 不同技术的生命周期

数据中心架构是这样一套指令,由它驱动着所有数据中心的设计。

如果一个数据中心是一座城市的话,数据中心的架构师就相当于城市规划师,按照附近的街道容量(网络)以及公共停车位的数量(存储)来统筹部署建筑(服务器)。同样的专业人员还必须处理“社区”之间的差异性,就像大型机和低端机服务器一样。

  • 建筑:10年~15年
  • 布线:7~10年
  • 网络:3~5年
  • 存储:1~2年
  • 服务器:6~18个月

 3.数据中心虚拟化的起源

3.1 虚拟内存

3.1.1 存储的定义
存储:在若干时间间隔内来保留计算所使用数据的能力。

计算机至少部署两个级别的存储:

  • 主存储器(或主内存):可以直接由CPU进行访问,通常是易失性的。(掉电数据容易丢失)
  • 二级存储器(或辅助内存):它要求一个额外的系统来传输数据到主存储器中,通过使非易失性的。(掉电数据不丢失容易保存)

注意:根据定义,二级存储器会空间会更大,更加便宜,但是比主存储器慢。

3.1.2 虚内存出现的背景

在20世纪50年代,主内存通过磁核直接部署,而辅助内存则是基于磁鼓旋转方式实现。那时的程序员在编写代码时,需要努力使它不会超过主内存大小。有时候,他们不得不使用一个特定的策略将数据转移到辅助内存中,从而释放主内存空间以满足程序中更多的数据的处理。

3.1.3 虚拟内存的产生

1959年,曼彻斯特大学的阿特拉斯团队发明了一种自动机制,解决了程序员对上述存储分配的烦恼。

虚拟内存定义:使用辅助内存作为主内存的扩展。

注意:使用虚拟内存,计算机的CPU可以直接访问内存的一个地址,无需知道它位于主内存或者辅助内存。

 

 虚拟化操作过程:

  • (1)将虚拟内存地址转化为主内存或辅助内存的位置;
  • (2)在这两个存储设备之间转换数据;
  • (3)选择哪些数据将被合理放置在更快的主内存中;

总结:采用这种做法,一个仿真的内存呈现给了CPU,这样带来了内存扩展的优势并且增强了程序代码的复用性。

应用:虚拟内存是最新计算机操作系统(如:Windows和Linux)的一个重要组成部分。常用的虚拟内存方法被称为分页,这项技术中,被称为页面的同类数据块就是从辅助内存中重新获得的,实现了非连续数据存储。虚拟内存原理同样适用于“高速缓冲存储器”的创建。

3.2 大型机虚拟化

3.2.1 大型机虚拟化

1972年,与新一代的处理器(System/370)一起,IBM官方同时发布了大型机虚拟化的解决方案。

上图所示,VM/370操作系统包含一个叫做控制程序(Control Program, CP)的软件组件,也可称为超级监督者(hypervisor)。

该程序作用:虚拟机创建、资源共享、设备管理、虚拟存储管理和其他的操作系统任务。每个大型机用户可以通过与会话监控系统(Conversational Monitor System,CMS)交互,来实现自己物理处理器的仿真。

影响:对于IBM而言,当时每个新处理器发布是,客户总会面临操作系统迁移问题,而虚拟机为此迁移提供了一个解决方案。笔记使用这种虚拟化,一台独立的大型机可以同时安装不通版本的操作系统(包括另一个CP实例)

3.2.2 分时共享机制

技术背景:将昂贵的大型机资源分配给不同用户。

技术原理:通过将挂起当前用户的作业,并在内存中保存其用户状态,然后加载另一个用户状态,为每个用户提供一个平等的大型机资源的时间片。

技术解析:分时共享机制可以认为是一个“陈旧的”虚拟化技术,因为每个用户均会错误的认为它完全控制另外的计算机。然而与虚拟机截然不同的是,所有用户共享相同的操作系统,不存在不平等的、不适当的资源分配情况,也不会处于相同的故障域之中。

注意:这两个概念对于当前计算机系统界非常重要。如今,分时共享已经是多任务操作系统的基石,虚拟机则是数据中心3.0阶段的旗舰技术。

3.3 热备份路由协议

3.3.1 技术背景

TCP/IP网络架构中,一台主机通常使用一个路由器接口作为默认网关来将数据包转发到另外一个IP子网。尽管在一个局域网(Local-Area Network,LAN)中可以部署多台路由器,然而绝大多数的TCP/IP协议栈只允许为每个主机定义一个默认网关。

3.3.2 暴露的问题

在TCP/IP体系下存在与生俱来的一个单点故障,当含有主机所定义网关IP地址的那台路由器产生故障时,到不同网段间的流量将会中断。

3.3.3 解决的办法

思科公司在1998年创建一个称谓热备份路由器协议(Hot Standby Router Protocol,HSRP)解决方案。与之类似的有VRRP(公有标准)、GLBP(Cisco私有)。

  • 两台路由器发送HSRP Hello消息来协商参数状态,如:所配置虚拟IP地址、HSRP组以及优先级;
  • 通过这些报文,在HSRP热备份组中选举主备路由器,主路由器为本地主机提供数据转发,备份路由器提供备份,模拟的虚拟IP地址充当主机的网关接口(和派生的虚拟MAC地址),具备更高优先级的接口总是当选为活动接口;
  • 如果活动接口故障,其他HSRP路由器会感知到,于是备份路由器就会模拟相同的虚拟IP。如果WAN口失效,路由器也可以减低活动接口的优先级。(这个就是HSRP与Track或者BFD联动)

 

 

3. 4 定义虚拟化

通过虚拟内存、大型机虚拟化以及HSRP,可以看到以下相似之处。

  • 仿真:在所有例子中,均各自仿真了先前存在的资源(主内存,大型机以及默认网关的IP地址)
  • 透明:毫无疑问,IT资源的消费者(CPU,大型机用户,TCP/IP主机)均无法区分是仿真资源还是物理实体
  • 好处:与IT物理资源(内存扩展、资源优化和高可用性)相比,这些例子均有各自的优势(好处)。

虚拟化定义:虚拟化是IT资源的透明仿真,为其消费者带来物理形态中无法获得的好处。

虚拟机可以提供两种不同风格的仿真:

  • 模拟:假装拥有没写不存在的特征行为。
  • 伪装:利用别人的知识,掩饰其真实属性的行为。

注意:从单一地址的变化到一个全新的逻辑结构的建造,透明在这些技术中有很大差异。同样,受益的范围也是非常多样化的,有时候甚至包括原先并没有计划的附带优势。

4. 虚拟化技术的分类

借用生物学分类法:域(Domain)、界(Kingdom)、门(Phylum)、纲(Class)、目(Order)、科(Family)、属(Genus)、种(Species)。

每个虚拟化“物种”将会按照以下特征进行分类:

  • 仿真
  • 类型和子类型
  • 可扩展性
  • 技术领域和子领域
  • 优势

仿真的含义:通过仿真,IT资源将通过虚拟化而生成;优势:虚拟化带来的好处。

4.1 虚拟化的分类

尽管与生物圈相比虚拟化技术在种类变化上远远不及,但我们的分类系统也可以从层次化分类中受益,在虚拟化技术中,第一层将被简单的称为分类和将涉及的物理组件数量和逻辑组件数量之间的比例。

4.1.1 池化虚拟化技术

在池化虚拟技术中,几个物理组件会同事工作从而建立一个单独的逻辑实体,这些逻辑实体与原来的实体分享其特征。

上图中,动物世界中,类比于一群大雁的“V”字队形,它们符合空气动力学“V”型,利用这种队列增加了效率和单个个体的范围(巧合的是,字母“V”也存在与大多的虚拟化技术的命名之中)

池化技术分类:

  • 同构:资源池中的所有组件都是由相似的组件所组成。
  • 异构:资源池中不同的物理组件所组成,并可以部署某些层次结构。(这种情况下,虚拟实体必须具有相似性,至少物理资源池中要有一个类似的硬件)

例子:虚拟内存可归为采用异构子类型所实现的池化技术(因为虚拟内存是由2个不通存储设备所组成,他们是主内存和辅助内存)

4.1.2 抽象虚拟化技术

在抽象虚拟化技术中,为了创建一个逻辑实体,仿真不会增加或减少物理组件的数量。一个物理资源创建一个单独的虚拟组件来提供不同的特征,以实现设备或者用户交互。

上图中的Caligomennon(猫头鹰蝶)所使用的模仿为例:说明了这些技术,而这些技术也被用于防御其猎食者的一种机制。

抽象技术分类:

  • 地址重映射:当只改变地址或标识符时,逻辑设备共享物理实体的属性。
  • 结构化:是指一个不共享设备格式的虚拟组件部署其虚拟化。例如:两个路由器可以通过一个隧道,创建一条虚拟背靠背连接。

例子:按照这种分类法,HSRP使用了地址重映射子类的方式,部署一个抽象的虚拟化。

注意:尽管多个路由器接口可以作为同一HSRP组的一部分,但常见的情况是,一个组内只能有一个活动的IP。然而以这种分类法,可认为GLBP(多个网关之间部署负载平衡)是一种池化虚拟技术。

4.1.3 分区虚拟化技术

分区虚拟化特点是采用独立的逻辑分区来模拟物理资源的特点。尽管有点粗略,图中的蜗虫从原始标本中创造了完美的生命副本,其演示了动物界中的镜像行为。

分区技术分类:

  • 资源分配型:可以为每一个虚拟分区预留物理资源的资产。
  • 没有资源分配型:对与每个创建的分区,没有资源控制部署。

例子:大型机的虚拟化,IBM虚拟机毫无疑问属于分区虚拟化技术中的资源分配型。

4.2 虚拟化的扩展性

与虚拟化技术相关的一大风险是:仿真可以被盲目接受。

为了避免灾难性的情况,强烈建议读者清楚地了解每个虚拟化技术的可扩展性。如:

  • 可以池化在一起的设备的最大数量;
  • 每个设备的地址重映射的最大数量;
  • 分区的最大数量;

4.3 技术领域

在过去的30年里,数据中心的基础设施解决方案附属于3个基本的领域:服务器、存储和网络。

“定位”一个虚拟化技术到这3个领域中的其一,会进一步指定可能与它们有直接交互的运营团队。

将分类系统更进一步,将每个技术领域内进行分区定义。子分区会准确的指明在单一技术领域最常用的组件中“哪里”正在被执行虚拟化。

例如下图所示:

 

(1)存储虚拟化可以在一下位置被执行:

  • 存储设备:代表数据存放的位置;
  • 主机:代表了能有效检索和保存数据的计算机系统;
  • 互连:包括主机和存储设备之间的网络媒介。

(2)服务器虚拟化:

  • 硬件:不依赖于所安装的任何操作系统提供虚拟化;
  • 操作系统:软件层直接控制服务器硬件,并因此提供虚拟化特性
  • 应用:虚拟化是通过运行在服务器操作系统之上的一个标准应用来执行。

(3)网络虚拟化:

网络虚拟化技术也可分布于网络平面之中,它代表着网络设备中的不同功能组件。

  • 数据平面:处理穿越两个或者两个以上网络接口的流量(穿越数据包)。负责大部分流入这些设备的数据。
  • 控制平面:处理直接送往网络设备本身和起源于其他设备的流量。例如:来自路由协议的控制数据包,控制数据平面的行为。
  • 管理平面:运行组件用于设备管理,如命令行界面(command-line interface,CLI)、简单网络管理协议(Simple Network Management Protocol,SNMP)。这个平面通常会与第三方软件交互,可以修改控制平面和数据平面的行为。

 4.4 分类的例子

下面为用它来对“数据中心虚拟化起源”中所描述的技术进行分组

中文翻译:

显然,这个分类系统并不是对虚拟化技术进行分类的唯一途径。其目的在于对于一个技术分析之前,提供一个快速可视化呈现方式。

转载于:https://www.cnblogs.com/fulong20181055/p/10130681.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要使用tushare库来获取中国平安的历史数据: ``` import tushare as ts # 设置tushare的token ts.set_token('你的token') # 初始化pro接口 pro = ts.pro_api() # 获取中国平安的历史数据 df = pro.daily(ts_code='601318.SH', start_date='20210101', end_date='20210630') ``` 这里我们获取了2021年1月1日至2021年6月30日的中国平安股票历史数据,间隔为日。接下来,我们可以计算股票价格的随机过程表达式。 一般来说,股票的价格可以使用几何布朗运动模型来描述,其随机过程表达式如下: $$dS_t = \mu S_t dt + \sigma S_t dW_t$$ 其中,$S_t$表示在时间$t$时刻的股票价格,$\mu$表示股票价格的平均增长率,$\sigma$表示股票价格的波动率,$W_t$表示布朗运动。 接下来,我们可以计算出股票价格的平均增长率和波动率: ``` import numpy as np # 计算收益率 df['return'] = np.log(df['close']) - np.log(df['close'].shift(1)) # 计算平均增长率 mu = np.mean(df['return']) # 计算波动率 sigma = np.std(df['return']) ``` 这里我们计算了收益率,并根据收益率计算了平均增长率和波动率。 接下来,我们可以使用数值算法来定价欧式看涨期权和美式看涨期权。这里我们使用了蒙特卡罗方法和二叉树方法来分别计算欧式看涨期权和美式看涨期权的价格。 蒙特卡罗方法的代码如下: ``` # 蒙特卡罗方法定价欧式看涨期权 def monte_carlo_european_call(S0, K, r, sigma, T, N): dt = T / N S = np.zeros((N + 1,)) S[0] = S0 for i in range(N): e = np.random.normal() S[i + 1] = S[i] * np.exp((r - 0.5 * sigma ** 2) * dt + sigma * np.sqrt(dt) * e) payoff = np.maximum(S[-1] - K, 0) price = np.exp(-r * T) * np.mean(payoff) return price # 定义期权参数 S0 = df.iloc[-1]['close'] # 标的资产当前价格 K = 80 # 行权价格 r = 0.05 # 无风险利率 sigma = 0.3 # 波动率 T = 1 # 到期时间 N = 10000 # 模拟次数 # 计算欧式看涨期权价格 european_call_price = monte_carlo_european_call(S0, K, r, sigma, T, N) print('欧式看涨期权价格:', european_call_price) ``` 二叉树方法的代码如下: ``` # 二叉树方法定价美式看涨期权 def binomial_tree_american_call(S0, K, r, sigma, T, N): dt = T / N u = np.exp(sigma * np.sqrt(dt)) d = 1 / u p = (np.exp(r * dt) - d) / (u - d) S = np.zeros((N + 1, N + 1)) V = np.zeros((N + 1, N + 1)) for i in range(N + 1): for j in range(i + 1): S[i, j] = S0 * u ** j * d ** (i - j) V[:, N] = np.maximum(S[:, N] - K, 0) for i in range(N - 1, -1, -1): for j in range(i + 1): V[j, i] = np.maximum(S[j, i] - K, np.exp(-r * dt) * (p * V[j, i + 1] + (1 - p) * V[j + 1, i + 1])) price = V[0, 0] return price # 定义期权参数 S0 = df.iloc[-1]['close'] # 标的资产当前价格 K = 80 # 行权价格 r = 0.05 # 无风险利率 sigma = 0.3 # 波动率 T = 1 # 到期时间 N = 100 # 步数 # 计算美式看涨期权价格 american_call_price = binomial_tree_american_call(S0, K, r, sigma, T, N) print('美式看涨期权价格:', american_call_price) ``` 这里我们分别计算了欧式看涨期权和美式看涨期权的价格,采用了蒙特卡罗方法和二叉树方法。其中,二叉树方法只能用于定价美式期权,而蒙特卡罗方法既可以用于定价欧式期权,也可以用于定价美式期权。 完整代码如下: ``` import tushare as ts import numpy as np # 设置tushare的token ts.set_token('你的token') # 初始化pro接口 pro = ts.pro_api() # 获取中国平安的历史数据 df = pro.daily(ts_code='601318.SH', start_date='20210101', end_date='20210630') # 计算收益率 df['return'] = np.log(df['close']) - np.log(df['close'].shift(1)) # 计算平均增长率 mu = np.mean(df['return']) # 计算波动率 sigma = np.std(df['return']) # 蒙特卡罗方法定价欧式看涨期权 def monte_carlo_european_call(S0, K, r, sigma, T, N): dt = T / N S = np.zeros((N + 1,)) S[0] = S0 for i in range(N): e = np.random.normal() S[i + 1] = S[i] * np.exp((r - 0.5 * sigma ** 2) * dt + sigma * np.sqrt(dt) * e) payoff = np.maximum(S[-1] - K, 0) price = np.exp(-r * T) * np.mean(payoff) return price # 二叉树方法定价美式看涨期权 def binomial_tree_american_call(S0, K, r, sigma, T, N): dt = T / N u = np.exp(sigma * np.sqrt(dt)) d = 1 / u p = (np.exp(r * dt) - d) / (u - d) S = np.zeros((N + 1, N + 1)) V = np.zeros((N + 1, N + 1)) for i in range(N + 1): for j in range(i + 1): S[i, j] = S0 * u ** j * d ** (i - j) V[:, N] = np.maximum(S[:, N] - K, 0) for i in range(N - 1, -1, -1): for j in range(i + 1): V[j, i] = np.maximum(S[j, i] - K, np.exp(-r * dt) * (p * V[j, i + 1] + (1 - p) * V[j + 1, i + 1])) price = V[0, 0] return price # 定义期权参数 S0 = df.iloc[-1]['close'] # 标的资产当前价格 K = 80 # 行权价格 r = 0.05 # 无风险利率 sigma = 0.3 # 波动率 T = 1 # 到期时间 N = 10000 # 模拟次数 # 计算欧式看涨期权价格 european_call_price = monte_carlo_european_call(S0, K, r, sigma, T, N) print('欧式看涨期权价格:', european_call_price) # 定义期权参数 S0 = df.iloc[-1]['close'] # 标的资产当前价格 K = 80 # 行权价格 r = 0.05 # 无风险利率 sigma = 0.3 # 波动率 T = 1 # 到期时间 N = 100 # 步数 # 计算美式看涨期权价格 american_call_price = binomial_tree_american_call(S0, K, r, sigma, T, N) print('美式看涨期权价格:', american_call_price) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值