云计算复习

云计算复习

云计算复习_第1张图片

01.云计算的特征
弹性伸缩、快速部署、资源抽象、按用量收费、宽带访问
云计算定义:是一种无处不在、便捷且按需对一个共享的可配置计算资源(包括网络、服务器、存储、应用和服务)进行网络访问的模式,它能够通过最少量的管理以及与服务提供商的互动实现计算资源的迅速供给和释放。

02.云计算按部署模式分类:公有云/私有云/社区云/混合云

03.云计算按服务类型分类:IaaS/PaaS/SaaS
(1)基础设施即服务(Infrastructure as a Service,IaaS)
(2)平台即服务(Platform as a Service,PaaS)
(3)软件即服务(Software as a Service,SaaS)

04.CAP理论
一个分布式系统最多只能同时满足三项中的两项。
(1)一致性(Consistency):更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。
(2)可用性(Availability):服务一直可用,而且是在正常的响应时间内。
(3)分区容错性(Partition tolerance):分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

ACID是数据库事务正常执行的四个原则
(1)原子性A(Atomicity):事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
(2)一致性C(Consistency):数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
(3)独立性I(Isolation):并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
(4)持久性D(Durability):一旦事务提交后,它所做的修改将会永久保存在数据库上,即使出现宕机也不会丢失。

05.BASE理论
(1)基本可用(Basically Available):分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用
(2)软状态(Soft State):允许系统存在中间状态,而该中间状态不会影响系统整体可用性
(3)最终一致性(Eventual Consistency):系统中的所有数据副本经过一定时间后,最终能够达到一致的状态

06.最终一致性
是弱一致性的一种特例,过程松,结果紧,最终结果必须保持一致性即可

07.虚拟机技术基本概念:
(1)Host: 运行虚拟机监控器的操作系统被称为主机操作系统
(2)Guest:虚拟机中运行的操作系统被称为客户操作系统
(3)VMM:虚拟机监控器,对系统资源有完全的控制能力和管理权限,包括资源的分配,监控和回收。

08.虚拟机技术分类:
(1)全虚拟化:全虚拟化提供底层物理系统的全部抽象化,且创建一个新的虚拟系统,客户机操作系统可以在里面运行。不需要对客户机操作系统或者应用程序进行修改(客户机操作系统或者应用程序像往常一样运行,意识不到虚拟环境的存在)
(2)半虚拟化:半虚拟化指的是虚拟机系统和虚拟化软件层通过交互来改善性能和效率。半虚拟化涉及修改操作系统内核来将不可虚拟化的指令替换为可直接与虚拟化层交互的超级调用(hypercalls)。(将不可虚拟化的操作系统指令替换为超级调用)
(3)硬件辅助虚拟化:是独立的虚拟化技术,结合到全/半虚拟化技术中。通过对部分全虚拟化和半虚拟化使用到的软件技术进行硬件化来提高性能。

09.Linux虚拟化技术栈:
(1)KVM:全称是Kernel Virtual Machine,即内核虚拟机。
(2)QEMU:全称为Quick Emulator,原来是独立的全虚拟化软件,性能较差。现在一般与KVM结合(qemu-kvm),由qemu充当外层管理控制,底层内核依赖于KVM,采用pass through半虚拟化设备以提高性能。
(3)libvirt:是目前使用最广泛的对KVM虚拟机进行管理的工具和API。libvirtd是一个daemon进程,可以被本地或远超virsh调用。Libvirtd调用qemu-kvm操纵虚拟机,qemu-kvm调用KVM等内核模块实现虚拟化。

10.qemu-kvm使用:理解命令行参数含义
a)-m、-cpu:用于设定内存大小与CPU的个数
b)-hda:指定IDE磁盘,后面可以跟磁盘镜像文件
c)-cdrom:CD驱动器,后面跟ISO安装程序
d)-boot [a|c|d]:由软盘(a)、硬盘©或CD-ROM(d)启动,默认由硬盘启动
e)-vnc:指定VNC管理地址
f)-net:用于配置网络信息,如配置IP地址、VLAN信息、MAC地址信息等

