分类 云计算 下的文章

云计算虚拟化策略中的三大关键要点

摘要:虚拟化已经深入了IT各个领域。面对虚拟化潮流,唯有顺势而为早日做好部署,才能在未来的竞争中获得优势。     当然,在整个IT环境中实施虚拟化部署并不是件容易的事情,通常来说,这其中包括有:
–决定实施虚拟化的设备(全部还是部分)
–决定实施虚拟化平台的软硬件,比如是Hyper-V还是VMware或者Xenapp
–先从小部分服务器和工作站开始搭建平台,并全面测试其工作性能和资源消耗情况
–为冗余/故障设立合理的备份措施,并利用工具进行监视和纠错
从虚拟化角度来说,它的好处有很多,比如减少硬件、集中化管理、节省运营成本甚至有助于环保–低功耗(也可以称之为硬件污染)。执行虚拟化环境所带来的影响是多方面的。但它有没有负面影响呢?
虚拟化平台资源尤其是底层的硬件设备,都是可以实现共享的。主机上的虚拟机并不知道共享同一台主机的客户情况, 否则它们将会造成客户机之间的竞争。总的来说,如果所有资源密集型任务都在同一时间涌向客户机,就可能会影响到主机的性能表现。另一个缺点是,如果虚拟化平台上的主机性能受到影响,那么,它就会既影响到主机本身还会影响到共享同一主机的其他客户。
为此,我们提出在实施虚拟化策略的过程中,不能忽视以下三个关键要点:
1、日益增多的碎片会造成I/O瓶颈和性能下降问题–虚拟化平台中,文件出现碎片或者写入到磁盘的分区过于分散。
2、数据被删除时虚拟磁盘空间不会随之缩减。
3、虚拟机会争夺I/O资源,而且它们使用的时候不能跨平台有效地实施优先级。
这些问题可能会降低虚拟机的性能,也会影响迁移到虚拟平台的实现。不过,避免资源冲突和实现系统优化可以弥补这些不足。删除文件系统中的碎片有助于降低I/O资源消耗。更小的I/O请求将有助于I/O性能和可靠性的持久发挥。
磁盘空间是很宝贵的资源,虚拟环境下任何空间的浪费都不可接受的。对磁盘空间使用状况进行持续监测,特别是动态环境下的空间使用状况的监测,显得更加重要。

云计算中的虚拟化的性能提升

摘要:过去10年里,虚拟技术帮助IT工程师实现了整合资源,节约成本,助力企业增长等目标。不过,虚拟化究竟能产生多大影响呢?跟现代服务器技术打交道的工程师应该懂得利用该技术资源,帮助企业增长、扩大。通过在一台物理主机上安装多个虚拟机器,数据中心运行会更流畅,而且硬件设备的数量可以相对减少。新型的惠普ProLiant服务器配置了英特尔8核处理器,可以负载5至6台虚拟机。那么,明明可以实施虚拟化,为什么我们还紧抓住硬件不放呢?
虚拟化变得越来越容易,网络工程师也越发能接受虚拟技术。然而,现在对该技术的运用却出现了下降趋势。最近,许多公司的做法是,买一台服务器,把工作负荷放在存储网络(SAN),再安装管理程序和虚拟机。尽管这个方法可行,但IT管理员却常常略过影响虚拟服务器性能的某些重要步骤。
了解虚拟化技术
一般来讲,虚拟技术有两种类型:主机架构和裸机架构。主机架构环境下,服务器有预先安装的操作系统,例如WindowsServer2008。管理员会在原操作系统上加载安装虚拟化软件。裸机架构则完全移除原有操作系统,重新安装Linux/Unix-basedkernel作为管理程序。基本上,虚拟技术是直接安装在硬件上的。CitrixSystems的XenServer适用裸机架构,VMware公司两种技术都能提供。
裸机架构的最大优势在于虚拟机不需要其他软件就能直接访问基础硬件资源。不过,裸机架构要求更新型的硬件,譬如机载服务器必须是Intel-VT或是AMD-V。这意味着,升级的旧服务器利用不了这项技术。虽然如此,主机架构管理程序总是可以利用的。
资源利用
无论对于物理主机还是虚拟机,合理的资源分配都是至关重要的。在部署前,必须了解利用这些硬件要达到什么目的。要进行不间断的高端SQL查询?或者公司计划安装一些应用软件满足一部分用户不定期访问的要求?明白了目标是什么,管理员才能进行合理架设,处理相应工作负荷,更重要的是,伴随基础设施的变化,整个架构也能做出相应调整。
谈到物理硬件,有三个主要的升级办法:
1.硬盘驱动器对于升级硬盘驱动器能显著改善虚拟机性能的说法,大家几乎没有异议。如果现有环境不是把存储网络作为工作负荷的中心,可以考虑用多个高速硬盘来实现升级。对于小型公司,由于不需使用集中存储排列,通常是升级物理硬件内置容量。也就是说,通过更新性能更好的驱动来升级RAID排列,整个运行环境会有很大提高,冗余也会增加。
对于已有存储区域网的较大规模环境,考虑利用现有的技术。存储区域网老化了吗?依附在存储区域网上的驱动是否运行得够快,能够快速和无缝地访问一项工作负荷吗?IT工程师考虑这个问题时,经常会跳过更换存储区域网这个想法,而让他们感到疑惑的是尽管有了新服务器和新虚拟化软件,他们的虚拟基础设施为何运行缓慢。
2.CPU虚拟机装到物理机上时,机载处理器利用率更高了。
从IT工程师的角度看,更快的CPU总能提供更快的处理速度。物理主机有空间允许CPU升级甚至是增加。许多机器配置了开放性CPU槽,以备扩容之需。
3.RAM升级RAM可能是挖掘虚拟主机性能最经济有效的办法。通过在主机上升级内存,能够给每台虚拟机分配更多的RAM。任何一台服务器都能承载比平常更多的RAM。增加RAM之后,工程师就能再次检查虚拟机是如何利用资源的。从而,可以根据实际需要,额外分配内存给特定机器以提高效率。

