【云计算学习教程】什么是中间件?常见中间件有哪些?

2023-05-16

文章目录

    • 中间件是什么
    • 为什么使用中间件
    • 主要中间件的分类
        • 1. Hadoop
        • 2. LVS
        • 3. Linux-HA
        • 4. 静态网站服务器
        • 5. 动态应用服务器
  • DNS、DHCP、Kerberos和Radius:云计算基础服务组件
        • 1. DNS
        • 2. DHCP
        • 3. Kerberos
        • 1)身份认证
        • 2)权限管理
        • 3)联邦和单点登录
        • 4)外围系统认证集成
        • 5)自适应风险评估
        • 4. Radius
  • 云计算管理工具简介
  • OpenStack是什么?
  • CloudStack(CloudPlatform)是什么?
  • 谈谈Eucalyptus云端管理工具
        • 1)云控制器(Cloud Controller,CLC)
        • 2)面向用户的服务(User-Facing Services,UFS)
        • 3)管理控制台
        • 4)对象存储网关(Object Storage Gateway,OSG)
        • 5)对象存储提供者(Object Storage Provider,OSP)
        • 6)集群控制器(Cluster Controller,CC)
        • 7)存储控制器(Storage Controller,SC)
        • 8)计算节点控制器(Node Controller,NC)
  • Oracle VM Manager简介

这一节我们主要来学习一下什么是中间件,为什么使用中间件和主要中间件的分类。

中间件是什么

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。

执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或 OS 环境。

中间件是介于操作系统和应用软件之间,为应用软件提供服务功能的软件,有消息中间件,交易中间件,应用服务器等。由于介于两种软件之间,所以,称为中间件。

为什么使用中间件

具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。

中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。

主要中间件的分类

1. Hadoop

当一个大的任务由一台机器在规定的时间内不能完成时,人们就要采用分布式计算,即很多台机器联合起来共同完成任务。换句话说,就是把大任务拆分成许多个小任务,然后再把这些小任务分配给多台计算机去完成。参与计算的多台计算机组成一个分布式系统,需要运行一系列的分布式基础算法。

Hadoop 就是一个分布式计算平台,用 Java 语言开发,包含 Common、MapReduce 和 HDFS 三个核心部件(HDFS 和 MapReduce 是最核心的两个部件)。其中:

  • Common 为 Hadoop 的其他项目提供了一些常用工具,主要包括系统配置工具 Configuration、远程过程调用 RPC、序列化机制和 Hadoop 抽象文件系统等。
  • MapReduce 是处理海量数据的计算模型。
  • 而 HDFS 用于存储海量数据,它具备高度容错性,能在低成本的通用硬件机器上稳定运行。

Hadoop 实现了分布式计算中的基础算法(如一致算法、选举算法、故障检测、快照等),同时为用户提供了编程和命令接口。程序员调用这些函数能轻松写出分布式应用程序,我们都知道,如果一切从头开始,要完成一个分布式程序的编写是异常艰难的。

Hadoop 在海量非结构化数据处理方面能充分展示它的优势,如消费者购买行为分析、商品推荐、关键词检索、信贷风险评估等。

如图 1 所示,Hadoop 其实就是一个分布式计算平台,它“覆盖”在操作系统之上,向上提供函数调用(API)和命令接口,在水平方向完成分布式系统的基础算法。作为编程人员和用户,只要了解 API 和命令即可。

Hadoop
图 1 Hadoop

基于 Hadoop 平台衍生出来的开源项目主要有 Yarn、HBase、Hive、ZooKeeper、Avro、Sqoop、Mahout、Crossbow 等。

以 Hadoop 为基础的生态目前已经成为大数据的标准方案,被广泛用于金融、市场、电信、交通等行业的海量数据分析,在即将到来的大数据时代,它将会发挥更大的作用。

在中国,很多行业(如银行、电信、移动、电力、石油、交通等)沉淀了大量的业务数据,对这些海量数据进行挖掘和分析,将会带来巨大的价值。

用 Hadoop 构建的应用实例对于计算资源的消耗具备两个明显的特征:

  • 资源需求大:表明 Hadoop 需要大量的存储、计算和网络带宽。
  • 资源需求具备季节性:表明除存储需求是经常性占用外,在运行 Mapreduce 时才需要大量的计算和网络资源,而分析大量数据的工作并不是经常性的——称为季节性

因此,云计算是大数据天生的计算资源供应途径,云计算的资源弹性很好地满足了大数据的季节性计算资源需求。也就是说,大数据是云计算经典的应用案例。当然,也可以按照大数据对计算资源的波峰需求静态配给计算资源,但是这种方案会造成资源的巨大浪费。

2. LVS

LVS 是 Linux Virtual Server 的首字母缩写,意为 Linux 虚拟服务器,即把许多台物理 Linux 计算机逻辑上整合成一台超级计算机,对用户来说感觉只有一台计算能力很强的服务器,如图 2 所示。

LVS 就是一个由软件实现的负载均衡器,工作在网络 OSI 的第四层(应用层),是中国人章嵩开发的,代码已经并入了 Linux 内核。利用它,再加上一台廉价的计算机,就能构建一台企业级的负载均衡器。而那些外国大公司的负载均衡器,售价都要十几万元,甚至几十万元,便宜的也要几万元,LVS 出来后,这些产品都不得不降价。

负载均衡器的作用就是把任务分配给最合适的服务器。比如一个大型购物网店,有 100 台同样配置的服务器在运行,如果某一时刻有 10 万用户在线购物,那么通过负载均衡器,每台服务器差不多承担 1000 个在线购物用户。

LVS 的官网网站是 http://www.linuxvirtualserver.org。另外,两个较为流行的第七层负载均衡器是 Nginx 和 HAProxy,针对应用做均衡,所以能适应的负载种类没有 LVS 多。

LVS原理图
图 2 LVS原理图

3. Linux-HA

也许有读者会问:“负载均衡器本身故障怎么办?”是的,如果负载均衡器出现故障,那么整个系统(如网店)将会瘫痪。所以人们开发了各种集群软件,如 Linux-HA 和 Keepalive 等,而微软干脆就在 Windows 服务器版中集成故障转移集群软件。

