【OpenStack概述】

OpenStack概述

一、何为云计算?

1.云计算总的来说可以分为三个阶段

①.物理机架构:应用的部署基于物理机上运行,例如企业需要三台web服务器或者数据库服务器那么则购买三台服务器自己部署架构,缺点硬件利用率低、业务弹性伸缩较差、后期部署运维困难。

②.虚拟化架构:在前者的物理机基础上采取虚拟化技术,将一台物理机逻辑上虚拟化成若干台虚拟机,这样不仅大大提高了运维成本和工作量,应用服务可以直接部署到虚拟机上,服务器业务伸缩也更为方便.

③.云计算架构:基于上面的两层推出了云计算架构,前面有了"物理机架构"、“虚拟化架构”,此时IT设备数量急剧增加,如何管理大规模的服务器集群和最大化、调度分配集群资源成为了最大的问题,这个时候云计算就登上了历史的舞台。

2.什么是云计算?

云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 通过互联网进入可配置的计算资源共享池(资源包括网络,计算,存储,应用软件,服务)

  • SaaS( Software as a Service): 软件即服务,把在线软件作为一种服务。
  • Paas( Platform as a Service): 平台即服务,把平台作为一种服务。
  • Iaas( Infrastructure as a Service):基础设施即服务,把硬件设备作为一种服务。

二、私有云架构(OpenStack)

在这里插入图片描述

  • 1.OpenStack架构简述:

①.OpenStack是由Rackspace和NASA牵头、多家互联网IT巨头共同开发的云计算平台, 是一个开源的 IaaS(基础设施及服务)云计算平台,让任何人都可以自行建立和提供云端运算服务,每半年发布一次,用Python语言编写。

②.OpenStack是基于开源发布的云计算架构,每个人都可以使用基于平台之上开发出新版本。

  • 2.OpenStack组件架构:

在这里插入图片描述

组件名称功能
KeyStone为各功能、组件提供身份认证、权限管理、令牌管理要使用云计算的所有用户事先需要在 Keystone 中建立账号和密码,并定义权限
Glance负责管理虚拟机的镜像,Compute 服务在启动虚拟机时需要从这里获取镜像文件。其功能包括虚拟机镜像的查找、注册和检索等。 Glance提供Restful API可以查询虚拟机镜像的metadata及获取镜像。 Glance可以将镜像保存到多种后端存储上,比如简单的文件存储或者对象存储。
Placement跟踪每个供应商的库存和使用情况,例如在计算节点创建了一个实例,如CPU、内存、IP、磁盘存储,都需要placement进行监控。
Nova管理实例(虚拟机)的"创建"、“启动” 、“挂起”、“调度”、“关闭”、“销毁”,接收dashboard(仪表盘)传来的命令执行具体的操作
NeutronNeutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙等。Neutron 提供了一个灵活的框架,例如创建不同类型的网络(vpn、vxlan、GRE、ipsec)、子网、防火墙策略
Horizon提供了一个网页界面,用户登录后可以做这些操作:管理虚拟机、配置权限、分配 IP 地址、创建租户和用户等。本质上就是通过图形化的 操作界面控制其他服务
Cinder提供块存储服务,存储虚拟机镜像文件,创建实例的数据持久化。
  • 3.OpenStack共享服务组件:

    数据库服务( Database Service ):MairaDB 及 MongoDB
      消息传输(Message Queues):RabbitMQ
      缓存(cache): Memcached时间(time sync):NTP
      存储(storge provider):ceph、GFS、LVM、ISICI等

    高可用及负载均衡:pacemaker、HAproxy、keepalive、lvs等

    OpenStack核心组件:

    身份服务( Identity Service ):Keystone
        计算( Compute ): Nova
        镜像服务( Image Service ): Glance
        网络 & 地址管理( Network ): Neutron
        对象存储( Object Storage ): Swift
        块存储 (Block Storage) : Cinder
        UI 界面 (Dashboard) : Horizon

    测量 (Metering) : Ceilometer
    部署编排 (Orchestration) : Heat

  • 4.OpenStack社区链接

社区: www.openstack.org, wiki.openstack.org

如何贡献代码: http://wiki.openstack.org/HowToContribute
源代码管理 :http://wiki.openstack.org/GerritWorkflow
文档 :http://docs.openstack.org

三、消息缓存队列

  • Message Queue消息队列(MQ)

1.消息缓存队列概述:

①.是一种程序针对程序的一种通信方法,应用程序通过读取消息缓存队列来通信,而无需专用的链接来进行通信.

  • AMQP 即 Advanced Message Queuing Protocol

