1. 程式人生 > 實用技巧 >谷歌雲端計算平臺GCP介紹

谷歌雲端計算平臺GCP介紹

雲端計算的概況

國內外多個大廠都提供了自己的雲端計算平臺,包括亞馬遜的AWS,微軟的Azure,Google的GCP(Google Cloud Platform),國內的有騰訊雲,阿里雲,華為雲等。對於國際大公司來說,要想給全球使用者一個良好的產品使用體驗(低延遲),必然要在全球主要節點部署機房,構建資料中心。對於小公司來說,沒有這個財力進行全球部署,大公司從中看到了商機,既然小公司有這個需求、自身也為此維持了相當的人力成本,那為何不多部署一些,分隔成可精確計費的服務(IaaS,PaaS,FaaS),然後售賣給小公司呢?AWS等雲端計算平臺可以做到按請求次數、計算資源使用時間(100毫秒)來計費。

這樣一來,雲端計算平臺上面既執行著自家的產品,也對外提供計算、儲存、網路、機器學習、大資料分析處理等各種能力與服務。開啟手機QQ,初始介面下方有一行字“騰訊雲提供計算服務”。從2017年開始,騰訊要求內部服務都逐漸遷移到騰訊雲上面,遷移的過程總是緩慢的,但是一旦上雲上就再也不想回去了。在以前,升級一個公眾號訊息傳送服務(有100多臺8核8GB記憶體機器)需要花費小半天:先將待升級的機器上面的流量切走,開始升級,升級完之後觀察沒有問題後再接入流量,為避免將剩餘的機器壓爆,每次升級的時候最多升總量的10%~15%。這樣來回切,費時費力。以容器和K8S為代表的先進技術出現後,服務的擴容、縮容、升級基本不再花費開發的額外精力。

雲端計算平臺的全球市場佔有份額分佈如下(Canalys 2020年5月統計資料):AWS(32%)、微軟Azure(17%)、谷歌雲(6%)、阿里雲(6%),剩下的是一些其他雲端計算平臺,包括IBM、Oracle、華為雲、騰訊雲等。國內市場佔用份額分佈如下(Canalys 2020年 Q1資料):阿里雲 44.5%、華為雲 14.1%、騰訊雲 13.9%、百度雲 8.6%。

計算、儲存、網路是雲端計算平臺提供的三個最基本的服務,稱之為基礎架構(IaaS),就像一個城市的水、電、公共交通,當從自建的資料中心遷移上雲,首先想到的就是這些基礎設施。但是光有這些還是不夠,優秀的雲提供商,還會提供各種PaaS、FaaS服務,例如,客戶只負責選擇需要的計算節點個數,剩下的由雲端計算平臺負責搭建和維護K8S叢集。更進一步,客戶只需要寫事件觸發函式(Function),完全不用關心後面需要多少計算資源,如何做負載均衡,如何配置網路拓撲等。

機房選址、硬體伺服器資源購買、網路設定、多機房異地容災、全球負載均衡、邊緣計算節點部署、防止網路攻擊(例如DDoS),對小公司、初創公司或者個人開發者,幾乎是不可能完成的事情,對大公司來說,這些都已經做過一遍了,是現成的。有買方,有賣方,生意就這樣做起來了。

NIST對雲端計算(Cloud Computing)的定義

  1. 按需自助服務:只需使用一個簡單的介面,就可以獲得所需的計算能力、儲存和網路,而無需人工干預。

  2. 廣泛的網路接入:可以從任何想要的地方通過網路訪問這些資源。

  3. 資源池:這些資源的提供者擁有一個很大的資源池,並將其分配給該資源池之外的客戶。通過批量購買獲得規模經濟,並將節省下來的錢轉嫁給使用者,資源使用者不必知道或關心這些資源的確切物理位置。

  4. 資源可快速伸縮:可以快速的進行資源的擴容和縮容。

  5. 服務可度量:只為使用的服務計費,停止服務則停止計費。