/usr/libexec/qemu-kvm -vnc :2 -m 256 -boot c win
(-vnc指定VNC管理地址:2,-m指定内存大小,-boot指定由谁启动,win是镜像文件里的名字)

qemu-img create -f qcow2 winxp.qcow2 2g
(创建一个,格式为qcow2,大小为2g,名字为winxp.qcow2的镜像)

/usr/libexec/qemu-kvm -vnc :2 -cdrom WindowsXP_SP2.iso -m 256 -boot d winxp.qcow2
(-vnc指定VNC管理地址:2,-cdrom 为CD驱动器跟着ISO安装程序,-m指定内存大小,-boot指定由谁启动,winxp.qcow2是镜像文件)

11.virsh使用:理解虚拟机定义XML文件
a)list命令可以查看所有虚拟主机列表
b)dominfo命令可以查看虚拟主机的详细信息
c)destroy命令可以关闭虚拟主机
d)suspend命令暂停已经运行的虚拟主机
e)resume 恢复启动暂停的虚拟主机
f)create命令创建虚拟主机

前提:创建磁盘镜像;编辑XML配置文件;define命令注册虚拟主机
virsh define windows.xml

virsh start windows
(运行虚拟机,windows是xml里的name)

virsh destroy windows
(关闭虚拟主机)

<domain type='kvm'>用kvm创建的虚拟机称为domain,type定义使用哪个虚拟机管理程序,值可以是:xen、kvm、qemu、lxc、kqemu。
  <name>zgj_ubuntu</name>为虚拟机定义了一个简短的名字,必须唯一。
  <uuid>c7a5fdbd-cdaf-9455-926a-d65c16db1809</uuid>全球唯一,linux下可以用uuidgen生成
  <memory unit=’KiB’>219200</memory>可以分配到的最大内存,内存单位有unit定义,单位可以是:K、KiB、M、MiB、G、GiB、T、TiB。默认是KiB。
  <currentMemory>219200</currentMemory>实际分给客户端的内存小于memory的定义,如果没有定义,值和memory一致。
  <vcpu>2</vcpu>为虚拟机最多分配几个cpu。
  <os>
    <type arch='i686' machine='pc'>hvm</type>arch指定虚拟机的cpu架构,machine指定机器的类型。hvm表明该os被设计为直接运行在裸金属上面,需要全虚拟化。
    <boot dev='cdrom'/>boot启动方式:hd(硬盘)、cdrom(光盘)
  </os>
  <devices>所有的设备都是一个名为devices元素的子设备。
    <emulator>/usr/libexec/qemu-kvm</emulator>模拟设备二进制文件的全路径。
    <disk type='file' device='cdrom'>
      <source file='/home/user/ubuntu.iso'/>当disk的type是file时,file属性指定一个合格的全路径文件映像作为客户端的磁盘。
      <target dev='hdc'/>dev属性表明本地磁盘在客户端上的实际名称,因为实际设备的名称指定并不能保证映射到客户端os上的设备。
      <readonly/>指定客户端不能修改设备。当一个disk含有type=cdrom,readonly则是默认值。
    </disk>
    <disk type='file' device='disk'>
      <source file='/home/user/zgj_ubuntu.qcow2'/>
      <target dev='hda'/>
    </disk>
    <interface type='network'>
      <source network='default'/>
    </interface>
    <graphics type='vnc' port='5900'/>配置vnc的配置文件,port是指定端口号。
  </devices>
</domain>

12.分布式存储的定义和特点
(1)分布式存储系统的定义:分布式存储系统是将为数众多的普通计算机或服务器通过网络进行连接,同时对外提供一个整体的存储服务。
(2)特性:高性能、可扩展、低成本、易用性

13.根据数据类型的存储分类:
(1)非结构化数据:包括文本、图片、图像、音频和视频信息等。
(2)结构化数据:具有模式的数据。
(3)半结构化数据:介于非结构化数据和结构化数据之间,数据有结构,不需要预先定义数据的模式结构。