集成故障转移集群软件的核心思想是,实时检测故障机器并及时让好的机器接管工作,对外提供高可用性。Linux-HA 意为 Linux 高可用性项目,此项目具体包含如下几个组件。

名称作用
Heartbeat负责维护集群中各节点的信息及它们之间的心跳通信。
Pacemaker集群资源管理器,是核心组件,客户端通过 Pacemaker 来配置、管理并监控整个集群。此组件的社区网站为 http://clusterlabs.org/。OpenStack 高可用性部署实例中一般都采用 Pacemaker 和 HAProxy。
Resource Agent为用于控制服务启停、监控服务状态的脚本集合,本地资源管理器(LRM)调用这些脚本来启动、停止、监控各种集群资源。
Cluster Glue包含一套函数库和工具,在集群栈中,除集群消息传输(由 Heartbeat 承担)、集群资源管理(由 Pacemaker 承担)和资源代理(由 Resource Agent 承担)功能外,其他功能都由 Cluster Glue 来完成。它包含的两个主要部分是 LRM 和 Stonith,前者是本地资源管理器,后者的任务是隔离故障机器。

通过心跳信号(Heartbeat)检测故障,一台好的计算机会不断向其他计算机发送心跳信号,也会接收其他计算机发送过来的心跳信息。当在规定的时间内没有收到对方计算机的心跳信号时,就启动应急预案,进一步确认故障并准备接管那台计算机的任务。

例如,我们采用两台 LVS 计算机,并分别安装和配置 Linux-HA,一台 LVS 计算机作为工作机,另一台作为备份机,两台 LVS 计算机互相监督对方的运行状态。当工作机故障时,备份机接管负载均衡任务并报警。相反,当备份机出故障时,只报警,提醒技术员维修备份机。

两台LVS计算机同时出故障是比较糟糕的情况,不过这种情况发生的概率很小,除非机房断电或者遭到雷击。对于一些非常关键的应用,可以增加参与负载均衡的服务器数量来提高可靠性,如民航飞机上采用 5 台服务器。

4. 静态网站服务器

我们浏览一家公司的网站时,很可能就是跟那家公司服务器上的 Apache 程序打交道,网页浏览器与 Apache 成了标准的 C/S 模式,浏览器是客户端,而 Apache 是服务端。Apache 首先把主页对应的文件 index.html 发给我们,我们看到主页内容后,点击主页上的某个链接,它又把该链接对应的文件发给我们,过程如图 3 所示。

访问静态网页的过程
图 3 访问静态网页的过程

配合 PHP 引擎,Apache 也支持 PHP 动态网页。过程为:

1)当 Apache 收到用户要浏览的 PHP 文件后,把这个 PHP 文件发给 PHP 执行引擎。

2)PHP 执行引擎执行该 PHP 文件,产生一个临时的静态网页文件并发回给 Apache。

3)最后 Apache 把这个临时的静态网页文件发给用户。

采用 Perl、Python 和 Ruby 脚本语言编写的动态网页,其工作过程与 PHP 类似。

Apache 是最流行的开源网站服务器,在世界排名前 100 万的网站中,有 60.6% 的网站采用 Apache;在排名前 1000 的大型网站中,Apache 占到了 34.5%,而 Ngnix 占到了 34.9%,略胜于 Apache。

5. 动态应用服务器

开源的动态应用服务器有 JBoss、Tomcat、Geronimo、JOnAS,关于这些项目更详细的介绍,请参考相应的官方网站。

DNS、DHCP、Kerberos和Radius:云计算基础服务组件

基础服务组件包括 DNS、DHCP、用户管理、身份鉴别、权限管理、事后审计、域控等。

1. DNS

DNS 是一个倒树形结构的分布式数据库,里面存储的信息主要有 IP 地址到域名的映射记录、域名到 IP 地址的映射记录、邮件路由记录等。Bind 就是用于实现这个数据库并且允许人们通过域名查询 IP、通过 IP 查询域名或者查询邮件服务器的信息等,我们在配置计算机网卡参数时要指定多个 DNS 服务器 IP 地址。

在中国,这些 DNS 服务器大部分都在电信机房,如果不设置或者 IP 地址设置错误,则计算机无法上网。不过,建议大家使用谷歌提供的 DNS 服务器,IP 地址是 8.8.8.8 和 8.8.4.4,速度快又方便记忆。

BIND(Berkeley Internet Name Domain)是一款开源的 DNS 服务器软件,是目前互联网上使用最广泛的 DNS 服务器软件,能在各种流行的操作系统上运行。现由互联网系统协会负责开发与维护,可从该组织的官方网站 http://www.isc.org/ 下载源代码,然后编译安装,目前稳定版本是 9.11.0。

2. DHCP

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)允许一台计算机通过 DHCP 服务器自动获取网络配置参数,如网卡的 IP 地址、网关、掩码和主机名字等,这样只要启动计算机就能上网,而不用手工去配置计算机的网络参数。

DHCP 服务器的第二个功能是定义一些与自动安装操作系统有关的参数,比如一台计算机设置从网卡启动,只要 DHCP 服务器配置了 PXE 启动有关的参数,那么用户的计算机就能自动根据配置参数来启动或者安装操作系统,而不管原来有没有安装操作系统。这一点在可伸缩云端和零存储云终端的环境下非常有用,服务器随时加入随时启用,云终端启动就自动下载统一的操作系统内核并运行统一的登录程序。

dhcp3-server 和 isc-dhcp-server 都是目前比较流行的开源 DHCP 软件项目,前者已经被广泛使用;后者发展迅速,操作系统 Ubuntu12.04 版本开始使用它了。isc-dhcp-server 也是由互联网系统协会负责开发与维护的,可从该组织的官方网站 http://www.isc.org/ 下载源代码,然后编译安装,目前稳定版本是 4.3.5。

3. Kerberos

Kerberos 这一名词来源于希腊神话“三个头的狗——地狱之门守护者”。但在 IT 领域,Kerberos 是指一种计算机网络上的身份认证协议,主要用来在非安全的计算机网络中,对个人通信以安全的手段进行身份认证。