接下來從以下幾方面介紹一下Google的GCP:

  • IAM(Identity And Access Management)與資源管理

  • 網路

  • 計算

  • 儲存與資料庫

  • App Engine、GKE與Cloud Function

  • Stackdriver

  • 資料處理、大資料分析與機器學習

IAM與資源管理

Google Cloud 資源層次結構與傳統作業系統中的檔案系統類似,能夠以分層方式組織和管理實體。每項資源有且僅有一個父項。通過這種分層化的資源組織方式,可以對父資源設定訪問許可權控制政策與配置設定,並且子資源可以繼承這些政策與 Identity and Access Management (IAM) 設定,子節點策略不能限制已經在父層節點授予的訪問許可權:

  • Organization: Organization是頂層節點,沒有父節點,代表整個組織,管理者多個部門Folder,包含所有計費賬號。

  • Folders: Folder管理者Project,為了管理方便,會有多個層級的Folders,例如,一個產品Folder管理者多個Project,一個團隊Folder管理者多個產品Folder。一個部分Folder管理者多個團隊Folder。

  • Project: 管理Resource中資源,包括資源的訪問與授權、配額管理、計費等,一個Project關聯一個計費賬號,每個Project可以建立最多5個VPC(Virtual Private Cloud)網路。通過配額管理,可以防止因錯誤或者惡意攻擊導致的資源濫用和費用突增,可以強制進行資源控制和週期review。

  • Resource: 包括計算、網路、儲存、App Engine、GKE等資源,一個資源只能屬於一個且只能是一個Project。根據作用範圍不同,分為Global、Regional、Zonal,如下圖所示:


Organization、Folder、Project、Resource關係圖:

三種類型的IAM Roles:

  • Primitive: IAM Primitive Roles適用於一個Project中所有的GCP服務,提供了固定的、粗粒度的訪問控制,包括Owner、Editor、Viewer和Billing Administrator,Owner有Editor的所有許可權,Editor有Viewer的所有許可權,Billing Administrator有管理賬單和增刪管理者的許可權,具體如下圖所示:

  • Predefined:IAM Predefined Roles適用於一個Project中具體的某一個GCP服務,針對具體服務提供了較細粒度的許可控制,比如InstanceAdminRole包括的compute.instance.start, compute.instance.stop, compute.instance.list等許可。

  • Custom: IAM Custom Roles可以按照要求定義一組許可列表。

服務賬戶

服務賬戶提供了服務與服務之間進行互動的一個標識,是一個email地址,例如,[email protected],有三種類型的服務賬戶:

  • 自定義服務賬戶,包括Predefined Roles。

  • 預設服務賬戶,Compute Engine和App Engine都有預設的服務賬戶,包括IAM Primitive和Predefined Roles。

  • Google API 服務賬戶,代表呼叫方執行內部Google程序。

它有如下2個好處:

  • 執行在Compute Engine例項中的程式能夠自動獲得有效的Access Token。

  • Access Tokens可用於訪問Project中的任意服務API和授權給此服務賬戶的任意服務。


可以通過如下兩種方式管理服務賬號認證所需的Key:

  • GCP-managed:不可以下載,可以自動輪換。

  • User-managed:自行建立、管理、輪換。

網路