14.存储解决方案:SAN/NAS/Ceph
(1)SAN通过将磁盘存储系统和服务器直接相连的方式提供一个易扩展、高可靠的存储环境,高可靠的光纤通道交换机和光纤通道网络协议保证各个设备间链接的可靠性和高效性。设备间的连接接口主要是采用FC或者SCSI。
(2)NAS通过基于TCP/IP的各种上层应用在各工作站和服务器之间进行文件访问,直接在工作站客户端和NAS文件共享设备之间建立连接,NAS隐藏了文件系统的底层实现,注重上层的文件服务实现,具有良好的扩展性
(3)Ceph是一个统一的、分布式的存储系统。

15.云计算网络相关概念:覆盖网络、SDN、NFV
(1)覆盖网络(Overlay Network):是一种在原有网络基础上构建网络连接抽象及管理的技术。覆盖网络中的节点可以被认为是通过虚拟或逻辑链接相连,其中每个链接对应一条路径(Path)
(2)SDN(软件定义网络):是网络虚拟化的一种实现方式,其核心技术OpenFlow通过将网络设备的控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络作为管道变得更加智能,为核心网络及应用的创新提供了良好的平台。主要功能是解决如何让网络的控制逻辑更好地控制网络中交换机和路由器的行为。
(3)网络功能虚拟化NFV:一种对于网络架构的概念,利用虚拟化技术,将网络节点阶层的功能,分割成几个功能区块,分别以软件方式实现,不再局限于硬件架构。通过使用x86等通用性硬件以及虚拟化技术,来承载很多功能的软件处理,从而降低网络昂贵的设备成本。

16.OpenStack组件/项目:Keystone/Horizon/Nova/Neutron/Swift/Cinder /Glance
云计算复习_第2张图片
云计算复习_第3张图片

17.OpenStack组件之间的通信关系
(1)基于AMQP协议的通信:用于每个项目内部各个组件之间的通信。
(2)基于HTTP协议进行通信:通过各项目的API API建立的通信关系,API都是RESTful Web API。
(3)通过Native API实现通信:OpenStack各组件和第三方软硬件之间的通信。

18.OpenStack部署:控制节点/计算节点
云计算复习_第4张图片
(1)控制节点负责对其余几点的控制,包含虚拟机创建、迁移、网络分配、存储分配,包括服务(管理支持服务、基础管理服务、扩展管理服务)
云计算复习_第5张图片
(2)计算节点负责虚拟机运行,包括服务(Nova、neutron、telemter)

19.OpenStack网络:提供者网络/自服务网络
云计算复习_第6张图片
20.OpenStack API形式:RESTful API
(1)OpenStack各个项目都提供了RESTful架构的API作为对外提供的接口。
(2)RESTful架构的核心是资源和资源的CRUD操作。
(3)OpenStack定义了很多的资源,并实现了针对这些资源的各种操作函数。
各个项目的API服务进程接收到客户端的HTTP请求时,一个所谓的“路由”模块就会将请求的URL转化成相应的资源,并路由到合适的操作函数上。

21.REST资源CRUD操作与HTTP请求类型的对应

REST资源 HTTP请求资源
Create GET
Retrieve POST
Update PUT
Delete DELETE

22.OpenStack API访问方式
(1)cURL命令:利用URL规则在命令行下工作。
(2)OpenStack命令行客户端:提供一个统一的命令行工具openstack。
(3)REST客户端:浏览器通过Web接口使用OpenStack服务。
(4)OpenStack的Python SDK:实现对OpenStack API的Python绑定,让开发人员通过Python对象的调用,而不是直接进行REST调用,使用Python执行自动化任务。