OpenStack的架构

OpenStack的架构
1. OpenStack是什么
OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集。其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的云计算。
OpenStack旗下包含了一组由社区维护的开源项目,他们分别是OpenStack Compute(Nova),OpenStack Object Storage(Swift),以及OpenStack Image Service(Glance)。
OpenStack Compute[1],为云组织的控制器,它提供一个工具来部署云,包括运行实例、管理网络以及控制用户和其他项目对云的访问(the cloud through users and projects)。它底层的开源项目名称是Nova,其提供的软件能控制IaaS云计算平台,类似于Amazon EC2和Rackspace Cloud Servers。实际上它定义的是,与运行在主机操作系统上潜在的虚拟化机制交互的驱动,暴露基于Web API的功能。
OpenStack Object Storage[2],是一个可扩展的对象存储系统。对象存储支持多种应用,比如复制和存档数据,图像或视频服务,存储次级静态数据,开发数据存储整合的新应用,存储容量难以估计的数据,为Web应用创建基于云的弹性存储。
OpenStack Image Service[1],是一个虚拟机镜像的存储、查询和检索系统,服务包括的RESTful API允许用户通过HTTP请求查询VM镜像元数据,以及检索实际的镜像。VM镜像有四种配置方式:简单的文件系统,类似OpenStack Object Storage的对象存储系统,直接用Amazon’s Simple Storage Solution (S3) 存储,用带有Object Store的S3间接访问S3。
三个项目的基本关系如下图1-1所示:
1-1 OpenStack三个组件的关系
2.云服务提供商的概念架构
OpenStack能帮我们建立自己的IaaS,提供类似Amazon Web Service的服务给客户。为实现这一点,我们需要提供几个高级特性:
a)允许应用拥有者注册云服务,查看运用和计费情况;
b)允许Developers/DevOps folks创建和存储他们应用的自定义镜像;
c)允许他们启动、监控和终止实例;
d)允许Cloud Operator配置和操作基础架构
这四点都直击提供IaaS的核心,现在假设你同意了这四个特性,现在就可以将它们放进如下所示的概念架构2-1中。
2-1 OpenStack 概念架构
在此模型中,作者假设了需要与云交互的四个用户集:developers, devops, owners and operators,并为每类用户划分了他们所需要的功能。该架构采用的是非常普通的分层方法(presentation, logic and resources),它带有两个正交区域。
展示层,组件与用户交互,接受和呈现信息。Web portals为非开发者提供图形界面,为开发者提供API端点。如果是更复杂的结构,负载均衡,控制代理,安全和名称服务也都会在这层。
逻辑层为云提供逻辑(intelligence)和控制功能。这层包括部署(复杂任务的工作流),调度(作业到资源的映射),策略(配额等等),镜像注册image registry (实例镜像的元数据),日志 (事件和计量) 。
假设绝大多数服务提供者已经有客户身份和计费系统。任何云架构都需要整合这些系统。
在任何复杂的环境下,我们都将需要一个management层来操作这个环境。它应该包括一个API访问云管理特性以及一些监控形式(forms)。很可能,监控功能将以整合的形式加入一个已存在的工具中。当前的架构中已经为我们虚拟的服务提供商加入了monitoring和admin API,在更完全的架构中,你将见到一系列的支持功能,比如provisioning和 configuration management。
最后,资源层。既然这是一个compute云,我们就需要实际的compute、network 和 storage资源,以供应给我们的客户。该层提供这些服务,无论他们是服务器,网络交换机,NAS(network attached storage)还是其他的一些资源。
3. OpenStack Compute架构
3.1OpenStack Compute逻辑架构
OpenStack Compute逻辑架构中,组件中的绝大多数可分为两种自定义编写的Python守护进程(custom written python daemons)。
a)接收和协调API调用的WSGI应用(nova-api, glance-api, etc)
b)执行部署任务的Worker守护进程(nova-compute, nova-network, nova-schedule, etc.)
然而,逻辑架构中有两个重要的部分,既不是自定义编写,也不是基于Python,它们是消息队列和数据库。二者简化了复杂任务(通过消息传递和信息共享的任务)的异步部署。
逻辑架构图3-1如下所示:
3-1 OpenStack Compute逻辑架构
从图中,我们可以总结出三点:
a)终端用户(DevOps, Developers 和其他的 OpenStack 组件)通过和nova-api对话来与OpenStack Compute交互。
b)OpenStack Compute守护进程之间通过队列(行为)和数据库(信息)来交换信息,以执行API请求。
c)OpenStack Glance基本上是独立的基础架构,OpenStack Compute通过Glance API来和它交互。
其各个组件的情况如下:
a)nova-api守护进程是OpenStack Compute的中心。它为所有API查询(OpenStack API 或 EC2 API)提供端点,初始化绝大多数部署活动(比如运行实例),以及实施一些策略(绝大多数的配额检查)。
b)nova-compute进程主要是一个创建和终止虚拟机实例的Worker守护进程。其过程相当复杂,但是基本原理很简单:从队列中接收行为,然后在更新数据库的状态时,执行一系列的系统命令执行他们。
c)nova-volume管理映射到计算机实例的卷的创建、附加和取消。这些卷可以来自很多提供商,比如,ISCSI和AoE。
d)Nova-network worker守护进程类似于nova-compute和nova-volume。它从队列中接收网络任务,然后执行任务以操控网络,比如创建bridging interfaces或改变iptables rules。
e)Queue提供中心hub,为守护进程传递消息。当前用RabbitMQ实现。但是理论上能是python ampqlib支持的任何AMPQ消息队列。
f)SQL database存储云基础架构中的绝大多数编译时和运行时状态。这包括了可用的实例类型,在用的实例,可用的网络和项目。理论上,OpenStack Compute能支持SQL-Alchemy支持的任何数据库,但是当前广泛使用的数据库是sqlite3(仅适合测试和开发工作),MySQL和PostgreSQL。
g)OpenStack Glance,是一个单独的项目,它是一个compute架构中可选的部分,分为三个部分:glance-api, glance-registry and the image store. 其中,glance-api接受API调用,glance-registry负责存储和检索镜像的元数据,实际的Image Blob存储在Image Store中。Image Store可以是多种不同的Object Store,包括OpenStack Object Storage (Swift)
h)最后,user dashboard是另一个可选的项目。OpenStack Dashboard提供了一个OpenStack Compute界面来给应用开发者和devops staff类似API的功能。当前它是作为Django web Application来实现的。当然,也有其他可用的Web前端。
3.2概念映射
将逻辑架构映射到概念架构中(如3-2所示),可以看见我们还缺少什么。
3-2 逻辑架构到概念架构的映射
这种覆盖方式并不是唯一的,这里的只是作者的理解。通过覆盖OpenStack Compute 逻辑组件,Glance和Dashboard,来表示功能范围。对于每一个覆盖,都有相应的提供该功能的逻辑组件的名称。
a)在这种覆盖范围中,最大的差距是logging和billing。此刻,OpenStack Compute没有能协调logging事件、记录日志以及创建/呈现bills的Billing组件。真正的焦点是logging和Billing的整合。这能通过以下方式来补救。比如代码扩充,商业产品或者服务或者自定义日志解析的整合。
b)Identity也是未来可能要补充的一点。
c)customer portal也是一个整合点。user dashboard(见运行的实例,启动新的实例)没有提供一个界面,来允许应用拥有者签署服务,跟踪它们的费用以及声明有问题的票据(lodge trouble tickets)。而且,这很可能对我们设想的服务提供商来说是合适的。
d)理想的情况是,Admin API会复制我们能通过命令行接口做的所有功能。在带有Admin API work的Diablo 发布中会更好。
e)云监控和操作将是服务提供商关注的重点。好操作方法的关键是好的工具。当前,OpenStack Compute 提供 nova-instancemonitor,它跟踪计算结点使用情况。未来我们还需要三方工具来监控。
f)Policy是极其重要的方面,但是会与供应商很相关。从quotas到QoS,到隐私控制都在其管辖内。当前图上有部分覆盖,但是这取决于供应商的复杂需求。为准确起见,OpenStack Compute 为实例,浮点IP地址以及元数据提供配额。
g)当前,OpenStack Compute内的Scheduling对于大的安装来说是相当初步的。调度器是以插件的方式设计的,目前支持chance(随机主机分配),simple(最少负载)和zone(在一个可用区域里的随机结点。)分布式的调度器和理解异构主机的调度器正在开发之中。
如你所见,OpenStack Compute为我们想象的服务提供商,提供了一个不错的基础,只要服务提供商愿意做一些整合。
3.3OpenStack Compute系统架构
OpenStack Compute由一些主要组件组成。“Cloud controller”包含很多组件,它表示全局状态,以及与其他组件交互。实际上,它提供的是Nova-api服务。它的功能是:为所有API查询提供一个端点,初始化绝大多数的部署活动,以及实施一些策略。API 服务器起cloud controller web Service前端的作用。Compute controller 提供compute服务资源,典型包含compute service,Object Store component可选地提供存储服务。Auth manager提供认证和授权服务,Volume controller为compute servers提供快速和持久的块级别存储。Network controller提供虚拟网络使compute servers彼此交互以及与公网进行交互。Scheduler选择最合适的compute controller来管理(host)一个实例。
OpenStack Compute建立在无共享、基于消息的架构上。Cloud controller通过HTTP与internal object store交互,通过AMQP和scheduler、network controller、 和volume controller 来进行通信。为了避免在等待接收时阻塞每个组件,OpenStack Compute用异步调用的方式。
为了获得带有一个组件多个备份的无共享属性,OpenStack Compute将所有的云系统状态保持在分布式的数据存储中。对系统状态的更新会写到这个存储中,必要时用质子事务。
对系统状态的请求会从store中读出。在少数情况下,控制器也会短时间缓存读取结果。
3.4OpenStack Compute物理架构
OpenStack Compute采用无共享、基于消息的架构,非常灵活,我们能安装每个nova- service在单独的服务器上,这意味着安装OpenStack Compute有多种可能的方法。可能多结点部署唯一的联合依赖性,是Dashboard必须被安装在nova-api服务器。几种部署架构如下:
a)单结点:一台服务器运行所有的nova- services,同时也驱动虚拟实例。这种配置只为尝试OpenStack Compute,或者为了开发目的;
b)双结点:一个cloud controller 结点运行除nova-compute外的所有nova-services,compute结点运行nova-compute。一台客户计算机很可能需要打包镜像,以及和服务器进行交互,但是并不是必要的。这种配置主要用于概念和开发环境的证明。
c)多结点:通过简单部署nova-compute在一台额外的服务器以及拷贝nova.conf文件到这个新增的结点,你能在两结点的基础上,添加更多的compute结点,形成多结点部署。在较为复杂的多结点部署中,还能增加一个volume controller 和一个network controller作为额外的结点。对于运行多个需要大量处理能力的虚拟机实例,至少是4个结点是最好的。
一个可能的Openstack Compute多服务器部署(集群中联网的虚拟服务器可能会改变)如下3-3所示:
3-3 OpenStack Compute物理架构一
如果你注意到消息队列中大量的复制引发了性能问题,一种可选的架构是增加更多的Messaging服务器。在这种情形下,除了可以扩展数据库服务器外,还可以增加一台额外的RabbitMQ服务器。部署中可以在任意服务器上运行任意nova-service,只要nova.conf中配置为指向RabbitMQ服务器,并且这些服务器能发送消息到它。
下图3-4是另外一种多结点的部署架构。
3-4 多结点的部署架构二
3.5 OpenStack Compute服务架构
因为Compute有多个服务,也可能有多种配置,下图3-5显示了总体的服务架构,以及服务之间的通信系统。
3-5 OpenStack Compute服务架构
4.OpenStack Image Service
OpenStack Image Service包括两个主要的部分,分别是API server和Registry server(s)。
OpenStack Image Service的设计,尽可能适合各种后端仓储和注册数据库方案。API Server(运行“glance api”程序)起通信hub的作用。比如各种各样的客户程序,镜像元数据的注册,实际包含虚拟机镜像数据的存储系统,都是通过它来进行通信的。API server转发客户端的请求到镜像元数据注册处和它的后端仓储。OpenStack Image Service就是通过这些机制来实际保存进来的虚拟机镜像的。
OpenStack Image Service支持的后端仓储有:
a)OpenStack Object Storage。它是OpenStack中高可用的对象存储项目。
b)FileSystem。OpenStack Image Service存储虚拟机镜像的默认后端是后端文件系统。这个简单的后端会把镜像文件写到本地文件系统。
c)S3。该后端允许OpenStack Image Service存储虚拟机镜像在Amazon S3服务中。
d)HTTP。OpenStack Image Service能通过HTTP在Internet上读取可用的虚拟机镜像。这种存储方式是只读的。
OpenStack Image Service registry servers是遵守OpenStack Image Service Registry API的服务器。
根据安装手册,这两个服务安装在同一个服务器上。镜像本身则可存储在OpenStack Object Storage, Amazon’s S3 infrastructure,fileSystem。如果你只需要只读访问,可以存储在一台Web服务器上。
5.OpenStack Object Storage
5.1 关键概念
a)Accounts和 Account Servers
OpenStack Object Storage系统被设计来供许多不同的存储消费者或客户使用。每个用户必须通过认证系统来识别自己。为此,OpenStack Object Storage提供了一个授权系统(swauth)。
运行Account服务的结点与个体账户是不同的概念。Account服务器是存储系统的部分,必须和Container服务器和Object服务器配置在一起。
b)Authentication 和 Access Permissions
你必须通过认证服务来认证,以接收OpenStack Object Storage连接参数和认证令牌。令牌必须为所有后面的container/object操作而传递。典型的,特定语言的API处理认证,令牌传递和HTTPS request/response 通信。
通过运用X-Container-Read: accountname和 X-Container-Write: accountname:username,你能为用户或者账户对对象执行访问控制。比如,这个设置就允许来自accountname账户的的任意用户来读,但是只允许accountname账户里的用户username来写。你也能给OpenStack Object Storage中存储的对象授予公共访问的权限,而且可以通过Referer头部阻止像热链接这种基于站点的内容盗窃,来限制公共访问。公共的container设置被用作访问控制列表之上的默认授权。比如,X-Container-Read: referer: any 这个设置,允许任何人能从container中读,而不管其他的授权设置。
一般来说,每个用户能完全访问自己的存储账户。用户必须用他们的证书来认证,一旦被认证,他们就能创建或删除container,以及账户之类的对象。一个用户能访问另一个账户的内容的唯一方式是,他们享有一个API访问key或你的认证系统提供的会话令牌。
c)Containers and Objects
一个Container是一个存储隔间,为你提供一种组织属于属于你的数据的方式。它比较类似于文件夹或目录。Container和其他文件系统概念的主要差异是containers不能嵌套。然而,你可以在你的账户内创建无数的containers。但是你必须在你的账户上有一个container,因为数据必须存在Container中。
Container取名上的限制是,它们不能包含“/”,而且长度上少于256字节。长度的限制也适用于经过URL编码后的名字。比如,Course Docs的Container名经过URL编码后是“Course%20Docs”,因此此时的长度是13字节而非11字节。
一个对象是基本的存储实体,和表示你存储在OpenStack Object Storage系统中文件的任何可选的元数据。当你上传数据到OpenStack Object Storage,它原样存储,由一个位置(container),对象名,以及key/value对组成的任何元数据。比如,你可选择存储你数字照片的副本,把它们组织为一个影集。在这种情况下,每个对象可以用元数据Album :
Caribbean Cruise 或Album : Aspen Ski Trip来标记。
对象名上唯一的限制是,在经过URL编码后,它们的长度要少于1024个字节。
上传的存储对象的允许的最大大小5GB,最小是0字节。你能用内嵌的大对象支持和St工具来检索5GB以上的对象。对于元数据,每个对象不应该超过90个key/value对,所有key/value对的总字节长度不应该超过4KB。
d)Operations
Operations是你在OpenStack Object Storage系统上执行的行为,比如创建或删除containers,上传或下载objects等等。Operations的完全清单可以在开发文档上找到。Operations能通过ReST web service API或特定语言的API来执行。值得强调的是,所有操作必须包括一个来自你授权系统的有效的授权令牌。
e)特定语言的API绑定
一些流行语言支持的API 绑定,在RackSpace云文件产品中是可用的。这些绑定在基础ReST API上提供了一层抽象,允许变成人员直接与container和object模型打交道,而不是HTTP请求和响应。这些绑定可免费下载,使用和修改。它们遵循MIT许可协议。对于OpenStack Object Storage,当前支持的API绑定是:PHP,Python,Java,C#/.NET 和Ruby。
5.2 Object Storage如何工作
a)Ring
Ring 代表磁盘上存储的实体的名称和它们的物理位置的映射。accounts, containers, and objects都有单独的Ring。其他组件要在这三者之一进行任何操作,他们都需要合相应的Ring进行交互以确定它在集群中的位置。
Ring用zones,devices,partitions,和replicas来维护映射,在Ring中的每个分区都会在集群中默认有三个副本。分区的位置存储在Ring维护的映射中。Ring也负责确定失败场景中接替的设备。(这点类似HDFS副本的复制)。分区的副本要保证存储在不同的zone。Ring的分区分布在OpenStack Object Storage installation所有设备中。分区需要移动的时候,Ring确保一次移动最少的分区,一次仅有一个分区的副本被移动。
权重能用来平衡分区在磁盘驱动上的分布。Ring在代理服务器和一些背景进程中使用。
b)Proxy Server
代理服务器负责将OpenStack Object Storage架构中其他部分结合在一起。对于每次请求,它都查询在Ring中查询account, container, or object的位置,并以此转发请求。公有APIs也是通过代理服务器来暴露的。
大量的失败也是由代理服务器来进行处理。比如一个服务器不可用,它就会要求Ring来为它找下一个接替的服务器,并把请求转发到那里。
当对象流进或流出object server时,它们都通过代理服务器来流给用户,或者通过它从用户获取。代理服务器不会缓冲它们。
Proxy服务器的功能可以总结为:查询位置,处理失败,中转对象。
c)Object Server
Object Server,是非常简单的blob存储服务器,能存储、检索和删除本地磁盘上的对象,它以二进制文件形式存放在文件系统中,元数据以文件的扩展属性存放。
对象以源于对象名的hash和操作的时间戳的路径来存放。上一次写总会成功,确保最新的版本将被使用。删除也视作文件的一个版本:这确保删除的文件也被正确复制,更旧的把本不会因为失败情形离奇消失。
d)Container Server
其主要工作是处理对象列表,它不知道对象在哪里,只是知道哪些对象在一个特定的container。列表被存储为sqlite 数据库文件,类似对象的方式在集群中复制。也进行了跟踪统计,包括对象的总数,以及container中使用的总存储量。
e)Account Server
它是类似于Container Server,除了它是负责containers的列表而非对象。
f)Replication
设计副本的目的是,在面临网络中断或驱动失败等临时错误条件时,保持系统在一致的状态。
副本进程会比较本地的数据和每个远处的副本,以确保他们所有都包含最新的版本。对象副本用一个Hash列表来快速比较每个分区的片段,而containe和 account replication 用的是Hash和共享的高水印结合的方法。
副本的更新,是基于推送的。对于对象副本,更新是远程同步文件到Peer。Account和container replication通过HTTP or rsync把整个数据库文件推送遗失的记录。
副本也通过tombstone设置最新版本的方式,确保数据从系统中清除。
g)更新器(Updaters)
有时,container 或 account数据不能被立即更新,这通常是发生在失败的情形或高负载时期。如果一个更新失败,该更新会在文件系统上本地排队,更新器将处理这些失败的更新。事件一致性窗口(eventual consistency window)最可能来起作用。比如,假设一个container服务器正处于载入之中,一个新对象正被放进系统,代理服务器一响应客户端成功,该对象就立即可读了。然而,container服务器没有更新Object列表,所以更新就进入队列,以等待稍后的更新。Container列表,因此可能还不会立即包含这个对象。
实际上,一致性窗口只是与updater运行的频率一样大,当代理服务器将转发清单请求到响应的第一个container服务器中,也许甚至还不会被注意。在载入之下的服务器可能还不是服务后续清单请求的那个。另外两个副本中的一个可能处理这个清单。
h)Auditors
Auditors会检查objects, containers, 和 accounts的完整性。如果发先损坏的文件,它将被隔离,好的副本将会取代这个坏的文件。如果发现其他的错误,它们会记入到日志中。
5.3 OpenStack Object Storage物理架构
Proxy Services 偏向于CPU和network I/O 密集型,而 Object Services, Container Services, Account Services 偏向于disk and networkI/O 密集型。
可以在每一服务器上安装所有的服务,在Rackspace内部, 他们将Proxy Services放在他们自己的服务器上,而所有存储服务则放在同一服务器上。这允许我们发送10G的网络给代理,1G给存储服务器,从而保持对代理服务器的负载平衡更好管理。我们能通过增加更多代理来扩展整个API吞吐量。如果需要获得Account或 Container Services更大的吞吐量,它们也可以部署到自己的服务器上。
在部署OpenStack Object Storage时,可以单结点安装,但是它只适用于开发和测试目的。也可以多服务器的安装,它能获得分布式对象存储系统需要的高可用性和冗余。
有这样一个样本部署架构,如图5-1所示。一个Proxy 结点,运行代理服务,一个Auth 结点,运行认证服务,五个Storage结点,运行Account,Container和Object服务。
5-1 五个Storage结点的OpenStack Object Storage物理架构
参考文献
[1] OpenStack Compute Administration Manual.
http://docs.openstack.org/cactus/openstack-compute/admin/content.
[2] OpenStack Object Storage Developer Guide.http://docs.openstack.org/.