Kerberos 又指麻省理工学院为这个协议开发的一套计算机软件(参见官方网站 http://web.mit.edu/kerberos/),软件设计上采用客户机/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证,可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥机制进行密钥管理的系统。Kerberos 的扩展产品也使用公开密钥加密方法进行认证。

当有 N 个人使用该系统时,为确保在任意两个人之间进行秘密对话,系统至少保存有其与每个人的共享密钥,所需的最少会话密钥数为 N 个。Kerberos 身份认证流程如图 1 所示。

如果想进一步了解 Kerberos 的原理,请在网上搜索“Kerberos 原理对话”,其以四幕话剧的形式来阐述 Kerberos 的原理,非常经典。

Kerberos 可用来部署单点登录环境——只要记住一个密码就能登录到任何一个应用,类似购买景点通票。微软的 AD 域就采用了 Kerberos。另外,图 2 所示是笔者为国内一家大型企业部署的单点登录草图,实现了企业内部上千台 Linux 服务器的单点登录。

 Kerberos 身份认证流程
图 1 Kerberos 身份认证流程

某大型企业部署的单点登录草图
图 2 某大型企业部署的单点登录草图

另一套采用 Kerberos 实现身份认证和权限管理的开源软件是 OpenAM/OpenDJ/OpenIDM,由 ForgeRock 公司开发和维护,可从其官方网站 https://forgerock.org/downloads/ 下载软件源代码。

OpenAM 提供集中认证、授权、单点登录,以及与其他单位建立联邦治理的全面解决方案,它是完全开源的,其前身是 Sun 公司的 OpenSSO。OpenAM 具有高度可扩展的、模块化的、易于部署的架构,具体包括如下内容。

1)身份认证

允许通过使用者的周边信息实现动态的身份识别,使用者的周边信息包括地理位置、时区、IP地址、接入设备、一天的特定时点等,当然也支持密码认证。身份认证模块相当于门卫,控制哪些人可以进入,哪些人不可以进入,至于进去后能做什么事情,它不会加以限制。

2)权限管理

根据事先定义好的权限和策略方案来控制用户登录后的行为,即允许他能做什么,不能做什么。

3)联邦和单点登录

每个用户只需一个账户和密码,就可以访问众多的应用系统和网络资源。想必大多数人都有过这样的痛苦经历:要记住众多的用户名和密码,以便访问许多系统,如邮件系统、工作网站、论坛、微博等,单点登录彻底解决了这个问题。

4)外围系统认证集成

允许集成认证目前流行的社交网站,如推特、脸谱、微博等。

5)自适应风险评估

根据登录用户的操作行为来评估其动机,如果怀疑其动机不纯,那么自动提升身份级别鉴别,要求提供额外的身份信息,以便进一步确认其真实身份。

OpenDJ 是一款遵循 LDAPv3 协议的目录服务器,采用 Java 语言开发,完全开源。它的前身是太阳微系统公司的 OpenDS 项目,现在由 ForgeRock 公司接手。用 OpenDJ 可以搭建高性能、高可用性和高安全性的企业级目录服务系统,处理上千万条数据记录,响应时间均在毫秒级以内。

OpenDJ 允许多主/复制部署(Multi-Master),数据可以集中式存储,也可分布式存放,这一点要优于另一个目录服务开源项目——OpenLDAP。另外,OpenDJ 消耗很少的计算机资源(CPU、内存等),由于是纯 Java 开发,所以 OpenDJ 可以在任何平台上运行。

利用 OpenIDM,企业可以轻松集中管理用户信息,包括用户账号和权限管理,适合在企业级、云端和移动社交网络使用。

另外,耶鲁大学开发的 CAS 项目也是非常有名的认证系统,官方网站为 https://www.apereo.org/projects/cas/。

4. Radius

Radius 是指局域网接入认证,用于解决一台计算机需要认证才能接入和使用局域网的问题。比如一个公司外的人带了笔记本电脑进来,他找到一根网线插入笔记本电脑,如果他能使用公司内部的局域网(不管是自动分配 IP 还是手工配置网卡参数),那么这时公司内部的很多资源就面临危险,因为一个恶意的人就可以做网络窥探、运行额外的 DHCP 使网络紊乱、广播病毒、端口扫描、消耗网络带宽等。

有了局域网接入认证系统后,只有合法的设备(通常捆绑了网卡的 Mac 地址)才能接入局域网,没有事先登记的设备被拒绝接入,即使配好了网卡参数。

FreeRadius 是一款开源的实现局域网接入认证的软件,可从网站 http://freeradius.org/ 下载源代码,目前稳定的版本是 3.0.12。具体的认证示意图如图 3 所示。

FreeRadius认证过程
图 3 FreeRadius 认证过程

云计算管理工具简介

首先我们看看一个基于虚拟机的 IaaS 云端的形成过程。

虚拟机要运行在虚拟机软件里,而虚拟机软件运行在物理机上。一台物理机通过虚拟机软件可以虚拟出多个虚拟机,虚拟机里再安装 Windows 或者 Linux 操作系统及各种应用软件,然后用户通过远程桌面等方式连接到虚拟机并使用虚拟机中的应用软件。如果一个云中心只有一台物理机,那么只要一个虚拟机软件即可,到此一个最小的准云端就创建完成了。

接下来继续增加物理机,每台物理机上运行多个虚拟机,这样云端虚拟机的数量就增加了很多。但是问题来了,如何避免因为一些物理机故障导致部分云终端用户不能使用虚拟机?为了解决这个问题,人们引入了集群技术,允许虚拟机在集群中的任何一台机器上运行,这样故障机器上的虚拟机就能“漂移”到其他机器上并继续运行。

但这样又产生了一个新的问题,那就是如何保存虚拟机本身(虚拟机就是对应宿主机上的若干文件)才能确保“漂移”动作既快速又正确地完成呢?对此,人们又引入了中央存储技术,即把全部的虚拟机镜像文件保存在中央存储设备上,让集群里的物理机都能共享访问。这样,一个由多台物理机组成集群、由多个集群组成的云端雏形就形成了。

然后我们又会自然而然地想到其他问题:

如何管理云端众多的虚拟机?

于是人们开发了云端管理工具,采用此工具可以很轻松地创建、删除、迁移、启动、关闭、冻结和备份虚拟机。