GCP中很重要的一個概念是VPC,即Virutal Private Cloud,通過此來隔離雲上的多個使用者,它是一個全球網路,包括如下元素:

  • Virtual machines(VMS): 在一個物理機器上面通過虛擬機器技術(VMM/Hypervisor)可以虛化出多個VM,提高資源的利用率。雲端計算中的Compute Instance是以VM為粒度的。

  • Zone: Zone可以理解成機房,但是和機房不是一一對應的。

  • Region: 一個VPC包括至少一個Region, 一個Region至少包括2個Zone,Region之間至少相距160KM,通過專線連線,確保低延遲。在多個Region中部署相同的業務,當一個Region失效後,其他Region可以繼續工作,進一步提高了業務的容災能力。Region內部通過TCP/UDP協議來實現負載均衡,多個Region之間通過http/https協議來實現負載均衡,可以支撐全球的業務發展,業務只需對外暴露一個IP,極大簡化了網路層次。

  • Subnetwork: 可以跨越多個Zone,在同一Subnetwork下的多個Zone中部署相同的業務,一個Zone失效後,其他Zone可以繼續工作,即方便的進行容災部署。同一個Subnetwork共用一個Firewall規則,通過tag可以很方便的確定允許通過Firewall的流量。

  • Network: 包括預設、自動、自定義三種模式,是全球的,可以跨越多個Region,包含多個Subnetwork,沒有所謂的IP Address 區間。在同一個網路中的VM,即使分佈在不同的Region也可以通過內網地址進行訪問,在不同網路中的VM,即使分佈在同一個Region也需要通過外網地址才能訪問。

  • Projects: 關聯可計費的物件和服務,最多可以有5個Network(shared或者peered)。

  • IP addresses: 分內部地址、外部地址,VM可以有內部和外部兩個地址,內部地址是根據Subnetwork的地址範圍由DHCP分配的,DHCP的租約每24小時更新一次;外部地址可從IP地址pool分配(臨時)或者保留IP地址(靜態),外部地址可以對映到內部地址,VM不知道外部地址的存在。

  • Routes: 路由。

  • Firewall rules: Inbound/Outbound Firewall rules, 可基於IP和tag。

VPC的分類:

  • Shared VPC,所有的服務和網路元素都在一個VPC中,中心化管理,不能跨越不同的組織。

  • VPC peering,兩個組織或者實體分處在兩個VPC中,互相設定自己為對方的peer,可通過Private IP進行訪問,去中心管理。

為避免業務計算例項受到外界的攻擊,GCP提供了多種措施,包括檢測惡意流量引到DDoS、防火牆、API GateWay、NAT等。通過NAT,內網機器可以訪問外網資源,但是外網無法訪問內網機器。

負載均衡

GCP提供瞭如下幾種負載均衡方式:

  • HTTP(s) load balancing, 全域性負載均衡,自動擴縮容,URL對映,架構如下:

  • SSL proxyload balancing,為加密的非HTTP流量提供全域性負載均衡,智慧路由,認證管理,安全補丁,SSL策略。

  • TCP proxy load balancing,為非加密的非HTTP流量提供全域性負載均衡,智慧路由,安全補丁。

  • Network load balancing, Region範圍的非proxy的的負載均衡,支援UDP、TCP/SSL流量。

  • Internal load balancing,Region範圍的private負載均衡,支援UDP、TCP流量,支援3-tier web服務。


彙總如下:

計算

多種機型:

  • 網路容量每vCPU擴縮2Gbps

  • 理論上最多32Gbps(16個vCPU)或者100Gbps(T4或者V100 GPU),1 vCPU = 1個硬體超執行緒

Compute Engine:

  • Computer Engine提供可管理的虛擬機器,這是從自有機房遷移到雲首先想到的資源,IaaS。

  • 支援Linux和Windows Server兩種虛擬機器映象,採用KVM作為其虛擬機器的VMM/Hypervisor。

  • 預定義或者使用者自行挑選合適的記憶體大小、CPU核數、硬碟型別(持久化的SSD,Local SSD等),若有需要,可以選擇GPU。

  • 計算資源按秒計費,可以橫向(申請多個虛擬機器)或者縱向(選擇大的記憶體、更多的CPU核數,更大的磁碟空間)擴充套件。

預定義機型按照1 vCPU對應的記憶體大小可分為:

  • 標準

  • 高記憶體

  • 高CPU

  • 記憶體優化

  • 計算優化

  • 共享Core

託管的計算例項組,極大減少了運維成本:

  • 根據例項模板可以部署完全一樣的計算例項。

  • 確保所有計算例項都是正常執行的。

  • 例項組的所有計算例項可以在同一個Zone或者跨Zone,但必須在同一個Region。

  • 例項組提供自動擴縮容能力,根據負載的增加減少自動增加減少計算例項,自動擴縮容的策略包括CPU使用率、負載均衡容量、監控的預定義或者自定義指標、基於佇列的負載。

