云計算復習

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指定由誰啟動<c為硬碟>,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指定由誰啟動<d為CD-ROM>,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


17.OpenStack組件之間的通信關系
(1)基于AMQP協議的通信:用于每個專案內部各個組件之間的通信,
(2)基于HTTP協議進行通信:通過各專案的API API建立的通信關系,API都是RESTful Web API,
(3)通過Native API實作通信:OpenStack各組件和第三方軟硬體之間的通信,
18.OpenStack部署:控制節點/計算節點

(1)控制節點負責對其余幾點的控制,包含虛擬機創建、遷移、網路分配、存盤分配,包括服務(管理支持服務、基礎管理服務、擴展管理服務)

(2)計算節點負責虛擬機運行,包括服務(Nova、neutron、telemter)
19.OpenStack網路:提供者網路/自服務網路

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(持續集成與持續交付)

26.云原生應用12要素:對任一要素可以解釋說明
a)基準代碼:一份代碼庫與多份部署
b)依賴:顯示宣告依賴關系
c)配置:在環境中存盤配置
d)后端服務:把后端服務當作附加資源
e)構建、發布、運行:嚴格分離構建和運行
f)行程:以一個或多個無狀態行程運行應用
g)埠系結:通過埠系結提供服務
h)并發:通過行程模型進行擴展
i)易處理:快速啟動和優雅終止可最大化健壯性
j)環境等價:盡可能保持開發與預發布線上環境相同
k)日志:把日志當作事件流
l)管理行程:后臺管理任務當作一次性行程運行
27.微服務架構相關:

(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.云資源調度策略分類

(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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/246528.html
標籤:其他