如何给多台虚拟机组建网络?

为此,人们又发明了虚拟网卡、虚拟交换机、网络功能虚拟化和软件定义网络技术。

云端最核心的部分就是虚拟化软件、中央存储设备和虚拟机管理工具(有的人喜欢称云管理平台,甚至直接称云计算操作系统)。称其为“云计算操作系统”是有一定道理的,与计算机操作系统(如 Windows、Linux 等)类似,计算机操作系统的核心功能是管理进程,只有进程才能申请资源(CPU、内存、打印机等);而在云端,虚拟机是申请资源(计算、存储、网络等)的基本主体,管理虚拟机是云计算操作系统最核心的功能。但是云计算操作系统远没有计算机操作系统那么复杂,称其为操作系统有点夸大其词。

云管理工具分为 IaaS、PaaS 和 SaaS 3 种类别,SaaS 类别的云管理工具与网店差不多,主要是租户注册、自助、购买、结算等,与业务关联性大,所以目前没有统一的标准版产品。比如,针对一款大型可靠性软件系统的云化项目,SaaS 云管理软件包含两大部分:一是 SaaS 业务门户,二是 SaaS 管理门户,其结构分别如图 1 和图 2 所示。

SaaS业务门户组成
图 1 SaaS 业务门户组成

SaaS管理门户组成
图 2 SaaS 管理门户组成

尽管框架类似,但由于 SaaS 云计算与具体的应用软件紧密相关,所以截至目前,还没有出现通用的开源或者商业化的 SaaS 云计算管理工具。目前的 SaaS 云计算提供商都是自己开发自己使用。

PaaS 管理工具有红帽公司的 Openshift 和 Cloud Foundry 社区的 CloudFoundry,两者都是开源的,在 https://financesonline.com/ 网站上,Openshift 的得分要高于 CloudFoundry。

下面我们分四节介绍一下常用的云计算管理工具:

  • OpenStack是什么?
  • CloudStack(CloudPlatform)是什么?
  • 谈谈Eucalyptus云端管理工具
  • Oracle VM Manager简介

OpenStack是什么?

OpenStack 是当今最具影响力的云计算管理工具——通过命令或者基于 Web 的可视化控制面板来管理 IaaS 云端的资源池(服务器、存储和网络)。它最先由美国国家航空航天局(NASA)和 Rackspace 在 2010 年合作研发,现在参与的人员和组织汇集了来自 100 多个国家的超过 9500 名的个人和 850 多个世界上赫赫有名的企业,如 NASA、谷歌、惠普、Intel、IBM、微软等。

OpenStack 系统或其演变版本目前被广泛应用在各行各业,包括自建私有云、公共云、租赁私有云及公私混合云,用户包括思科、贝宝(Paypal)、英特尔、IBM、99Cloud、希捷等,具体名请参考网站 http://www.openstack.org/user-stories。

OpenStack 支持 KVM、Xen、Lvc、Docker 等虚拟机软件或容器,默认为 KVM。通过安装驱动,也支持 Hyper-V 和 VMware ESXi,不过有些功能暂时不支持,具体的虚拟机管理器支持矩阵参见网站 http://docs.openstack.org/developer/nova/support-matrix.html。

OpenStack 采用 Python 语言开发,遵循 Apache 开源协议,因此相比 CloudStack 来说,更轻量化,效率更高。

OpenStack 每半年发行一个新版本,截至发稿前最新版本是第十四版本 Newton,不同于其他软件的版本号采用数字编码,OpenStack 采用一个单词来描述不同的版本,其中单词首字母指明版本的新旧。比如目前的版本 Newton 就比之前的 Mitaka 要新,同时“N”在 26 个字母中排行第十四,所以称第十四版本。各个版本的发行时间表参考网站 https://releases.openstack.org/。

围绕 OpenStack 发展起来的企业很多,为客户提供 OpenStack 实施、培训、运维、定制等业务,之前企业总是或多或少地加入自己的一些封闭技术,从而导致 OpenStack 的互操作性受损。为此,2015 年 OpenStack 基金会在温哥华峰会上正式推出互操作性认证,通过认证的产品被贴上“OpenStack Powered”标识。

虽然第一批只有 14 家厂商经过认证测试,但这却是一个重要的里程碑事件,基金会已经拿出足够的诚意来解决问题,并且众多厂商也开始真正跟进。对用户而言,选择经过认证的云服务提供商,能够实现在不同 OpenStack 云计算之间的自由迁移。

OpenStack 生态系统已从“孵化/集成”模式转移到“大帐篷”模式,在此模式下,既保持了对规模较小的核心项目的关注,也积极鼓励在更广泛的主流生态环境中的自由创新,而以前的“孵化/集成”模式只是把孵化成功的项目集成到主流生态中。

“大帐篷”模式把 OpenStack 的组件进行分类,目前包括 6 个核心组件(Nova、Neutron、Swift、Cinder、Keystone、Glance)和 14 个可选组件,每个组件包含若干个服务,后续版本中组件分类及数量都可能会发生变化,如图 1 所示。

 “大帐篷”模式下的组件
图 1 “大帐篷”模式下的组件

表 1 列出了 Newton 版本中各个组件的功能介绍。