批处理 ping命令

代码:
@echo off
Rem 在win7下以管理员身份运行。IP00为十层机房网关 IP01是IaaS管理平台所在机器 IP02是证明该程序是正确的
setlocal enabledelayedexpansion
set IP00=172.21.48.1
set IP01=172.21.35.15
set IP02=192.16.1.1
Rem 以下是十层机房内机器IP
set IP1=172.21.48.118
set IP2=172.21.48.123
set IP3=172.21.48.124
set IP4=172.21.48.126
set IP5=172.21.48.127
set IP6=172.21.48.142
Rem set timeout=Request timed out.
set timeout=请求超时。
for %%i in (%IP00% %IP01% %IP02% %IP1% %IP2% %IP3% %IP4% %IP5% %IP6%) do (
set result=true
ping %%i -n 1 | find “%timeout%”>%temp%MyTempPingFile.txt
for /F “delims=” %%j in (%temp%MyTempPingFile.txt) do set result=false
if !result!==true (
echo ping %%i 通!) else (
echo ping %%i 不通!
)
)
del %temp%MyTempPingFile.txt
pause

互联网常见 Open API 文档资源

所谓的开放API(OpenAPI)是服务型网站 常见的一种应用,网站的服务商将自己的网站服务封装成一系列API(Application Programming  Interface,应用编程接口)开放出去,供第三方开发者使用,这种行为就叫做开放网站的API,所开放的API就被称作OpenAPI(开放 API)。
网站提供开放平台的API后,可以吸引一些第三方的开发人员在该平台上开发商业应用,平台提供商可以获得更多的流量与市场份 额,第三方开发者不需要庞大的硬件与技术投资就可以轻松快捷的创业,从而达到双赢的目的,开放API是大平台发展、共享的途径,让开发者开发一个有价值应 用,付出的成本更少,成功的机会更多。今天,OpenAPI作为互联网在线服务的发展基础,已经成为越来越多互联网企业发展服务的必然选择。下面我就列举 一些常见网站服务的Open API文档资源索引。
SNS类网站API
Facebook – http://developers.facebook.com/
人人网开放平台 – http://dev.renren.com/
51.com开放平台 – http://developers.51.com/
MySpace开发者平台 – http://developer.myspace.cn/
Opensocial – http://wiki.opensocial.org/
Google Gadgets 小工具 API 开发人员指南 – http://www.google.com/intl/zh-TW/apis/gadgets/docs-home.html
Gadgets API 开发人员指南 – http://code.google.com/intl/zh-CN/apis/gadgets/docs/dev_guide.html
Gadgets API – http://code.google.com/intl/zh-CN/apis/gadgets/
电子商务类
Amazon API – http://aws.amazon.com/
eBay  API – http://developer.ebay.com/
淘宝开放平台 – http://www.taobao.com/theme/tao_source/
微博API
Twitter API – http://apiwiki.twitter.com/Twitter-API-Documentation
Status.Net(Laconica) API – http://status.net/wiki/Twitter-compatible_API
新浪微博开发者平台 – http://open.t.sina.com.cn
注:需要授权的开发者才能访问,其API调用格式类似Twitter,但需要一个API Key用于认证管理。
搜狐博客开放平台 –  http://ow.blog.sohu.com/
Follow5 API – http://www.follow5.com/f5/jsp/other/api/api.jsp
嘀咕API – http://code.google.com/p/digu-api/wiki/DiguApi
做啥API – http://code.google.com/p/zuosa-api/wiki/ZuosaApiDoc
人间网API – http://renjian.com/api.html
9911微博API – http://www.9911.com/api.php
Google Maps API
Google Maps API Developer  Guide – http://code.google.com/intl/en/apis/maps/documentation/
Google Maps API Tutorial – http://econym.org.uk/gmap/extensions.htm
GMaps Utility Library – http://code.google.com/p/gmaps-utility-library-dev/wiki/Libraries
GMaps Utility Examples – http://gmaps-utility-library.googlecode.com/svn/trunk/labeledmarker/release/examples/
Saving User-Added Form Data – http://code.google.com/intl/zh-CN/apis/maps/articles/phpsqlinfo.html
Firefox类
Mozilla 开发者中心的扩展开发专题 – https://developer.mozilla.org/en/Extensions
XUL 1.0 规范 – http://www-archive.mozilla.org/projects/xul/xul.html
更多地了解这种基于 XML 的用户界面语言,它可以构建各种富跨平台应用程序。
Mozilla Development  Center 的 XUL 教程 – http://developer.mozilla.org/en/docs/XUL_Tutorial
Getting started with extension development 编写一个最简单的Firefox扩展 – http://kb.mozillazine.org/Getting_started_with_extension_development
Setting up extension development environment – http://developer.mozilla.org/en/docs/Setting_up_extension_development_environment
实战 Firefox 扩展开发 – http://www.ibm.com/developerworks/cn/web/wa-lo-firefox-ext/
使用 XUL 实现浏览器扩展 (1) – http://www.ibm.com/developerworks/cn/web/wa-xul1/
使用 XUL 实现浏览器扩展 (2) – http://www.ibm.com/developerworks/cn/web/wa-xul2/
应用类
豆瓣API – http://www.douban.com/service/apidoc/
Flickr API – http://www.flickr.com/services/api/
Last.fm API – http://www.last.fm/api
Box.net API – http://developers.box.net/
Delicious API – http://delicious.com/help/api
API统计 – http://www.programmableweb.com/apis
转载自月光博客 [ http://www.williamlong.info/ ]

使用OAuth进行认证和授权的过程

用户访问客户端的网站,想操作用户存放在服务提供方的资源。
客户端向服务提供方请求一个临时令牌。
服务提供方验证客户端的身份后,授予一个临时令牌。
客户端获得临时令牌后,将用户引导至服务提供方的授权页面请求用户授权。在这个过程中将临时令牌和客户端的回调连接发送给服务提供方。
用户在服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
授权成功后,服务提供方引导用户返回客户端的网页。
客户端根据临时令牌从服务提供方那里获取访问令牌。
服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。

hadoop权限

HDFS支持权限控制的设计是基于POSIX模型,支持按用户、用户组、其他用户的读写执行控制权限。
在linux命令行下,可以使用下面的命令修改文件的权限、文件所有者,文件所属组:
•hadoop fs –chmod (修改文件所有者,文件所属组,其他用户的读、写、执行权限)
•haddop fs –chown (修改文件所有者)
•hadoop fs –chgrp (修改文件所属组)
不同用户使用不同的linux帐户即可访问到特定文件。
启动hadoop hdfs系统的用户即为超级用户,可以进行任意的操作。

HTTPS

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
简介
它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的安全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。   也就是说它的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
HTTPS和HTTP的区别
一、https协议需要到ca申请证书,一般免费证书很少,需要交费。   二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。   三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。   四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全.
HTTPS解决的问题
一、信任主机的问题.
采用https的服务器必 须从CA (Certificate Authority)申请一个用于证明服务器用途类型的证书。该证书只有用于对应的服务器的时候,客户端才信任此主机。所以目前所有的银行系统网站,关键 部分应用都是https 的。客户通过信任该证书,从而信任了该主机。其实这样做效率很低,但是银行更侧重安全。这一点对我们没有任何意义,我们的服务器,采用的证书不管是自己发 布的还是从公众的地方发布的,其客户端都是自己人,所以我们也就肯定信任该服务器。
二、通讯过程中的数据的泄密和被篡改
1. 一般意义上的https,就是服务器有一个证书。   a) 主要目的是保证服务器就是他声称的服务器,这个跟第一点一样。   b) 服务端和客户端之间的所有通讯,都是加密的。   i. 具体讲,是客户端产生一个对称的密钥,通过服务器的证书来交换密钥,即一般意义上的握手过程。   ii. 接下来所有的信息往来就都是加密的。第三方即使截获,也没有任何意义,因为他没有密钥,当然篡改也就没有什么意义了。   2. 少许对客户端有要求的情况下,会要求客户端也必须有一个证书。   a) 这里客户端证书,其实就类似表示个人信息的时候,除了用户名/密码,还有一个CA 认证过的身份。因为个人证书一般来说是别人无法模拟的,所有这样能够更深的确认自己的身份。   b) 目前少数个人银行的专业版是这种做法,具体证书可能是拿U盘(即U盾)作为一个备份的载体。
SSL介绍
SSL (Secure Socket Layer)   为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。目前一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.或Netscape浏览器即可支持SSL。   当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。   SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL协议提供的服务主要有哪些?
1)认证用户和服务器,确保数据发送到正确的客户机和服务器   2)加密数据以防止数据中途被窃取   3)维护数据的完整性,确保数据在传输过程中不被改变。
SSL协议的工作流程
服务器认证阶段:1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;2)服务器根据客户的信息确定是否需要生成新的主密钥, 如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
用户认证阶段
在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。   从SSL 协议所提供的服务及其工作流程可以看出,SSL协议运行的基础是商家对消费者信息保密的承诺,这就有利于商家而不利于消费者。在电子商务初级阶段,由于运作电子商务的企业大多是信誉较高的大公司,因此这问题还没有充分暴露出来。但随着电子商务的发展,各中小型公司也参与进来,这样在电子支付过程中的单一认证问题就越来越突出。虽然在SSL3.0中通过数字签名和数字证书可实现浏览器和Web服务器双方的身份验证,但是SSL协议仍存在一些问题,比如,只能提供交易中客户与服务器间的双方认证,在涉及多方的电子交易中,SSL协议并不能协调各方间的安全传输和信任关系。在这种情况下,Visa和MasterCard两大信用卡公组织制定了SET协议,为网上信用卡支付提供了全球性的标准。
SSL协议的握手过程
为了便于更好的认识和理解SSL 协议,这里着重介绍SSL 协议的握手协议。SSL 协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术。SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:   ①客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。   ②服务器向客户端传送SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。   ③客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。   ④用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。   ⑤如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。   ⑥如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性 验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密 码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。   ⑦服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于SSL 协议的安全数据通讯的加解密通讯。同时在SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。   ⑧客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。   ⑨服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。   ⑩SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。
证书各部分的含义
证书版本号,不同版本的证书格式不同   Serial Number 序列号,同一身份验证机构签发的证书序列号唯一   Algorithm Identifier 签名算法,包括必要的参数Issuer 身份验证机构的标识信息   Period of Validity 有效期   Subject 证书持有人的标识信息   Subject’s Public Key 证书持有人的公钥   Signature 身份验证机构对证书的签名   证书的格式 认证中心所发放的证书均遵循X.509 V3 标准,其基本格式如下:   证书版本号(Certificate Format Version)   含义:用来指定证书格式采用的X.509 版本号。   证书序列号(Certificate Serial Number)   含义:用来指定证书的唯一序列号,以标识CA 发出的所有公钥证书。   签名(Signature)算法标识(Algorithm Identifier)   含义:用来指定 CA 签发证书所用的签名算法。   签发此证书的 CA 名称(Issuer )   含义:用来指定签发证书的 CA 的X.500 唯一名称(DN,Distinguished Name)。   证书有效期(Validity Period)起始日期(notBefore) 终止日期(notAfter)   含义:用来指定证书起始日期和终止日期。   用户名称(Subject)   含义:用来指定证书用户的X.500 唯一名称(DN,Distinguished Name)。   用户公钥信息(Subject Public Key Information)算法(algorithm) 算法标识(Algorithm Identifier)用户公钥(subject Public Key)   含义:用来标识公钥使用的算法,并包含公钥本身。   证书扩充部分(扩展域)(Extensions)   含义:用来指定额外信息。    X.509 V3 证书的扩充部分(扩展域)及实现方法如下:   CA 的公钥标识(Authority Key Identifier)   公钥标识(SET 未使用)(Key Identifier)   签发证书者证书的签发者的甄别名(Certificate Issuer)   签发证书者证书的序列号(Certificate Serial Number)   X.509 V3 证书的扩充部分(扩展域)及实现CA 的公钥标识(Authority Key Identifier)   公钥标识(SET 未使用)(Key Identifier)   签发证书者证书的签发者的甄别名(Certificat签发证书者证书的序列号(Certificate Serial Number)   含义:CA 签名证书所用的密钥对的唯一标识用户的公钥标识(Subject Key Identifier)    含义:用来标识与证书中公钥相关的特定密钥进行解密。   证书中的公钥用途(Key Usage)   含义:用来指定公钥用途。   用户的私钥有效期(Private Key Usage Period)起始日期(Note Before) 终止日期(Note After)   含义:用来指定用户签名私钥的起始日期和终止日期。   CA 承认的证书政策列表(Certificate Policies)   含义:用来指定用户证书所适用的政策,证书政策可由对象标识符表示。   用户的代用名(Substitutional Name)   含义:用来指定用户的代用名。   CA 的代用名(Issuer Alt Name)   含义:用来指定 CA 的代用名。   基本制约(Basic Constraints)   含义:用来表明证书用户是最终用户还是CA。 在SET 系统中有一些私有扩充部分(扩展域)Hashed Root Key 含义:只在根证书中使用,用于证书更新时进行回溯。   证书类型(Certificate Type)   含义:用来区别不同的实体。该项是必选的。   商户数据(Merchant Data)   含义:包含支付网关需要的所有商户信息。   持卡人证书需求(Card Cert Required)   含义:显示支付网关是否支持与没有证书的持卡人进行交易。   SET 扩展(SETExtensions)   含义:列出支付网关支持的支付命令的 SET 信息扩展。   CRL 数据定义版本(Version)   含义:显示 CRL 的版本号。   CRL 的签发者(Issuer)   含义:指明签发 CRL 的CA 的甄别名。   CRL 发布时间(this Update)预计下一个 CRL 更新时间(Next Update)撤销证书信息目录(Revoked Certificates) CRL 扩展(CRL Extension)CA 的公钥标识(Authority Key Identifier)CRL 号(CRL Number)

127.0.0.0&localhost

localhost也叫local,正确的解释是,本地服务器。
127.0.0.1在windows等系统的正确解释是:本地地址(本机服务器)。
localhost(local)是不经网卡传输!这点很重要,它不受网络和网卡相关的限制。
127.0.0.1是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制。
一般设置程序时本地服务用localhost是最好的,localhost不会解析成IP,也不会占用网卡,网络资源。用时候用localhost可以,用127.0.0.1就不可以的情况就是于此。猜想localhost访问时,系统带的本机当前用户的权限去访问,而用IP去访问的时候等于是本地是通过网络再去访问本机,可能涉及到网络用户的权限。

Buffer和Cache的区别

Buffer和Cache的区别
缓存(cache)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。
缓存(cache)实际并不是缓冲文件的,而是缓冲块的,块是磁盘I/O操作的最小单元(在Linux中,它们通常是1KB)。这样,目录、超级块、其它文件系统的薄记数据以及非文件系统的磁盘数据都可以被缓冲了。
如果缓存有固定的大小,那么缓存太大了也不好,因为这会使得空闲的内存太小而导致进行交换操作(这同样是慢的)。为了最有效地使用实际内存,Linux自动地使用所有空闲的内存作为高速缓冲,当程序需要更多的内存时,它也会自动地减小缓冲的大小。
缓冲(buffer)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写磁盘),也可以通过sync命令手动清空缓冲。举个例子吧:我这里有一个ext2的U盘,我往里面cp一个3M的 MP3,但U盘的灯没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上几秒钟。
两者都是RAM中的数据。简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。
buffer是由各种进程分配的,由进程和系统一起管理.被用在如输入队列等方面,一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。
cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提供系统性能。
综上所述可以理解为cache系统管理,buffer由进程和系统一起管理。