- 浏览: 503888 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (329)
- [发布至博客园首页] (12)
- [随笔分类][01] .Net X (59)
- [随笔分类][20] Architecture (16)
- [随笔分类][21] Developer Logs (13)
- [网站分类]Windows 7 (1)
- [随笔分类][13] Oracle & .Net (7)
- [随笔分类][16] Love in China (14)
- [随笔分类][15] Development Tools (20)
- [随笔分类][18] Windows Phone (12)
- [随笔分类][12] Design & Pattern (17)
- [网站分类].NET新手区 (22)
- [网站分类]首页候选区 (2)
- [随笔分类][08] Windows (Server) (13)
- [随笔分类][02] CSLA.Net (3)
- [随笔分类][10] jQuery & javaScript (10)
- [随笔分类][11] SQL Server (4)
- [随笔分类][22] Enterprise Logs (3)
- [随笔分类][03] News (9)
- [随笔分类][19] Quality Assurance (2)
- [随笔分类][05] Silverlight (20)
- [随笔分类][14] Google Earth & .Net (6)
- [网站分类]非技术区 (9)
- [随笔分类][07] WWF (2)
- [随笔分类][04] SharePoint (1)
- [随笔分类][20] Analysis & Design (36)
- [随笔分类][06] WCF (5)
- [随笔分类][12] Architecture (1)
- [随笔分类][09] WPF (0)
- [随笔分类][17] VStudio & Expression (5)
最新评论
-
zhangyy130:
你好,我关于第二段的那个表视图、模型与图这三者的关系我没有看明 ...
UML模型的组成 -
guji528:
谢谢分享!
Enterprise Architect 基础应用 -
studentsky:
好文章,图文并茂!
WCF 第一个用 Visual Studio 2010 创建的WCF服务 -
chen975311486:
用哪个工具画的????
UML中对关系的描述 (二) -
frankies:
继续学习中。。
UML 交互概述图
作者 Matthew Porter 译者 孙涛 发布于 2009年8月3日 上午2时1分
虚拟化受欢迎之处并不仅仅因为它能将过剩的容量立即转化为新的虚拟服务器。它真正价值体现在一些更高层的优势上,例如高可靠性、灾难恢复和应用的快速安装。目前,系统管理程序 (hypervisor) 已经成了一件商品,几乎每个虚拟化提供商都已经提供了它的实现。其中,Xen系统管理程序的开发通过免费和开源的社区形式进行。ESXi是VMware企业级系统管理程序中占用系统资源最少的,从这个月开始它也可以免费下载了。不过,这两个产品系列的最复杂功能特性还是需要通过商业渠道购买。
这篇文章将探讨虚拟化的部分高层优势和它们在实际中的应用。更重要的是,我们会细致讨论Contegix是如何实现虚拟化和利用其解决较复杂问题,以及应用Contegix的时机等问题。
企业:借力于虚拟化
除快速装备这一优势外,虚拟化对企业的价值还有很多,其中最重要的几个就是资源利用的最大化、应用的高可靠性以及应对灾难时业务的连贯性。每个CIO和CTO都会把这类需求摆在显著位置,而这正是虚拟化的专长。
云计算目前还不是非常流行的企业技术部署平台,并且有可能永远会处于不温不火的状态。要知道,许多企业的制度是不允许在云上部署应用的。对供应商的不信任和对其是否会遵守规范的怀疑也是限制云计算应用的因素。对法律的和违约后的潜在负面影响的解释已经变得不那么容易了,这些都是诸如健康保险便利和责任法案(Health Insurance Portability and Accountability Act ,HIPAA)和萨班斯·奥克斯利法案(Sarbanes-Oxeley ,SOX)等一些法案的出台造成的。就算以上这些障碍都已克服,企业将所有的东西都搬到云上也并非易事。
然而,这并不意味着由于充分利用资源而得到扩展上的灵活性会跟这些组织无缘。在专有的计算资源和网络基础设施上实施的虚拟化是解决这个问题的核心。实质上,这些公司正在构建和应用私有的云(确切地讲是私有的云风格的架构)。
VMWare和Citrix XenServer可以使物理硬件资源得到充分利用。它们能在虚拟化集群中平衡虚拟机资源需求和物理服务器容量。当一个虚拟机启动后,虚拟化栈会为其分配物理服务器资源。
大部分虚拟化栈拥有驱动高可靠性应用的能力。这并不完全是为了对诸如Oracle Coherence和 Microsoft Cluster Server的集群技术进行补充。设计这些的目的是为了解决发生在硬件层面的一些故障和提高一般应用的可靠性。
这些应用的高可靠性一般是通过多点主从备份达到的。首先,请求会被发送到活动的主节点。如果活动的主节点没有回应,一个备份节点会被升级为活动主节点,请求会被发送到这个新的主节点。这么做的缺点原来主活动节点的内存中的数据会丢失,这个问题仍然没有得到解决。
这个问题可以通过VMWare’s VMotion和Citrix XenServer XenMotion等实时迁移技术(live migration capabilities)得到解决。通过这项技术,我们可以将一个运行中的虚拟机从一个实体机器迁移到另一个实体机器,在这个过程中硬盘和内存中的数据都不会丢失,甚至网络连接都会得以保持。这一点是通过虚拟机内存状态和执行状态的复制完成的。要知道虚拟机的配置和所有的状态都存储在共享存储空间中。
如果一个装有虚拟机的服务器宕机了,虚拟栈探测到故障后将在另一台服务器上激活复制的虚拟机。虚拟机的迁移过程中 , 原来机器的核心状态将得以保持,其中包括精确的执行状态、网络ID和活动的网络连接。这么做保证了零宕机时间,因此不会对用户的产生负面影响。
通过对资源调度、虚拟机实时迁移、企业存储系统复制等技术的整合,企业的连贯性得以保证。虚拟机可以方便地由一个虚拟集群复制到另一个虚拟集群,这种复制是独立于底层硬件的,并且不必考虑距离远近的问题。
SaaS:借力于虚拟化
尽管 Software-as-a-Service (SaaS)一直保持着高姿态,市场还远未达到成熟的程度。这个局面是由多方面因素造成的。普遍存在的一个因素是基础设施投资占到了SaaS初期资金中很大一部分,而非大家常常认为的开发成本,因此达到预算平衡需要一段相对长的时间。SaaS头一个用户往往花费不菲,而后续用户的价格会慢慢变低。另外 SaaS部署在保持一定连续性的同时必须创造出一定的灵活性,以满足客户的修改要求。
一般的SaaS用户并不会在乎和关注厂商在基础设施上的大笔投资。典型的SaaS销售并非只适合于美国运通企业卡持有客户,虽然在公司内部软件的购买需要得到许多C级执行官的许可。因此,SaaS厂商必须制定一个合理的价格策略,而非只考虑着收回基础设施的投资。需要补充是,除了硬件购买费用外,基础设施费用还包括长期的部署费用、支持和管理费用以及应用发布后的维护费用。
在谈完基础设施方面后,我们将集中谈谈SaaS的部署。SaaS应用平台应该集中关注其可复制性。每个SaaS应用实例都应该大体相同。差异的最小化可以使每个客户的应用实例做到基本一致,也同样有利于技术支持人员进行故障诊断。单独的某个客户实例上Apache模块丢失这类问题,技术支持工程师们大都不愿意去解决,这正如客户也不愿意看到自己订购的实例出现问题,而这个问题是由于SaaS公司不能重现某个实例的操作造成的。复杂性上的最后一点还在于,从一致性和成本上考虑整个过程需要做到自动化。
(当然也存在例外情况,如应用数据、部署实例数据和潜在的可扩展性参数;然而,这些对应用来说只是修饰性数据和用户数据。在为不同的客户配置应用时,这些数据是本应单独设置的。)
为什么会有这种一致性的问题呢?了解目前应用——不管是SaaS应用还是传统应用——部署的复杂性是问题的重点。即使最简单的web应用,其本身也不会负责管理底层的数据存储层, 这通常会交给数据库特别是诸如MySQL, PostgreSQL, Oracle和SQL Server的关系型数据库系统。这些再加上诸如Java或者Rails的web栈组成了一个多层可扩展部署的架构。例如,一个Rails应用可能会需要 Apache,Mongrel集群,memcache 和 MySQL。
最初的安装和应用基础设施间的互相缠绕并非是部署时候值得注意的唯一问题。应用的模块通常会需要特定的资源。为了保证其可用性、行为一致性和防止资源匮乏,给不同的模块分配特定的资源是非产好的选择。例如,一个Mongrel集群或者Tomcat实例会被分配一定的CPU和RAM资源,同时相关的数据库也会分配到自己单独的份额。这么做可以很好的防止由于长期独占而造成的资源缺乏。
此外,应用的敏捷本质使得通过插件、宏和mashups进行扩展变得容易。为一个单独实例做的扩展可能不会应用到所有其他企业实例中去。当一个客户(或者共享应用基础设施的一组用户)出现了问题,首要的事情就是隔开故障系统以避免对其他用户的潜在影响。SaaS客户可不想看到其他客户造成的资源受限环境导致的问题。
满足这些需求的方法有很多。从基础设施方面考虑,虚拟化技术可以从云计算的角度来解决硬件问题,因为云计算是支持规模增长的。同时虚拟化在部署管理、支持和维护方面的优势也是经过实践验证的。此外,虽然也可以应用Cfengine和Puppet等工具做到物理硬件方面的部署一致性。限制资源的应用同样可以通过系统某些特殊功能达到,例如Solaris zones和通过/etc/security/limits.conf文件操控Linux PAM。这些工具绝对好用。然而,虚拟化是解决这些问题的更好的方法,它能带来许多本质上的好处。虚拟化能实现计算机科学上的一个核心概念,即关注分离。
将应用分割成“在功能上重叠尽可能小的独立部件”(引自Wikipedia)是关注分离的前提。在虚拟化上,这个概念很适合用于基础设施上。人们可以在每个应用、每个客户或每个集群的基础上进行关注分离,这么做可以在充分利用底层硬件容量的同时拥有垂直和水平的方向上的扩展的能力。这对想进入 SaaS市场的单租用应用(single tenant applications)特别有用。它可以以近乎零代码修改的代价在底层硬件上部署多重承租(multi-tenancy)实例。
在Contegix的SaaS平台上,有两种通用的部署模式。两者区别在于应用是如何开发——每次部署支持单个客户还是每次部署支持多个客户(单重租用(single-tenancy) vs. 多重租用(multi-tenancy))。
在单客户SaaS中,用于发布客户应用实例的虚拟机数量很少,通常只有一到两个。例如,一个虚拟机承担整个应用从Web层到数据库层所有的功能,或者将这些分配到两个虚拟机上,每个负责其中一部分的任务。利用资源的虚拟配置能力,更多的CPU核可以快速地配置给某个PostgreSQL虚拟机。动态资源配置( Dynamic Resource Allocation)可以将虚拟机快速地迁移到一个能够满足资源需求的物理机器上。
另外一种通用的的部署模式提供了更高程度的分离。底层的基础设施上的应用被分配在多个虚拟机上,每个虚拟机都可以在需要的层面进行扩展。例如,一个应用由一个PostgreSQL数据库、两个承载不同Java Web应用的Tomcat容器组成,另一个应用为Rails Web应用Mongrel集群,这两个模块会被配置到两个单独的虚拟机上。比单租户模式进步是,这种模式在虚拟机资源和实例个数方面不仅仅只支持单个模块的扩展。所有的Web层都会利用nginx或者Apache代理进行包装,这样可以做到对前端客户透明的无缝切换。而在文件层次的多机数据访问会利用共享网络或者基于集群文件系统的块设备。再次强调一下,这个模型非常适合在大规模实例或者多客户应用中采用。
对两种部署模型来说,将操作系统和应用程序的安装与应用数据分离是至关重要的。这涉及到升级的处理方式。操作系统和应用程序的安装可以说是易失性的,重做或者版本更新都是常事。升级后的操作系统、应用和配置会覆盖老版本。这更说明了如果要发布一个应用的话,发布的机制是非常重要的。
采用虚拟化的方式发布应用有很多内在优势。前面提到的虚拟化的一个特征——可以将虚拟机由一个机器迁移到另外一个机器——是一个关键的优势。如果采用物理硬件上的解决方案(如 PAM ),那么就要求在宿主操作系统的层面移动用户数据和同步配置文件。除此之外,虚拟化能支持快速构建、开发、对虚拟机进行沙箱测试和应用标准工具进行比较等。还记得可以在两个映像间运行 Unix 的 "diff -r"命令或者进行 MF5 校验和运算吗?
并非万能的虚拟化
就像任何行业新概念一样,虚拟化有成为一切新旧问题解决方案的趋势。但是事实是虚拟化并非对所有的系统和应用都合适,例如有些对资源要求很高的应用。而这种情况在高速 I/O 环境中是比较普遍的,例如大规模数据服务器和高强度 UDP 网络。
获得合理方案的方法很简单,实验、实验再实验。
作者简介:
Matthew E. Porter是Contegix LLC公司的CEO。 在Contegix 创办之前,Matthew 是 Contegix 的母公司Metissian LLC 的合伙人。Matthew 毕业于 St. Louis 大学计算机系并获得学士学位。
阅读英文原文:More Than Just Spin (Up) : Virtualization for the Enterprise。
发表评论
-
UML 包图
2009-11-12 09:30 4670什么是包 包可直接理解为命名空间,文件夹,是用来组织图形的封 ... -
软件架构概念分类
2009-11-15 23:05 909软件架构对于每一个人的理解都是不同的,通过分类可以在包容细节差 ... -
UML中对关系的描述
2009-11-16 15:41 758来源网络,加注释修改了用词 依赖关系(Dependency) ... -
UML 用例图
2009-11-19 16:18 3208下面这个知识图片可参照 用例驱动开发 现代需求实践 ... -
UML 对象图
2009-11-22 09:21 2567内容图谱 •对象与类的关系 对象的概念与特性 ... -
UML 活动图
2009-11-22 12:50 7857内容路线 •活动图概述 活动图概述 •活动图和 ... -
UML 状态图
2009-11-22 16:18 4947•状态和状态机 状态、状态表示法及状态机 ... -
UML 构件图(组件图)
2009-11-24 11:35 7367•什么是构件 构件和构件的要素 •构件是系统中可 ... -
开闭原则(Open-Closed Principle,OCP)
2009-11-24 12:32 13992 开闭原则(Open-Closed Principle,OC ... -
MDA(模型驱动架构)
2009-11-24 12:38 21581. 什么是MDA MDA(Model Driv ... -
DSM领域定义建模和MDA模型驱动架构分析
2009-11-24 12:43 1278Domain-Specific ModelingandMode ... -
简单实现缓存需求
2009-10-30 15:52 772读写缓存像变量一样很容易,但是维护缓存,判定缓存有效性,就要根 ... -
模型驱动的开发,回忆一年多前的一次开发
2009-11-07 12:59 819您有关于问题域、需求 ... -
UML建模实践概述
2009-11-11 11:05 920建模目的和原则 • 帮 ... -
UML模型的组成
2009-11-11 12:42 1457UML模型基本元素 模型组织元素 •图:最直接的一种 ...
相关推荐
Web-App-Developer-2-by-InfoQ
Architect-201306-by-InfoQ
### 构建高效能团队与...综上所述,“Architect-201304-by-InfoQ”期刊不仅提供了丰富的技术内容,还涉及了技术传播的专业化发展以及构建高效能团队等多个重要话题,对于当时的IT专业人士来说是一份极具价值的资源。
现在,使用CasperJs + PhantomJS(在infoq-downloader目录中)运行infoq-downloader: casper ./lib/infoq-casper.js http://www.infoq.com/presentations/a-presentation-name 如果您更喜欢SlimerJS,请尝试以下...
这一点从标题“Architect-201307-by-InfoQ”和描述中提到的“架构师应该具备什么样的技能?”中得到了体现。架构师需要掌握的关键技能之一就是**取舍的能力**。这种能力体现在多个层面: - **硬件与系统资源的平衡*...
infoq-mini-book, 使用Asciidoctor创建InfoQ的模板项目 mini这是本很棒的书。 它用AsciiDoc编写,并使用 Asciidoctor Gradle插件插件编译为 HTML 。PDF 。EPUB和移动。建筑要将本图书转换为 HTML,EPUB和移动,请...
【InfoQ:软件工程数智化研究报告-可观测应用篇2023】这份报告深入探讨了在云原生技术、敏捷开发和DevOps理念推动下,软件工程领域的新趋势——可观测性。随着企业对业务灵活性和客户体验的重视,系统稳定性与可靠性...
《代码之美》是由InfoQ出版的一本非常受欢迎的IT书籍,专注于探讨编程的艺术与科学,旨在帮助程序员提升代码质量和可读性。这本书以其独特的视角,深入浅出地讲解了如何编写出优雅、高效且易于维护的代码。在编程的...
总的来说,《infoQ-开源前端生态图谱报告》揭示了前端开发领域的现状、特点和挑战,为开发者、企业和行业提供了宝贵的参考信息,预示着前端开源生态将继续向技术深度和用户体验优化的方向演进。
infoq-downloader, 下载InfoQ的演示文稿,包括视频&幻灯片,以离线播放它们 下载是许多有用会话的优秀资源。 他们查看演示文稿与幻灯片同步的方式很酷。 我的网络连接很慢,这让我的浏览体验变得。 为了解决这个问题...
《InfoQ.com上相关的NoSQL演讲与访谈》部分汇集了一系列深度内容,包括对NoSQL领域的专家访谈和演讲摘要,为读者提供了全面了解NoSQL最新动态的机会。这部分内容不仅覆盖了理论层面的探讨,还涉及实践中的应用案例和...
文档提供了一些解决方案来处理这类情况,比如通过代码审查、自动化的构建过程以及及时的沟通等方式减少冲突发生的可能性。 #### 多团队发布到主干的问题 当多个团队都在向主干发布代码时,如何协调各方工作以避免...
在本文中,我们将深入探讨“Oracle Connection”这一主题,基于InfoQ.com上的一篇博文,虽然描述中并未提供具体内容,但我们可以从标签“源码”和“工具”推断出讨论可能涉及编程接口和实用工具。 首先,Oracle...
JHipster或者称Java Hipster,是一个应用代码产生器,能够创建Spring Boot + AngularJS/React/Vue的应用。 这本书的作者拥有十几年的Java Web开发经验,书中介绍了JHipster的基本使用,如果各位同学有兴趣,可以试一...