分类组件名称功能
核心组件Nova管理虚拟机的整个生命周期:创建、运行、挂起、调度、关闭、销毁等。这是真正的执行部件。接受 DashBoard 发來的命令并完成具体的动作。但是 Nova 不是虛拟机软件,所以还需要虚拟机软件(如 KVM、Xen、Hyper-v 等)配合
Neutron管理网络资源,提供/一组应用编程接口(API),用户可以调用它们来定义网络(如 VLAN ),并把定义好的网络附加给租户。Networking 是一个插件式结构,支持当前主流的网络设备和最新网铬技术
Swift是 NoSQL 数据库,类似 HBase,为虚拟机提供非结构化数据存储,它把相同的数据存储在多台计箅机上,以确保数据不会丢失。用户可通过 RESTful 和 HTTP 类型的 API 来和它通信。这是实际的存储项目,类似 Ceph,不过在 OpcnStack 具体实施时,人们更愿意采用 Ceph。
Cinder管理块设备,为虚拟机管理 SAN 设备源。但是它本身不是块设备源, 需要一个存储后端来提供实际的块设备源(如 iSCSI、FC等)。Cinder 相当于一个管家,当虚拟机需要块设备时,询问管家去哪里获取具体的块设备。它也是插件式的,安装在具体的 SAN 设备里。Cinder 支持的存储后端品牌参见 https://wiki.openstack.org/wiki/CinderSupportMatrix,驱动参见 https://github.com/openstack/cinder/tree/master/cinder/volume/drivers。
Keystone为其他服务提供身份验证、权限管理、令牌管理及服务名册管理。要使用云计算的所有用户事先需要在 Keystone 中建立账号和密码,并定义权限(注意:这里的“用户”不是指虚拟机里的系统账户,如 Windows 7 中的 Administrator )。另外,OpenStack 服务(如 Nova、Neutron、Swift、Cinder 等)也要在里面注册,并且登记具体的 API,Keystone 本身也要注册和登记 API
Glance存取虚拟机磁盘镜像文件,Compute 服务在启动虚拟机时需要从这里获取镜像文件。这个组件不同于上面的 Swift 和 Cinder,这两者提供的 存储是在虚拟机里使用的
可选组件Horizon提供了一个网页界面,用户登录后可以做这些操作:管理虚拟机、配置权限、分配 IP 地址、创建租户和用户等。本质上就是通过图形化的 操作界面控制其他服务(如 Compute、Networking 等)。当然,如果你熟悉命令,也可以直接采用命令来完成相应的任务
Heat如果要在成千上万个虚拟机里安装和配置同一个软件,该怎么办?采用 Orchestrates 是一个不错的主意,它向每个虚拟机里注人一个名叫 heat-cfntools 的客户端工具,然后就能同时操作很多虚拟机
Sahana使用户能够在 OpenStack 平台上(利用虚拟机)一键式创建和管理 Hadoop 集群,实现类似 AWS 的 EMR(Amazon Elastic MapReduce Service)功能。用户只需要提供简单的配置参数和模板,如版本信息(CDH 版本)、集群拓扑(几个 Slave、几个 Datanode)、节点配置信息(CPU、内存)等,Sahara 服务就能够在几分钟内根据提供的模板快速 部署 Hadoop、Spark 及 Storm 集群。Sahana 是一个大数据分析项目
Ironic把裸金属机器(与虚拟机相对)加人到资源池中
ZaqarZaqar 为 Web 和移动开发者提供多租户云消息和通知服务,开发人员可以通过 REST API 在其云应用的不同组件中通过不同的通信模式(如 生产者/消费者或发布者/订阅者)来传递消息
Ceilometer结合 Aodh、CloudKitty 两个组件,完成计费任务,如结算、消耗的 资源统计、性能监控等。OpenStack 之所以能管理公共云,一是因为 Ceilometer 的存在,二是因为引人了租户的概念
Barbican是 OpenStack 的密钥管理组件,其他组件可以调用 Barbican 对外暴露的 REST API 来存储和访问密钥
Manila为虚拟机提供文件共享服务,不过需要存储后端的配合
其他组件:Congress(策略服务)、Designate(DNS 服务)、Freezer(备份及还原服务)、Magnum(容器支持)、Mistral(工作流服务)、Monasca(监控服务)、Searchlight(索引和搜索)、Senlin(集群服务)、Solum(APP集成开发平台)、Tacker(网络功能 虚拟化)、Trove(数据库服务)

各个组件的关系图如图 2 所示。

OpenStack组件关系图
图 2 OpenStack 组件关系图

OpenStack 的组件众多,根据云端的实施过程,再结合图 2,我们来梳理一下各个组件的作用:云端要运行很多虚拟机,所以需要在很多服务器中安装并运行虚拟机软件(如 KVM、Xen 等),有的客户为了安全起见,愿意出高价直接租赁物理机(裸金属机器),所以要用 Ironic 组件来池化物理机,以便用户能远程使用。

这些运行了虚拟机软件的服务器和被池化的物理机统称为计算节点。为了让 Horizon 组件以可视化的 Web 页面来统一操纵计算节点上的虚拟机,需要在计算节点上安装 Nova 组件,Nova 组件还与其他组件打交道。为了让一台虚拟机能在集群内的任一计算节点上快速漂移,虚拟机对应的镜像文件必须存放在共享场所,到底存放在哪里,由 Glance 组件指定。

例如在图 4 中,由 Glance 指定存放在 Swift 组件内,在实际的实施案例中,也可以存放在 Ceph 中。虚拟机之间需要联网,由 Neutron 组件负责。虚拟机里面可能还要使用块设备(如硬盘),这需要 Cinder 组件的配合;虚拟机里可能需要用到共享文件服务,由 Manila 组件提供服务。

云端的计算节点很多(如 1000 台),所以虚拟机就更多(如 10 万台),如果要给它们统一安装一个软件或配置某项参数,那么是不是需要手工一台一台操作呢?显然,手工操作费时费力,而且容易出错,有了 Heat 组件,我们就可以轻松完成这个任务。

OpenStack 的各个组件都是对外暴露 REST API 接口,以便于其他程序调用,调用时都要进行身份验证和权限管理,这由 Keystone 组件完成。跟踪用户消耗的资源并计费的任务由 Ceilometer 组件完成(需要 Aodh 和 CloudKitty 组件的配合)。

对于 OpenStack 管理的 IaaS 云服务,有人想在上面部署 Hadoop 大数据分析系统怎么办?这时 Sahala 组件可以帮上忙。各组件之间需要通过消息互相联络,所以 Zaqar 和 RabbitMQ 就派上用场了。另外,很多组件需要在数据库中保存配置数据,所以需要用到数据库管理系统(如 MySQL)。

OpenStack 组件的主要作用是充当“中间人”,它不履行具体的实际任务,而由各种第三方软件来完成,比如虚拟机软件由 KVM 承担,网站任务由 Apache 承担,虚拟网络任务由 iptables、DNSmasq、Linux vSwitch、Linux 网桥承担或者统一由 OpenContrail 承担,结构化数据存储任务由 MySQL 或者 PostgreSQL 承担,中央存储任务由 Ceph 承担(也可采用其他产品)。当然,OpenStack 中也有实现具体功能的组件,比如 Swift 做中央存储,我们也可以选择相对发展多年并且被大量使用的第三方产品,如 Ceph。