計算例項的映象(Image),安裝在虛擬機器的VMM/Hypervisor之上,包括如下內容:

  • 載入載入程式(Boot loader)

  • 作業系統(Guest)

  • 檔案系統

  • 自定義軟體

映象可以通過如下方式獲取:

  • 公共基礎映象,Google、第三方品牌商、社群,分為Linux(CentOS,CoreOS,Debian,RHEL(p),SUSE(p),Ubuntu,openSUSE,FreeBSD)和Windows(Windows Server 2019(p),2016(p),2012-r2(p))

  • 自定義映象,以現有的計算例項建立映象,從自建機房、工作站、其他雲提供商匯入的映象

儲存與資料庫

GCP提供了多種型別的硬碟:

  • 持久化的標準硬碟、SSD硬碟,這些儲存不會隨著虛擬機器的刪除而消失。

  • Local SSD,速度更快,當虛擬機器刪除的時候會同時刪除。

GCP也提供了多種資料庫(關係型和非關係型):

  • Cloud Storage

  • Cloud Bigtable

  • Cloud Datastore

  • Cloud Firestore

  • Cloud SQL

  • Cloud Spanner

  • Cloud Memorystore

Cloud Storage

Cloud Storage是一個物件儲存服務,高效能,自動擴容,使用者不需要管理容量。例如,新增一個Bucket,然後將圖片等檔案上傳到指定的Bucket。根據不同場景,可選擇Multi-regional,Regional,Nearline, Coldline, 前面兩種儲存單價(GB/月)高,後兩種儲存單價低,但是單位GB的提取訪問單價高。

  • 可以用客戶自己提供的加密key(CSEK)。

  • 物件生命週期管理,自動刪除或者歸檔物件。

  • 物件版本管理,可以管理一個物件的多個版本,可以獲取已刪除或者已覆寫的物件。

  • 物件變更通知,物件更新或者新增到Bucket的時候可以觸發通知應用程式。

  • 強一致性,提供全域性的強一致性。

Cloud Bigtable

託管的NoSQL大資料資料庫服務,適合Ad Tech,Fintech,IoT等業務場景,機器學習應用理想的儲存引擎,支援同一row的transaction,不支援跨row的transaction,可方便的和開源的大資料工具結合起來。

  • PB級資料擴充套件

  • 低於10毫秒的延遲

  • 平滑的擴縮容能力

  • 學習和自動調整訪問方式

Cloud Bigtable的儲存模式:

處理和儲存是分開來的,可以通過增加Bigtable node節點方便的提高處理能力,同時,node節點故障後不會導致資料丟失。

能夠自己學習和調整訪問方式

吞吐量可以隨著Bigtable node節點數量線性擴縮

CloudDatastore

託管的NoSQL儲存服務,基於Bigtable的架構進行設計,並做了增強和改進,例如,Bigtable僅支援同一row的transaction,Datastore最多支援25個row的transaction。提供SQL類的查詢,利用索引搜尋符合條件的Object,可作為應用程式的後端儲存。

Cloud Firestore

Cloud Firest是Cloud Datastore下一代產品,託管的 NoSQL 文件資料庫,能夠自動擴縮、具備出色的效能,並且易於進行應用開發。雖然 Firestore 介面具有許多與傳統資料庫相同的功能,但作為 NoSQL 資料庫,它與傳統資料庫在描述資料物件間關係的方式方面有所不同。允許文件資料上運行復雜的 ACID 事務,能更靈活地設定資料結構。內建實時同步和離線模式,可以在移動 Web 和 IoT 裝置上輕鬆構建多使用者協作式應用,例如,實時資產跟蹤、活動跟蹤、實時分析、媒體和商品清單、通訊、社交媒體使用者資料和遊戲排行榜等。支援兩種模式:

  • Datastore模式,與Datastore應用相容,強一致性。

  • Native模式,文件資料模式,支援實時更新。

Cloud SQL

