# 云计算

Table of Contents

复习材料,不建议阅读

简介

大数据的特点(4V + 1C)

  • 数据量大(Volume)
  • 快速(Velocity)
  • 多样(Variety)
  • 价值密度低(Value)
  • 复杂度(Complexity)

是什么?

云计算是一种商业计算模型。它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。

云计算是通过网络按需提供可动态伸缩的廉价计算等服务。

云计算的特点:

  • 超大规模
  • 虚拟化
  • 高可靠性
  • 通用性
  • 弹性扩展
  • 按需服务
  • 廉价

云计算的分类:

  • SaaS(软件)
  • PaaS(平台)
  • IaaS(基础设施)

按部署模式分类:

  • 公有云(任何符合条件的人可用)
  • 混合云(有几种云组成)
  • 社区云(两个或以上企业或单位使用)
  • 私有云(企业或单位内部使用)

发展

  • 全面上云
  • 云网融合
  • 云边协同
  • 云原生
  • 云际计算

集群技术

是什么?

集群(Cluster)是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。

为什么要使用集群?

  • 提高性能
  • 降低成本
  • 提高可扩展性
  • 增强可靠性

集群的组织方式

  • 主从结构

将备份服务器连接到主服务器上;备份服务器一般不主动提供服务;主服务器故障时,备份提供服务。

  • 多机结构

由多台服务器运行相同应用,通过负载均衡共同提供服务;服务器间相互通信,故障时自动转移至其他服务器。

一般故障转移步骤需要:侦测、启动、接管,会花费一定时间。

LB 负载均衡

是什么?

负载均衡(Load balancing),是一种将网络流量负载均衡到各个服务器上,以减少单个服务器压力、提升整体性能的技术。

为什么需要负载均衡?

  • 解决并发压力
  • 实现高可用
  • 实现扩展性
  • 安全防护

负载均衡类型:

  • 四层(ip:port )
  • 七层(http 等)
  • DNS(域名解析多个 ip)

方案:

  • 硬件(F5、A10 等)
  • 软件(LVS、Nginx、HAProxy、Traefik 等)

HA 高可用

是什么?

保证系统在任何故障情况下仍可长期可以提供服务的方式

常用于不易实现负载均衡的应用,如负载均衡器、数据库、存储等

常见方案:

  • keepalived

在高可用对之间使用 VRRP 通信,主服务器一直进行广播通知备份设备。

  • heartbeat

动静分离

网站、资源、业务分离,所以需要不同的集群。

Nginx 通过设置不同 uri 转发至不同的 upstream 实现分离。

session 保持

如何解决集群 session 保持问题?

  • 服务器间共享
  • 使用 session 集群
  • 同一用户始终访问同一集群

一般使用 ip_hash,由源 ip、源端口、目的 ip、目的端口、协议计算出请求摘要

文件共享

教材云 NFS,实际性能差;不太重要,略过。

磁盘阵列

为什么?

磁盘损坏数据丢失,通过 RAID 提高安全性和性能。

基本 RAID 级别:

  • 0

条带化,nn 倍容量,无备份

  • 1

镜像,n/2n / 2 倍容量,有备份

  • 5

条带化 + 奇偶校验, n1n - 1 倍容量,有备份

  • 6

分布式奇偶校验,n2n - 2 倍容量,有备份

组合 RAID 级别:

  • 10

(n/2)m(n / 2) * m 倍容量,有备份

  • 50

(n1)m(n - 1) * m 倍容量,有备份

  • 60

(n2)m(n - 2) * m 倍容量,有备份

条带(Strip):是指将数据分割成的离散数据块(段)。将这些数据块(段)同时分布到硬盘阵列中的每个物理硬盘上的这种工作方式被称为“数据条带化”。

带区(Stripe):是指硬盘阵列当中物理硬盘上“同一位置”的一组条带的集合。

条带大小:是指每一个条带的大小。

带区大小:是指跨所有数据盘的一组条带的总大小,不包括奇偶校验带区。

带区宽度:指涉及的硬盘数量

分布式技术

是什么?

一组独立的计算机展现给用户的是一个系统来完成一个统一的工作,但是系统内部可以动态的分配任务。分散的物理和逻辑资源通过计算机网络实现信息的交换。

特点:

  • 计算速度加快
  • 对等性
  • 并发性
  • 缺乏全局时钟
  • 故障总会发生

和集群区别在哪?

  • 集群是同一个任务,分布式是将不同任务分到不同地方。
  • 集群可以隔离故障,分布式无法隔离故障。

NoSQL

非关系型数据库

四大分类:

  • 键值存储
  • 列存储
  • 文档型
  • 图形

主流是 Redis 等。

session 分离

没啥好说的,用 Redis 代替传统的数据库或者 NFS 进行 session 的存储。

一致性哈希

主要是处理缓存问题。

方法:

  • 取模法

不方便扩展

  • 一致性哈希

选择足够大的哈希空间构成哈希环,计算主机要素哈希将主机布置到哈希环不同位置;需要缓存时,计算数据哈希在环上位置,顺时针第一个服务器就是缓存位置。增加/减少节点时影响范围非常小。

也可以通过虚拟节点方式进一步分散数据解决数据倾斜问题,改善故障容忍。

分布式存储

分布式文件系统

用来管理网络中跨多台计算机存储的文件系统。

以 HDFS 为例,存在两类节点:

  1. namenode

管理节点,管理文件系统的命名空间,维护文件和目录关系,记录文件块所在的节点信息。

  1. datanode

工作节点,块存储具体的数据,向 namenode 发送存储的块列表。

虚拟化技术

是什么?

利用软件或固件管理程序构成虚拟化层,把物理资源映射为虚拟资源。

主要有几个方面:

  • 服务器虚拟化