一个云端往往包含成千上万台服务器,而且还可能分布在世界各地,分别服务符合延时半径范围内的用户。OpenStack 中的“地区”(Region)就是对应地理位置不同的分中心,如中国北京、美国纽约、英国等。

在同一个 Region,还可能包含成千上万台机器,如果用一套 OpenStack 中的组件来管理,势必会导致这些组件本身成为瓶颈(随着集群规模的不断增大,消息系统和数据库系统很可能最先成为瓶颈),所以人们又引入了 Cell 功能,以便增强 OpenStack 集群的扩展性,即把一个 Region 划分成多个 Cell,这些 Cell 组成树形结构,父 Cell 主要用于服务通信,它不包含计算节点,子 Cell 具有自己的消息队列、数据库和 Noval-cell 服务。

Nova cell 在 OpenStack 的 Newton 版本中将成为默认项,之前的版本是可选项。在创建虚拟机时,为了规定它能在哪些计算节点集上运行,人们又提出了两个概念,即“可用域”(Availability Zones,AZ)和“主机集”(Host Aggregates,HA),前者可以看成后者的一个特例。

“主机集”其实就是根据计算节点的某些属性对计算节点进行逻辑分组的方法,比如可以分成如下几个“主机集”:万兆网卡的机器、拥有两路 CPU 的机器、惠普机器、自组装的机器、A 机柜里的机器、由 UPS 供电的机器等。然后我们创建一台虚拟机,指明在上海云端分部的惠普机器上运行,这样只要全部的惠普机器不同时坏,那么虚拟机就能一直正常运行(但每一时刻只能在一台机器上运行,只有当运行的那台机器出故障时,才会“漂移”到其他惠普机器上继续运行)。

“可用域”是用户可见的,用户把自己的多个虚拟机分散到不同的“可用域”中,是为了降低所有虚拟机同时不可用的概率,而“主机集”是管理员可见的,目的是用来隔离虚拟机,从而降低一些特定虚拟机的运行行为对其他虚拟机产生的影响。Region、Cell(第 2 版本)、AZ、HA 的关系如图 5 所示。

从图 3 中可以看出,多个 Region 允许共享 Keystone 和 Horizon 服务,也可以完全独立。HA 可以跨 Cell,但是不能跨越 Region,一台机器可以同时属于多个 HA,因为 AZ 是 HA 的特例,所以一台机器允许同时属于 AZ 和 HA。当一个创建虚拟机的请求到达父 Cell 的 Nova-API 时,父 Cell 会通过 Nova-cell 向各个子孙 Nova-cell 广播请求,并一次性决定在哪个子孙 Cell 中的哪台计算节点上创建虚拟机。

Region、Cell(第2版本)、AZ、HA的关系
图 3 Region、Cell(第2版本)、AZ、HA 的关系

在具体部署 OpenStack 时应该遵循“逐步扩展部署法”,如图 7 所示。

OpenStack逐步扩展部署法
图 7 OpenStack 逐步扩展部署法

最小系统具备基本的 IaaS 功能,能通过命令来进行管理,这一步只需安装 OpenStack 的 Keystone、Neutron、Nova 和 Glance 四个组件;此后再安装 Horizon 就成了小系统,这时可通过 Web 图形化界面来执行管理;继续安装 Swift 和 Cinder 就成了准系统,这时能给虚拟机附加磁盘块设备,并能满足大规模的存储需求;再加上计费组件 Ceilometer,就上升为一般系统,一般系统具备公有 IaaS 的功能。但是由一般系统跨到生产系统,需要完成的工作就特别多,其中性能和安全是两个不得不面对的棘手问题。

图 6 中标注的 Iptables(设立门卫)、Selinux 或 Apparmor(加固系统)和 Snort(巡逻)都是为了强化安全。性能和安全涉及的知识太多,这里不再展开讨论。图 7 取自网上,主要考量了安全当中的可用性,供大家参考。

CloudStack(CloudPlatform)是什么?