Cloud SQL是託管的Mysql和PostgreSQL資料庫,具備高可靠性和高擴充套件性,每個VM提供高達30TB的儲存容量、40,000 IOPS、416 GB的記憶體,自動完成備份、複製、更新等事宜。因為它也使用Compute Engine,可以通過故障恢復來保障高可用性。寫只能縱向擴充套件,讀既可以縱向擴充套件也可以橫向擴充套件。

Cloud Spanner

Cloud Spanner是託管的可橫向擴充套件的關係型資料庫,支援自動備份、複製、更新,結合了關係型資料庫結構的好處與非關係型資料庫可橫向擴充套件兩個優點於一身。

  • PB級資料的擴充套件

  • 強一致性

  • 高可靠,可用於金融和庫存相關的行業,Monthly uptime,Multi-Regional:99.999%, Regional:99.99%。

Cloud Spanner的架構,在多個Zone中部署多個副本,避免一個Zone災難後資料丟失。

通過Google的全域性光纖網路在多個Zone之間同步資料的更新

Cloud Memorystore

Cloud Memorystore是託管的Redis服務。

  • 全記憶體的資料儲存服務。

  • 高可靠,故障自動恢復、監控。

  • 小於1毫秒的訪問延遲。

  • 最多可達300GB的容量。

  • 網路頻寬可達12Gpbs。

App Engine、GKE與Cloud Function

App Engine

託管的平臺,客戶不需要關注基礎架構事務(包括計算、儲存、網路等資源,負責均衡、防火牆規則、角色管理、TSL/SSL等),只需關注具體業務程式碼邏輯,App Engine會根據流量情況自動擴縮容,且只有程式碼執行的時候才需付費。分為標準環境(App Engine Standard environment)和靈活環境(App Engine Flexible environment),標準環境有一些限制,比如只支援Java、Python、PHP和GO,不允許寫本地檔案,所有請求的最大超時時間是60秒。

GKE(Google Kubernetes Engine)

從頭搭建一個K8S叢集,需要做如下事情,可以看到還是挺繁瑣的,都是一些體力活。

  • 在Master、Node節點安裝、配置Docker。

  • 修改docker cgroup驅動,與k8s一致,使用systemd。

  • 在Master、Node節點安裝kubelet kubeadm kubectl。

  • 建立叢集準備工作,在Master、Node端拉取相關映象、修改映象tag、刪除舊映象等。

  • 使用kubeadm建立叢集,設定配置許可權,應用flannel網路,將多個Node加入叢集。

  • 安裝dashboard,設定監控、告警。

通過GKE , 使用者只需選擇Node的個數,其他都是自動完成的,包括叢集的告警、監控等,這就極大的提升了生產力。

容器(Container)

通過Compute Engine(虛擬機器)當然可以進行自動擴容,但是因為虛擬機器中Guest OS佔用較大空間,啟動、停止虛擬機器耗時時間較長,不能隨心所欲的擴縮容業務所需資源。反過來講,為了不浪費資源,必須能夠方便和快速的進行業務資源的擴容和縮容,這是雲端計算平臺所要必備的(參考雲端計算平臺定義),容器技術也是在這個背景下快速發展和應用到雲端計算平臺中。容器只映象了業務和所依賴的環境和庫,沒有Guest OS,所以額外開銷很小,啟動、停止都會很快。一個應用可以拆分成多個邏輯,每個邏輯就是一個微服務,執行在可擴充套件的容器中,這些容器執行在多個Host中。每個Host可以執行多少個容器,若Host掛了,其中的Container如何遷移等,Kubernetes就是用來解決這些常見的工程問題的。Kubernetes使得在許多Host上協調多個容器、將它們擴充套件為微服務以及部署發版和回滾變得非常容易。上面也提到,部署Kubernetes叢集純粹就是一個體力活,這個時候Google的Kubernetes Engine出現了,客戶只選擇用幾個Node來承載應用的容器,其他的都不用關心了。細究的話,Container和Kubernetes介於IaaS和PaaS之間。

容器只包含應用程式和其依賴的庫,比虛擬機器要輕量很多


Kubernetes架構,master節點管理者若干node節點,並對外提供管理api,真正的業務(若干個pod)跑在node節點上面。