23.OpenStack认证与API请求流程
(1)向身份端点(Identity endpoint)请求一个认证令牌。在该请求中包括一个凭证。
(2)如果请求成功,服务器会返回一个认证令牌。
(3)发送API请求,并在X-Auth-Token头部包括上一步返回的认证令牌。可以一直使用这个令牌发送API请求,直到服务完成该请求,或者出现未授权(401)的错误。
(4)如果遇到未授权(401)的错误,则重新请求另一个令牌。

24.curl访问API:理解命令行参数含义
(1)使用packstack安装openstack:
packstack –allinone
(–allinone:所有功能集中安装在单一主机上)
(2)使用openstack命令行创建新实例:
openstack server create --image --flavor
在这里插入图片描述
(3)命令中指定–sa.logic.api.url=http://localhost:5000参数是因为将在http://localhost:5000上执行sa-logic程序:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000 &
(4)使用curl手工产生RESTful调用进行调试,对sa_webapp的直接调用:
curl -X POST -H “Content-Type: application/json” -d ‘{“sentence”:“hahaha”}’ http://172.20.1.158:8080/sentiment
a)通过 -X 来指定请求时的HTTP方法,通常使用POST方法,GET方法省略。
b)通过 -H 来添加Header信息,后面跟键值对,不需要大括号。
c)使用POST方法通常是为了往服务器传递数据,可以利用-d来完成。后面需要用带大括号键值对的方式去传递。

25.云原生应用的技术:微服务、DevOps、容器技术、CI/CD(持续集成与持续交付)
云计算复习_第7张图片
26.云原生应用12要素:对任一要素可以解释说明
a)基准代码:一份代码库与多份部署
b)依赖:显示声明依赖关系
c)配置:在环境中存储配置
d)后端服务:把后端服务当作附加资源
e)构建、发布、运行:严格分离构建和运行
f)进程:以一个或多个无状态进程运行应用
g)端口绑定:通过端口绑定提供服务
h)并发:通过进程模型进行扩展
i)易处理:快速启动和优雅终止可最大化健壮性
j)环境等价:尽可能保持开发与预发布线上环境相同
k)日志:把日志当作事件流
l)管理进程:后台管理任务当作一次性进程运行

27.微服务架构相关:
云计算复习_第8张图片
(1)SOA:面向服务的架构是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。SOA实际是对软件构件之间的进一步解耦。
(2)MSA:微服务架构是一种软件架构风格,以专注于单一责任与功能的小型构 建块(Small Building Blocks)为基础,组合出复杂的大型应用程序,使用与编程语言无关的 API 集相互通信。

28.Web Service相关:SOAP方式/RESTful方式
(1)SOAP是针对RPC的一种通用解决方案,RESTful是面向远程资源操作的解决方案。
(2)SOAP可以自定义操作方法,RESTful的操作限于对资源的CRUD操作,有局限性。
(3)SOAP并未限制服务的模式(可以是stateless或者stateful),RESTful从根本上保证服务是无状态的。
(4)RESTful以HTTP作为应用协议(不同HTTP请求方法对应 CRUD操作),而不仅仅是传输协议,因而通信开销最小。

29.容器与虚拟机技术的对比
(1)虚拟机是“重量级”的:通常包含整个操作系统及其应用程序,同时也需要运行一个hypervisor来控制虚拟机,镜像大小在10G量级,部署和启动需要较长时间。
(2)容器是“轻量级”的,镜像大小在100M 量级,可以在秒级启动,可以在一个资源隔离的进程中运行应用及其依赖项。
(3)容器技术与虚拟机技术并不互斥:云计算环境中容器一般运行在虚拟机中。

30.容器技术的优势
(1)简化部署:应用打包成单一地址访问、Registry存储、通过单一命令就可以部署完成的组件。
(2)快速启动:容器技术对操作系统的资源进行抽象而非对硬件资源进虚拟化,打包好的服务可以快速启动。
(3)服务组合:采用容器的方式进行部署,整个系统会变得易于组合。
(4)易于迁移:允许用户对工作负载进行迁移,避免局限于单一的平台提供商。