2.高级消息队列协议:

①.高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

②.高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

  • Rabbitmq server

3.属于一个流行的开源消息队列系统。属于AMQP( 高级消息队列协议 ) 标准的一个 实现。是应用层协议的一个开放标准,为面向消息的中间件设计。用于在分布式系统中存储转发消息,在 易用性、扩展性、高可用性等方面表现不俗。

①.属于一个流行的开源消息队列系统。属于AMQP( 高级消息队列协议 ) 标准的一个 实现。是应用层协议的一个开放标准,为面向消息的中间件设计。用于在分布式系统中存储转发消息,在 易用性、扩展性、高可用性等方面表现不俗。

RabbitMQ特点:

②.支持持久化
③.支持HA
④.提供C# , erlang,java,perl,python,ruby等的client开发端
  • Rabbitmq概念:
名词作用
Broker简单来说就是消息队列服务器实体
Exchange消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue消息队列载体,每个消息都会被投入到一个或多个队列。Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key路由关键字, exchange根据这个关键字进行消息投递。
vhost虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
producer消息生产者,就是投递消息的程序。
consumer消息消费者,就是接受消息的程序。
channel消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
  • Rabbitmq工作原理

MQ 是消费 - 生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。 MQ 则是遵循了 AMQP协议的具体实现和产品。在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

在这里插入图片描述

( 1)客户端连接到消息队列服务器,打开一个channel。

( 2)客户端声明一个exchange,并设置相关属性。

( 3)客户端声明一个queue,并设置相关属性。

( 4)客户端使用routing key,在exchange和queue之间建立好绑定关系。

( 5)客户端投递消息到exchange。

( 6) exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里.

  • Rabbit和metadata(元数据)的关系

元数据可以持久化在 RAM 或 Disc. 从这个角度可以把 RabbitMQ 集群中的节点分成两种 :RAM Node和 Disk Node.

  • RAM Node 只会将元数据存放在RAM

    • Disk node 会将元数据持久化到磁盘。

单节点系统就没有什么选择了 , 只允许 disk node, 否则由于没有数据冗余一旦重启就会丢掉所有的配置信息 . 但在集群环境中可以选择哪些节点是 RAM node.在集群中声明(declare) 创建 exchange queue binding, 这类操作要等到所有的节点都完成创建才会返回 :
如果是内存节点就要修改内存数据 ,
如果是 disk node 就要等待写磁盘 , 节点过多这里的速度就会被大大的拖慢 .

有些场景 exchang queue 相当固定 , 变动很少 ,那即使全都是 disc node, 也没有什么影响 . 如果使用 Rabbitmq 做 RPC( RPC :Remote Procedure Call—远程过程调用), RPC 或者类似 RPC 的场景这个问题就严重了 , 频繁创建销毁临时队列 , 磁盘读写能力就很快成为性能瓶颈了。所以 , 大多数情况下 , 我们尽量把 Node 创建为RAM Node. 这里就有一个问题了 , 要想集群重启后元数据可以恢复就需要把集群元数据持久化到磁盘 , 那需要规划 RabbitMQ 集群中的 RAM Node 和 Disc Node 。

只要有一个节点是 Disc Node 就能提供条件把集群元数据写到磁盘 ,RabbitMQ 的确也是这样要求的 : 集群中只要有一个 disk node 就可以 , 其它的都可以是 RAM node. 节点加入或退出集群一定至少要通知集群中的一个 disk node 。

如果集群中 disk node 都宕掉 , 就不要变动集群的元数据 . 声明 exchange queue 修改用户权限 , 添加用户等等这些变动在节点重启之后无法恢复 。

有一种情况要求所有的 disk node 都要在线情况在才能操作 , 那就是增加或者移除节点 .RAM node 启动的时候会连接到预设的 disk node 下载最新的集群元数据 . 如果你有两个 disk node(d1 d2), 一个 RAM node 加入的时候你只告诉 d1, 而恰好这个 RAM node 重启的时候 d1 并没有启动 , 重启就会失败 . 所以加入 RAM 节点的时候 , 把所有的disk node 信息都告诉它 ,RAM node 会把 disk node 的信息持久化到磁盘以便后续启动可以按图索骥 .

四、Memcached

  • 静态web页面

1.在静态web页面中,客户端使用web浏览器经过network访问连接到web服务器上,使用http协议发送一个请求(Request),服务器在收到了请求后将存放在web服务器文件系统的静态页面文件传给客户端,经过浏览器渲染后得到良好的显示效果。