Kubernetes中,最小的排程單元是pod,一個pod可能包含多個container,pod中的多個container共享一個網路介面。

GKE,極大的提升了生產力,只需一個命令即可創建出來一個Kubernetes叢集。

Cloud Function

利用可伸縮的函式即服務 (FaaS) 執行程式碼,用多少付多少,並且無需執行任何伺服器管理工作。

  • 不必預配、管理或升級伺服器

  • 根據負載自動擴縮

  • 整合式監控、日誌記錄和除錯功能

  • 基於最小許可權原則的角色和函式級別的內建安全性

  • 適用於混合雲和多雲端方案的關鍵網路功能。

  • 簡化開發者體驗,提高開發速度。

Stackdriver

  • 整合monitoring、logging、diagnostics

  • 跨平臺管理,包括GCP和AWS

  • 強大的資料和分析工具

  • 和第三方軟體的合作

logging

  • 可以蒐集平臺、系統、應用程式日誌,最多保留30天,提供API來寫日誌。

  • 可搜尋、檢視、過濾日誌。

  • 基於日誌的metics。

  • 可基於日誌事件來設定告警。

  • 日誌可以被匯入到Cloud Storage,BigQuery and Cloud Pub/Sub。


Monitoring

  • 動態設定和智慧常規預設值

  • 攝取平臺、系統、應用程式metics,事件,元資料,生成dashboards、表格、告警。

  • Uptime/Health check

Tracing

  • 跟蹤系統,近實時的展現資料,請求latency報告,URL latency取樣。

  • 收集latency資料,包括App Engine,Google Http(s) load balancers,包含Stackdriver Trace SDKs的應用程式。

Error Reporting

聚合和展現執行的雲服務的錯誤

  • 錯誤通知

  • 錯誤dashboard

資料處理、大資料分析與機器學習

BigQuery

BigQuery是GCP提供的serverless、高可擴充套件、低成本的cloud data warehouse。

  • 完全託管

  • PB級資料擴充套件

  • 提供SQL介面

  • 非常快

Cloud Dataflow

Cloud Dataflow是託管的資料pipeline,叢集大小可自動伸縮,基於資料轉換的程式設計模式,例如,以BigQuery資料來源,經過Dataflow處理後,落入Cloud Storage。主要使用場景包括:1)ETL(extract/transform/load),作為轉移、篩選、豐富加強、規整資料的一個管道;2)資料分析,批量計算和流連續計算。

CloudDataprep

Cloud Dataprep可視覺化的挖掘、清洗、準備資料,用於分析和機器學習。

  • serverless,可任意擴充套件。

  • 理想的資料轉換服務。

  • 聚焦於資料分析。

Cloud Dataproc

Cloud Dataproc是執行Apache Spark和Apache Hadoop叢集的服務。

  • 低成本(可搶佔)

  • 可快速的進行啟動、擴縮、關閉

  • 託管的服務

Pub/Sub

可擴充套件的可靠訊息系統,支援多對多的非同步訊息傳遞,push/pull兩種訊息訂閱方式,可以和Dataflow,IoT一起協同工作。作用和Kafka一樣,但是是完全託管的,不需要考慮擴容、維護等相關事宜。

機器學習

  • 開源工具構建和執行神經網路模型,支援CPU、GPU,移動端、服務、雲等。

  • 完全託管的機器學習服務,基於notebook的開發環境,和BigQuery、Cloud Storage高度協同。

  • 谷歌提供的預訓練的機器學習模型,包括:1)Speech,實時流結果,可以檢測80+語言;2)Vision,物體識別,標記,文字,內容;3)Translate,語言檢測與翻譯;4)自然語言,文字結構化與理解。

總結

依稀記得有一位大佬說過,雲端計算不過是“新瓶裝舊酒”,沒有實質的東西,仔細拆分來看,的確沒有額外新的技術,但是它代表了一種商業模式的轉換,無需提前規劃購買資源、只為使用的資源付費、可快速擴縮容,這正是它的強大之處。