将一个或多个物理服务器虚拟成多个逻辑上的服务器。

  • 存储虚拟化

把分布的异构存储设备统一为一个或几个大的存储池。

  • 网络虚拟化

在底层物理网络和网络用户之间增加一个抽象层。

  • 虚拟化容器

在同一个系统上,实现资源隔离与重用,在不同设备上模拟同一环境。

两种虚拟化:

  1. 寄居虚拟化(Type 2)

用 VMM 应用程序虚拟化。

全虚拟化不需要对 GuestOS 做任何修改,特权命令由 VMM 捕获处理。

半虚拟化需要修改部分 GuestOS 特权指令部分。

  1. 裸机虚拟化(Type 1)

HyperVisor 直接控制硬件。

容器

是什么?

容器化是一个类似于 VM 但经过改进的概念。容器化不会复制硬件层,而是移除独立环境中的操作系统层。这使应用程序能够独立于主机操作系统运行。为应用程序提供所需的确切资源,因此容器化可防止资源浪费。

教材这一块讲得不清楚。Linux 容器实现是通过命名空间进行隔离,容器和宿主共用内核。不同的 rootfs 和 layer 构成不同容器,但是均使用宿主机的 Linux 内核。相较 VM 需要连同内核设备等一起虚拟化,容器的开销要小得多。但是,安全性也弱于强隔离的 VM。

OpenStack

是什么?

一个部署云的操作平台或工具集。

成员:

  • 计算服务 Nova

管理计算资源、网络、授权和扩展需求

  • 对象存储服务 Swift

允许对文件进行存储或检索

  • 镜像服务 Glance

为Nova提供创建虚拟机所需的镜像

  • 身份认证服务 Keystone

负责提供身份验证、授权和令牌管理

  • 网络管理服务 Neutron

负责提供网络连接服务

  • 存储管理服务 Cinder

提供持久块存储服务

  • 仪表盘 Horizon

基于Web的用户界面,方便用户进行交互

Nova

计算组织控制器

  1. API Server(Nova-Api)

API Server对外提供一个与云基础设施交互的接口,也是外部可用于管理基础设施的唯一组件。

  1. Message Queue(Rabbit MQ Server)

OpenStack节点之间通过消息队列使用AMQP(Advanced Message Queue Protocol)完成通信。

  1. Compute Worker(Nova-Compute)

Compute Worker管理实例生命周期,通过Message Queue接收实例生命周期管理的请求,并承担操作工作。

  1. Network Controller(Nova-Network)

Network Controller处理主机的网络配置,包括IP地址分配、为项目配置VLAN、实现安全组、配置计算节点网络。

  1. Volume Workers(Nova-Volume)

Volume Workers用来管理基于LVM(Logical Volume Manager)的实例卷。Volume Workers有卷的相关功能,例如新建卷、删除卷、为实例附加卷、为实例分离卷。

  1. Scheduler(Nova-Scheduler)

调度器Scheduler把Nova-API调用映射为OpenStack组件。调度器作为一个Nova-Schedule守护进程运行,通过恰当的调度算法从可用资源池获得一个计算服务。

通过 Libvirt 兼容不同的虚拟化底层。

Glance

镜像存储,swift 实际提供了存储服务

支持存储类型:

  • OpenStack Object Storage

它是OpenStack中高可用的对象存储项目。

  • FileSystem

OpenStack Image Service存储虚拟机镜像的默认后端是后端文件系统。

  • S3

该后端允许OpenStack Image Service存储虚拟机镜像在Amazon S3服务中。

  • HTTP

OpenStack Image Service能通过HTTP在Internet上读取可用的虚拟机镜像。

数据中心

树结构

传统数据中心采用树状结构。

FatTree 结构,消除了上层链路吞吐量限制,内部节点间通讯有多条链路,横向扩展降低网络成本,兼容性好。

改进型为 VL2,加强 SDN,服务器池和虚拟机可随意迁移。

递归结构

DCell 结构,构建高层次网络时,需要的低层网络的个数等于每个低层网络中的服务器个数加1;服务器参与数据的交换。

BCube 结构,每一层都用 nn 个交换机连接 nn 个下级单元。

FiConn 结构,依赖 SDN 和服务器互联。

光交换结构

Helios 结构,感觉和树形差别不大,就是换成光交。

OSA 结构,虽然一眼难辨是哪路高手,不过还是树形。

无线

比较新,无线代替有线还是有许多困难。

Redis

数据类型

  1. string 字符串

什么都可以存。

SET key "value"
GET key
  1. hash 哈希

相当于一个小的 NoSQL。一个 key 是一张表,field 和 value 对应。

HMSET key field1 "value1" field2 "value2"
HGET key field1
HGETALL key
  1. list 列表

简单的字符串列表,可以在头尾操作。

LPUSH key value # 左添加一个
RPOP key # 右取一个
LRANGE key start stop # 取一段
  1. set 集合

字符串无序集合

SADD key "value"
SREM key "value"
SMEMBERS key
SISMEMBER key value
  1. zset 有序集合

不允许重复的字符串集合,每个元素关联一个 double 类型的 score 来排序。

ZADD key score "value" # 也可以用来更新分数
ZSCORE key "value" # 获得元素的分数值
ZRANGEBYSCORE key 0 1000 # 获取指定分数范围的元素

还有位图、超日志、流等,在这里略过。

分布式锁与信号量

和操作系统中的锁逻辑基本一致,redis 可以使用 watch 方便地打断事务。

Hadoop

HDFS

分布式存储

MapReduce

基本理念是分治,将大的任务拆解为多个部分让不同设备并行处理。

My avatar

Thanks for reading my blog post! Feel free to check out my other posts or contact me via the social links in the footer.


More Posts

Comments