31.Docker核心技术:
(1)chroot:通过改变系统根目录,能够限制用户的权利,在新的根目录下并不能够访问旧系统根目录的结构和文件。
(2)CGroups:隔离和限制宿主机器上的物理资源,例如 CPU、内存、磁盘 I/O 和网络带宽。
(3)Namespace:是Linux提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法。
(4)UnionFS:支持分层文件系统构造镜像。

32.Docker基本概念:
(1)镜像:一种轻量级、可执行的独立软件包用来打包软件运行环境和基于运行环境开发的软件,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
(2)仓库(docker.io):集中存放镜像文件的场所。
(3)容器:是从镜像创建的运行实例,可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台,可以把容器看做是一个独立的Linux环境和运行在其中的应用程序。一个镜像可以创建很多容器。

33.Docker基本命令:pull、push、run、build、ps、rm、rmi、login
docker pull从仓库获取镜像
docker build利用dockerfile创建镜像
docker push上传镜像
docker run 创建容器
docker ps查看容器列表
docker exec 在选中的容器中执行命令
docker rm 删除容器
docker rmi 删除镜像
docker login用于登录Docker Registry

34.Docker镜像构建:Dockerfile解读
(1)sa-frontend的dockerfile内容:
FROM nginx
必须放在第一行从哪个基础镜像开始构建
COPY build /usr/share/nginx/html
拷贝文件或目录到镜像中,不会自动解压文件,也不能访问网络资源

(2)sa-webapp的dockerfile内容:
ENV SA_LOGIC_API_URL http://localhost:5000
ENV 关键字在Docker容器中声明了一个环境变量。可以在启动容器时指定情绪分析API的URL
ADD target/sentiment-analysis-web-0.0.1-SNAPSHOT.jar /
EXPOSE 8080
当前容器对外暴露出的端口
CMD[“java”,"-jar",“sentiment-analysis-web-0.0.1-SNAPSHOT.jar”,"–sa.logic.api.url=${SA_LOGIC_API_URL}"]
指定容器启动时要运行的命令

(3)sa-logic的dockerfile内容:
COPY sa /app
拷贝文件或目录到镜像中,不会自动解压文件,也不能访问网络资源
WORKDIR /app
指定在创建容器后终端默认登录进来的工作目录,一个落脚点
RUN pip3 install -r requirements.txt && \ python3 -m textblob.download_corpora
容器构建时需要运行的命令
EXPOSE 5000
当前容器对外暴露出的端口
ENTRYPOINT [“python3”]
配置容器,使其可执行化
CMD [“sentiment_analysis.py”]
指定容器启动时要运行的命令

(4)运行 sa-logic 容器,并设置映射到主机5000端口:
docker run -d -p 5000:5000 $DOCKER_USER_ID/sa-logic
(-p参数指定了容器对外的端口映射,冒号之前的是主机端口,客户要通过此端口访问服务;冒号之后的容器内端口,必须与实际服务监听端口一致)

(5)运行 sa-webapp 容器,并设置映射到主机8080端口:
docker run -d -p 8080:8080 -e SA_LOGIC_API_URL=‘http://x.x.x.x:5000’ $DOCKER_USER_ID/sa-webapp
(-e参数重新设定了SA_LOGIC_API_URL环境变量的值,如果构建Docker镜像时指定的url是匹配的,可以省略此参数)

35.应用扩展方式:
(1)垂直扩展scale up:在同一个逻辑单位中添加资源以扩充处理能力,例如增加服务器的CPU数量、内存数量、硬盘数量等,受制于硬件限制,会有无法突破的上限。
(2)水平扩展 scale out:增加更多的逻辑单位并使其成为一个整体协同工作,以获得更强处理能力,理论上可以无限扩展。(水平扩展需要应用架构和基础设施两方面的支持)

36.云资源调度策略分类
云计算复习_第9张图片
(1)基于性能的资源调度
本地性感知任务调度:为了提高任务的执行效率。
可靠性感知任务调度:为了提高云系统的可靠性。
(2)基于成本的资源调度
能量感知资源调度:减小运营成本。
(3)基于性能和成本的资源调度
工作流调度:优化了时间和成本。