2.静态web无法访问数据库。

3.静态web采用HTML

4.由于现在的web页面中,大量使用JS,导致浏览器打开页面,就会占用大量的内存,服务端的压力是减轻了,但压力转移到了客户端。

  • 动态web页面

1.在动态web页面中,客户端使用web浏览器经过network访问连接到web服务器上,使用http协议发送一个请求(Request),现在的所有请求都先经过一个WEB Server来处理。如果客户端请求的是静态资源(.htm或者是.htm),则将请求直接转交给WEB服务器,之后WEB服务器从文件系统中取出内容,发送回客户端浏览器进行解析执行。

2.现在的所有请求都先经过一个WEB Server来处理。如果客户端请求的是静态资源(.htm或者是.htm),则将请求直接转交给WEB服务器,之后WEB服务器从文件系统中取出内容,发送回客户端浏览器进行解析执行。

  • 带来的问题和解决方案:

1.如果是访问流量密度高的大型网站以及OpenStack集群中,那么对于关系型数据库,尤其是大型关系型数据库,如果对其进行每秒上万次的并发访问,并且每次访问都在一个有上亿条记录的数据表中查询某条记录时,其效率会非常低,对数据库而言,这也是无法承受的。

2.这个时候memcached技术就是用来解决这些问题的,在面对高并发的数据库查询下,memcached的缓存系统可以很好的解决数据库查询效率低下和高并发带来的压力.缓存系统将频繁需要查询的活跃数据存储到内存中,数据库查询所带来的频繁磁盘i/o和大型关系表查询时的时间开销

五、Memcached概念

  • 概述:

1.Memcached 是一个开源的、高性能的分布式内存对象缓存系统。通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站访问速度,加速动态WEB应用、减轻数据库负载。

  • 工作原理:

1.Memcached将缓存的对象数据通过API的方式被存取,数据经过利用HASH之后被存放到位于内存上的HASH表内,HASH表中的数据以key-value的形式存放,由于Memcached没有实现访问认证及安全管理控制,因此在面向internet的系统架构中,Memcached服务器通常位于用户的安全区域。

2.当Memcached服务器节点的物理内存剩余空间不足,Memcached将使用最近最少使用算法(LRU,LastRecentlyUsed)对最近不活跃的数据进行清理,从而整理出新的内存空间存放需要存储的数据。

3.由于Memcached优势,现已成为大部分开源项目首先的缓存系统,如openstacksd的keystone身份认证项目。就会利用Memcached来缓存租户的Token等身份信息,从而在用户登陆验证时无需查询存储在MySQL后端数据库中的用户信息,这在数据库高负荷运行下的大型openstack集群中能够极大地提高用户的身份验证过程,在如web管理界面Horizon和对象存储Swift项目也都会利用Memcached来缓存数据以提高客户端的访问请求响应速率。

  • Memcached工作流程

1.检查客户端请求的数据是否在 Memcache 中,如果存在,直接将请求的数据返回,不在对数据进行任何操作。

2.如果请求的数据不在 Memcache 中,就去数据库查询,把从数据库中获取的数据返回给客户端,同时把数据缓存一份 Memcache 中

3.每次更新数据库的同时更新 Memcache 中的数据库。确保数据信息一致性。

4.当分配给 Memcache 内存空间用完后,会使用LRU(least Recently Used ,最近最少使用 ) 策略加到其失效策略,失效的数据首先被替换掉,然后在替换掉最近未使用的数据。

在这里插入图片描述

六、Memcached功能特点

1.协议简单

其使用基于文本行的协议,能直接通过 telnet 在Memcached 服务器上存取数据

2.基于 libevent 的事件处理
libevent 利用 C 开发的程序库,它将 BSD 系统的kqueue,Linux 系统的 epoll 等事件处理功能封装成为一个接口,确保即使服务器端的链接数。加也能发挥很好的性能。Memcached 利用这个库进行异步事件处理。

3.内置的内存管理方式
Memcached 有一套自己管理内存的方式,这套方式非常高效,所有的数据都保存在Memcached内置的内存中,当存入的数据占满空间时,使用 LRU 算法自动删除不使用的缓存,即重用过期的内存空间。Memecached 不考虑数据的容灾问题,一旦重启所有数据全部丢失。

4.节点相互独立的分布式
各个 Memecached 服务器之间互不通信,都是独立的存取数据,不共享任何信息。通过对客户端的设计,让 Memcached 具有分布式,能支持海量缓存和大规模应用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值