思杰(Citrix)收购 CloudStack 后让其开源,并捐献给 Apache 基金会(项目网站 http://cloudstack.apache.org/),让世界上许许多多的开源软件爱好者参与开发、测试和讨论。

当社区版趋于稳定时,思杰公司及时把它转化为服务收费版 CloudPlatform。2016 年 1 月思杰把 CloudPlatform 出售给了 Accelerite 公司,自己又重回 OpenStack 的怀抱,曾经离开时思杰痛陈 OpenStack 的数条罪状,至今让人记忆犹新。采用 CloudStack 或 CloudPlatform 管理的云端逻辑架构图如图 7 所示。

 OpenStack高可用性部署架构图
图 6 OpenStack高可用性部署架构图

CloudPlatform管理的云端逻辑架构图
图 7 CloudPlatform 管理的云端逻辑架构图

从图 7 可知,整个云端包含若干个 Region(地区,可以理解为地理位置上的一个城市、一个省份等),默认情况下只有一个 Region。每个 Region 包含多个 Zone(大致相当于数据中心,也允许一个实际的数据中心划分为多个 Zone),每个 Zone 又包含若干个 Pod(相当于机柜,一个 Pod 中的机器位于同一个子网中)和若干个二级存储,每个 Pod 又包含若干个 Cluster(集群),每个集群又包含若干台 Host(服务器)和若干主存储。

一个集群不能跨越多个 Pod。每个 Zone 的 Secondary Storage(二级存储)存放与该 Zone 相关的虚拟机模板、操作系统的 ISO 安装镜像文件和磁盘卷快照。

Cluster 中的 Primary Storage(主存储)存放虚拟机镜像文件,这些虚拟机可在集群中的任一台 Host 上运行,当一台 Host 发生故障时,其上的虚拟机将被转移到同一集群中的其他 Host 上,并一直保持运行状态,这叫作热迁移;相反,冷迁移要求先关闭虚拟机,然后再在其他计算机启动虚拟机,所以在冷迁移过程中,用户是无法使用虚拟机的。

CloudStack 或 CloudPlarform 安装在 Management Server(管理服务器)上,其能管理的虚拟机软件有:Xen、RedHat KVM、Citrix XenServer、VMware vSphere、Oracle VM(OVM)等,可以说绝大部分软件都支持。允许多台 Management Server 机器组成管理集群,当然也可以用一台,但是一台可靠性很差,会形成单点故障。

CloudStack 采用 Java 语言开发,采用 Tomcat 做应用服务器,采用 MySQL 开源数据库存储配置信息。CloudPlatform 自带了一个安装脚本,利用它安装云端管理工具比较方便,即通过“点菜(单)”方式。云计算管理工程师通过工作台式机或者笔记本、平板电脑使用网站浏览器打开管理服务器上的 Web 页面:http://<管理服务器IP地址>:8080/client,即可登录管理页面。

关于 Apache CloudStack 中各种概念更详细的介绍,请参见其官方网站 http://docs.cloudstack.apache.org/en/latest/concepts.html。

CloudPlatform 能管理私有云、公共云和公私混合云,在生产环境中,建议采用 CloudPlatform,而不要采用 CloudStack。

谈谈Eucalyptus云端管理工具

桉树(Eucalyptus)云管理工具被慧与公司收购后改名为 Helion Eucalyptus,其继续开源,不过在 OpenStack 的竞争下,桉树发展渐行渐远,昔日风光已不在。

桉树是一个基于 Linux 的模块化的软件架构,在企业现有的 IT 基础架构中部署可扩展的高效私有云或混合云,属于本地 IaaS 云。为了隔离不同用户的网络流量及允许多个集群同属于一个局域网,桉树提供了一种虚拟叠加网络技术。另外,桉树提供的 API 兼容亚马逊的 EC2、S3、IAM、ELB、EC2 资源自动伸缩和云监控服务,这些都便于人们使用桉树部署混合云。

桉树由若干个组件组成,这些组件之间的关系如图 8 所示。

桉树各个组件之间的关系
图 8 桉树各个组件之间的关系

1)云控制器(Cloud Controller,CLC)

在很多部署案例中,云控制器和面向用户的服务(UFS=User-Facing Services)一般安装在同一台服务器上,这台服务器也就成了管理员、开发员、项目经理和终端用户进入云端的入口点。CLC 处理具有持久性并且作为 UFS 的后端。桉树的一个部署实例只允许存在一个云控制器。

2)面向用户的服务(User-Facing Services,UFS)

桉树提供了很多兼容 AWS 的服务,如 EC2(计算)、AS(EC2资源自动伸缩)、CW(云监控)、ELB(负载均衡)、IAM 等,UFS 为这些服务提供了 API 调用接口。一个桉树部署实例允许存在多台 UFS 服务器。

3)管理控制台

是基于 Web 的可视化的管理桉树云的界面,直观、易用。管理控制台一般与 UFS 部署在同一台服务器上,一个桉树云实例允许存在多个管理控制台服务器。

4)对象存储网关(Object Storage Gateway,OSG)

一方面负责把用户的请求传递给对象存储提供者,另一方面和持久存储层(数据库)合作完成身份认证。

5)对象存储提供者(Object Storage Provider,OSP)

可以是桉树自带的 Walrus 组件,也可以是第三方的 Riak S2。Riak S2 兼容亚马逊 S3 和 OpenStack 的 Swift,能灵活扩展并存储数 P 级的数据,数据对象类型包括图片、文本、视频、文档、数据库备份以及二进制程序。

6)集群控制器(Cluster Controller,CC)

必须部署在能同时与计算节点控制器和云控制器联网的机器上,集群控制收集集群内计算节点的信息并把虚拟机调度到特定的计算节点上。集群控制器通过管理组网模式和非VLAN管理组网模式两种方式管理虚拟机的网络,这两种组网模式会使用户到虚拟机的网络流量都通过集群控制器,而边沿组网模式就不存在这个缺点。集群内的所有计算节点必须处于同一个网段。

7)存储控制器(Storage Controller,SC)

类似亚马逊的弹性块存储(EBS),SC 支持大多数的存储设备作为其存储后端,SC 暴露出的存储卷可以附加到虚拟机上,并且在虚拟机里面被当作原始块设备,用户可以分区和格式化这些原始块设备。

EBS 卷可以在 VM 终止后继续被保留,因此通常用于存储持久数据。在同一时刻,一个 EBS 卷只能附加到一台虚拟机,而且只能用于虚拟机所在的那个 Zone。对此,用户可以对 EBS 创建快照,对象存储网关把快照存储到指定的地方,并且其他的可用 Zone 都能使用这些快照。在桉树云中,支持使用企业级的 SAN 存储设备作为 SC 的存储后端。

8)计算节点控制器(Node Controller,NC)

安装并运行在虚拟机的宿主机上。NC 控制虚拟机的活动(包括虚拟机的运行、检查和终止),获取并维护本地缓存中的虚拟机镜像,同时轮询和控制宿主机的系统软件(操作系统和虚拟机软件),以便响应集群控制器的请求。NC 通过边沿组网模式管理虚拟机的网络。

Oracle VM Manager简介

在 IT 行业,Oracle 公司具有举足轻重的地位,Oracle 公司发行的虚拟化管理工具 Oracle VM Manager,采用 Java 语言开发,图 9 所示是 Oracle 公司官方给出的虚拟环境架构图。严格意义上讲,Oracle VM Manager 只是虚拟机管理工具,而不是云管理工具。

Oracle VM Manager虚拟环境架构图
图 9 Oracle VM Manager虚拟环境架构图

从图 9 可以看出,云端由若干服务器池和一个外部存储组成,每个服务器池包含若干台服务器(称为计算节点)。服务器池可以是集群,也可以不是集群。

服务器池中的计算节点上安装 Oracle VM Server 虚拟软件(基于 Xen 虚拟化技术),然后运行若干个 dom。其中 dom0 为管理 dom,里面安装和运行 Oracle VM Agent,dom0 有权限访问硬件和驱动,并且负责与 OracleVM 管理器通信。其他 dom 统称为 domU,为用户使用的普通虚拟机,由 dom0 启动并管理。