37.容器编排的任务
(1)容器编排是指自动化容器的部署、管理、扩展和联网。
(2)主要任务是:让用户控制容器启动和停止的时间、将其组合到集群中,以及协调应用组合的流程。允许用户指导容器部署与自动更新、运行状况监控以及故障转移等。

38.Kubernetes基本概念:
(1)Pod:Kubernetes的最小管理单位,用于控制创建、重启、伸缩一组功能相近、共享磁盘的docker容器。
(2)Service:可用作服务发现,通过selectors为一组pod提供对外的接口。
(3)Deployment:负责创建、更新、维护所管理的所有pods。
(4)Label:是一个K/V键值对,用来标记Kubernetes组件的类别,对Kubernetes的伸缩调度非常重要。

39.Kubernetes使用:解读YAML文件
(1)sa-webapp-pod.yaml"

apiVersion: v1
kind: Pod 指定想创建的Kubernetes资源的类型,这里是Pod                                            
metadata:
  name: sa-webapp 定义该资源的名字
  labels:
    app: sa-webapp                                 
spec: 定义了资源应有的状态,Pod Spec中最重要的属性是容器的数组                                              
  containers:
    - image: 2420892478zgj/sa-webapp 希望在本 Pod 中启动的容器的映像
      name: sa-webapp Pod中容器的名字                          
      env:
- name: SA_LOGIC_API_URL 声明SA_LOGIC_API_URL的值为http://172.20.1.158:5000
value: "http://172.20.1.158:5000
      ports:
        - containerPort: 8080 是指容器监听的端口号,只是为了提供文档信息(即便没有这个端口也不会影响访问)

(2)service-sa-webapp-lb.yaml

apiVersion: v1
kind: Service 指定想创建的Kubernetes资源的类型,这里是Service
metadata:
  name: sa-webapp-lb 定义该资源的名字
spec:
  type: LoadBalancer 规格类型,选择LoadBalancer是因为要实现Pod之间的负载均衡
  ports:
  - port: 80 指定Service接受请求的端口
    protocol: TCP 定义通信协议
    targetPort: 8080 请求转发的端口
    nodePort: 30880
  selector: 包含选择Pod的参数的对象
    app: sa-webapp 定义了要定位的是打了“app:sa-webapp”标签的Pod

(3)sa-webapp-deployment.yaml

apiVersion: apps/v1
kind: Deployment 指定想创建的Kubernetes资源的类型,这里是Deployment
metadata:
  name: sa-webapp 定义该资源的名字
  labels:
    app: sa-webapp
spec:
  selector:
    matchLabels:
      app: sa-webapp
  replicas: 2 Deployment Spec对象的一个属性,用于定义需要运行几个Pod。这里是2个
  minReadySeconds: 15
  strategy:
    type: RollingUpdate 指定了这个Deployment在迁移版本时使用的策略。RollingUpdate策略将保证实现零当机时间部署
    rollingUpdate:
      maxUnavailable: 1 RollingUpdate对象的一个属性,用于指定执行滚动更新时不可用的Pod的最大数(与预期状态相比)
      maxSurge: 1 是RollingUpdate对象的另一个属性,用于定义可以添加到部署中的最大Pod数量(与预期状态相比)
  template: 指定Deployment创建新Pod所用的Pod模板。它与Pod的定义相似
    metadata:
      labels:
        app: sa-webapp 使用该模板创建出来的Pod所使用的标签
    spec:
      containers:
      - image: 2420892478zgj/sa-webapp
        imagePullPolicy: Always 设置为Always表示,每次重新部署时都会拉取容器镜像
        name: sa-webapp
        env:
          - name: SA_LOGIC_API_URL
            value: "http://sa-logic" 在Pod中声明环境变量SA_LOGIC_API_URL的值为“ http://sa-logic ”
        ports:
           - containerPort: 8080

你可能感兴趣的:(云计算)