客户端“自定义的应用程序”是指 Oracle Enterprise Manager 或者采用 Web Service API 编写的应用程序或脚本。

基于 Oracle VM Manager 的云计算解决方案中,支持虚拟机热迁移——在不关闭虚拟机的情况下,从一台服务器移动到同一个服务器池中的另一台服务器上继续运行。在迁移的过程中,虚拟机的状态为 Migrating(迁移)。


转载于:http://c.biancheng.net/cloud_computing/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【云计算学习教程】什么是中间件?常见中间件有哪些? 的相关文章

  • Jar包详解

    jar包的一些事儿 关于 JAR 包我们应该知道的s
  • astra 深度相机 + orbslam2 ~ 稠密建图

    在ROS下运行ORB SLAM2 主要包括以下几步 xff1a 一 创建ROS工作空间 二 下载usb cam xff08 单目相机驱动包 xff09 三 下载深度相机驱动包 四 下载ORB SLAM2稠密建图代码 五 运行 一 创建ROS
  • Java字符串的处理

    文章目录 本章学习要点 Java定义字符串 xff08 2种方式 xff09 直接定义字符串例 1 使用 String 类定义1 String 2 String String original 3 String char value 4 S
  • Java数字和日期处理:Java数字处理和日期类

    文章目录 本章学习要点 Java Math类的常用方法静态常量例 1 求最大值 最小值和绝对值例 2 求整运算例 3 三角函数运算例 4 指数运算例 5 Java生成随机数 xff08 random 和Random类 xff09 例 1例
  • Java内置的包装类

    文章目录 本章学习要点 Java包装类 装箱和拆箱装箱和拆箱包装类的应用1 实现 int 和 Integer 的相互转换2 将字符串转换为数值类型3 将整数转换为字符串 Java Object类详解toString 方法equals 方法例
  • Java输入/输出(I/O)流

    文章目录 本章学习要点 Java流是什么 xff1f 输入 输出流又是什么 xff1f 什么是输入 输出流输入流输出流 Java系统流例 1 Java字符编码介绍Java File类 xff08 文件操作类 xff09 详解获取文件属性例
  • Java异常处理

    文章目录 本章学习要点 Java异常 xff08 Exception xff09 处理及常见异常异常简介例 1 异常类型 Java中Error和Exception的异同例 1 Java异常处理机制及异常处理的基本结构Java try cat
  • Java注解

    文章目录 本章学习要点 Java注解 xff08 Annotation xff09 简介Java 64 Override注解Java 64 Deprecated注解Java 64 SuppressWarnings xff1a 抑制编译器警告
  • 如何夸人?

    文章目录 夸人要怎么夸到心坎上 xff1f 01 有理有据 xff0c 细节见诚意02 一如既往保持信任与支持03 由表及里 xff0c 夸TA前先夸自己04 先抑后扬 xff0c 对比式夸奖05 创造条件引导TA自夸 如何做一只舔狗 xf
  • Java继承和多态

    文章目录 本章学习要点 Java类的封装例 1 Java封装图书信息类Java继承 xff08 extends xff09 简明教程例 1 单继承继承的优缺点 Java super关键字详解super调用父类构造方法例1例2 super访问
  • java中接口(interface)详解

    分享记录一下java接口的博客 xff1a java中接口 xff08 interface xff09 详解 JAVA基础 接口 xff08 全网最详细教程 xff09
  • java引用详解

    文章目录 一 关于对象与引用之间的一些基本概念 new Vehicle Vehicle veh1二 Java对象及引用三 只有理解了对象和引用的关系 xff0c 才能理解参数传递总结 xff1a 什么是值传递 xff0c 什么是引用传递 为
  • python学习-def __init__(self)理解(1)

    python中 init 的作用 在python中创建类后 xff0c 通常会创建一个 init 方法 xff0c 这个方法会在创建类的实例的时候自动执行 实例1 实例化Bob这个对象的时候 xff0c init 方法会自动执行 xff1a
  • 学完java基础语法之后用来练习的不依赖框架的小项目

    刚学完一门语言基础语法之后 xff0c 一般都需要写一些小项目来检验我们的学习效果 xff0c 将所学的基础语法串联起来 xff0c 同时也熟悉一下用这门语言做项目的大概流程 但是此时学习的项目不能太复杂 xff0c 因此此时才刚学完基础语
  • java集合中接口和类的理

    一 背景 首先我们可以先了解一下类和接口的基础和使用方法 xff1a Java类和对象 java中接口 xff08 interface xff09 详解 Java继承和多态 然后再对java集合的基础了解一下 Java集合 泛型和枚举 有了
  • java多线程详解

    文章目录 多线程基础进程进程 vs 线程多线程 创建新线程线程的优先级练习小结 线程的状态小结 中断线程小结 守护线程练习小结 线程同步不需要synchronized的操作小结 同步方法小结 死锁死锁练习小结 转载于 xff1a https
  • Java项目管理工具Maven使用方法详解

    这边直接推荐两个比较好的教程 xff1a https www liaoxuefeng com wiki 1252599548343744 1309301178105890 http c biancheng net maven2 depend
  • maven引入依赖包,import依赖包,编译运行maven项目

    文章目录 IDEA中新建一个maven项目在pom xml中添加依赖包 xff0c 确定依赖包成功导入 xff0c 在项目中import依赖包怎么确定maven成功的导入了依赖包在项目中import导入的依赖包总结 在看这篇博客之前 xff
  • 怎样做一个好的PPT演讲

    文章目录 一 做好PPT演讲的重要性二 怎么做好PPT演讲1 做一个好的PPT2 做好演讲 三 分析一些比较好的PPT演讲视频四 实例解析和总结 一 做好PPT演讲的重要性 不管是在学生时期的竞赛展示 xff0c 毕业答辩 xff0c 我们
  • PPT怎么画出好看的三维示意图

    一 前言 之前一些博客已经大致讲了PPT怎么画图的 xff1a PPT画图文章总结 怎样做一个好的PPT演讲 其实对于我们平常在PPT中会出现的图片 xff0c 可以简单的分为二维示意图和三维示意图 xff0c 二维示意图制作起来相对简单

随机推荐