近年來(lái),美圖在海外發(fā)展迅速,BeautyPlus作為美圖海外的旗艦APP,截至2019年6月,總MAU達(dá)6682萬(wàn),是目前最受印度用戶喜愛(ài)的相機(jī)產(chǎn)品之一。
而美圖海外背后提供支撐的云端平臺(tái)正是Google Cloud。美圖海外業(yè)務(wù)架構(gòu)全部基于Kubernetes進(jìn)行容器化部署,同時(shí)依托于Google的資源,能及時(shí)、專業(yè)地解決難題。美圖海外的業(yè)務(wù)遷移成為在GCP(Google Cloud Platform)上Kubernetes遷移部署的最佳實(shí)踐之一。
其實(shí)在容器技術(shù)方向,特別是Kubernetes推進(jìn)上,Google一直是引領(lǐng)者,其2015年推出的GKE(Google Kubernetes Engine)——Google云容器引擎,在框架、安全性能以及其他Google基礎(chǔ)設(shè)施能力依托下,具有獨(dú)到的優(yōu)勢(shì)。
2019 Arch Summit全球架構(gòu)師峰會(huì)·北京站Google Cloud技術(shù)專場(chǎng)上,Google Cloud工程師魏衡、美圖海外高級(jí)服務(wù)端經(jīng)理陳澤青分享了GCP上Kubernetes遷移部署最佳實(shí)踐相關(guān)內(nèi)容。從容器集群技術(shù)方面分析了Google Cloud的優(yōu)勢(shì)及美圖的實(shí)踐,以下內(nèi)容主要來(lái)自魏衡和陳澤青的分享。
Google與Kubernetes的關(guān)系
Kubernetes是Google開(kāi)源的容器編排系統(tǒng),2014年對(duì)外宣布,2015年發(fā)布1.0版本,同年Google與Linux基金會(huì)一起成立云原生計(jì)算基金會(huì)(CNCF-Cloud Native Computing Foundation),并把Kubernetes作為種子產(chǎn)品捐贈(zèng)給了CNCF。Google一直在帶領(lǐng)著Kubernetes的開(kāi)發(fā),我們也可以看到CNCF的Kubernetes項(xiàng)目代碼貢獻(xiàn)量,Google所占比重是最高的。
從Borg到Kubernetes,Google的容器技術(shù)時(shí)間線
Google在容器領(lǐng)域擁有超過(guò)15年的經(jīng)驗(yàn)。
2003年,Google內(nèi)部幾個(gè)工程師做了一個(gè)集群自動(dòng)化管理的工具,叫做Borg;
2012年,Google Borg升級(jí)成Omega,實(shí)現(xiàn)容器的管理;
2013年,隨著業(yè)界Docker發(fā)布,整個(gè)行業(yè)開(kāi)始往容器方向遷移;
2014年,Borg/Omega開(kāi)源為Kubernetes項(xiàng)目;
到如今,Kubernetes已經(jīng)成為整個(gè)容器編排的主流技術(shù)。
Kubernetes脫胎于Borg/Omega的系統(tǒng)設(shè)計(jì),而因?yàn)殚_(kāi)源,使得社區(qū)能夠合力去解決Borg的遺留問(wèn)題。在Kubernetes面世后,Google在開(kāi)源、容器技術(shù)優(yōu)化的道路上繼續(xù)前行。
2018年,Google、IBM和Lyft聯(lián)合開(kāi)源了服務(wù)網(wǎng)格(Service Mesh)框架——Istio,發(fā)布Istio1.0版本;Google又相繼推出了gVisor,Knative云原生框架、GKE On-Prem;2019年Google Cloud Next大會(huì)上隆重推出Anthos。
這些技術(shù)不斷讓容器領(lǐng)域大放光彩,Istio是建立于Kubernetes上層的服務(wù),用于進(jìn)行微服務(wù)管理;Knative擴(kuò)展了Kubernetes,專注于解決容器為核心的Serverless應(yīng)用的構(gòu)建、部署和運(yùn)行問(wèn)題,構(gòu)建在Kubernetes和Istio平臺(tái)之上;gVisor作為新型沙箱解決方案,為容器提供安全的隔離措施,并且能夠與Docker及Kubernetes實(shí)現(xiàn)集成,從而在生產(chǎn)環(huán)境中更輕松地建立起沙箱化容器系統(tǒng)。
而Google今年推出的Anthos其實(shí)是以Kubernetes為核心的混合云/多云管理平臺(tái),其下面就包括多種產(chǎn)品和解決方案,如GKE、GKE On-Prem、Istio on GKE等……GKE On-Prem是一種混合云軟件,作為Anthos的核心組件,可將GKE引入本地?cái)?shù)據(jù)中心。
GKE架構(gòu)與特色
什么是GKE?
有了運(yùn)行Gmail和YouTube等容器化服務(wù)超過(guò)12年的豐富經(jīng)驗(yàn),Google 2015年推出的GKE——Google云容器引擎,是一個(gè)可用于生產(chǎn)的托管式環(huán)境,用于部署容器化應(yīng)用。
通過(guò)GKE,用戶可以管理Google計(jì)算引擎(GCE)資源的邏輯集群,其中包括使用Kubernetes在集群節(jié)點(diǎn)上自動(dòng)部署Docker容器。根據(jù)需要,GKE將虛擬機(jī)的配置、啟動(dòng)和停止過(guò)程,以及在數(shù)量可變的Docker容器上部署容器化應(yīng)用程序的過(guò)程自動(dòng)化。
關(guān)于GKE架構(gòu)
Kubernetes的架構(gòu)都由Master(控制節(jié)點(diǎn))和Node(計(jì)算節(jié)點(diǎn))兩種節(jié)點(diǎn)組成,通常,發(fā)布一個(gè)命令后,由控制節(jié)點(diǎn)分配到計(jì)算節(jié)點(diǎn)。
上圖是GKE集群的結(jié)構(gòu)框架演示,我們看到有Master Node、Worker Node、Node Pool等要素。Master Node、Worker Node,這兩種角色對(duì)應(yīng)的是控制節(jié)點(diǎn)、工作節(jié)點(diǎn)。控制節(jié)點(diǎn)由幾個(gè)緊密協(xié)作的組件組合而成:API Server、controller-manager、scheduler、etcd,這部分是Google管理的項(xiàng)目,Master內(nèi)的通訊我們一般看不到。當(dāng)控制節(jié)點(diǎn)分配任務(wù)到工作節(jié)點(diǎn),Worker Node開(kāi)始發(fā)揮作用。
但在這個(gè)地方我們發(fā)現(xiàn)GKE多了一個(gè)Node Pool的概念,其實(shí)是把Worker Node進(jìn)行分組,根據(jù)自身需求把相同硬件或者相同需求的計(jì)算資源分組,分成一個(gè)個(gè)Node Pool。ReplicaSet、StatefulSet等可以根據(jù)屬性部署在不同的Node Pool上面,部署完成后,最后創(chuàng)建成Service、Ingress,給到用戶使用。
Pod水平伸縮與垂直伸縮
談到容器自動(dòng)伸縮的問(wèn)題,Kubernetes有一個(gè)強(qiáng)大的功能,它能在運(yùn)行的服務(wù)上進(jìn)行編碼并配置彈性伸縮。如果沒(méi)有彈性伸縮功能,就很難適應(yīng)部署的擴(kuò)展和滿足SLAs。而Pod就是彈性伸縮的單位。Pod,而不是容器,是Kubernetes項(xiàng)目中最小的編排單位,我們可以把Pod看作是傳統(tǒng)部署環(huán)境里的”虛擬機(jī)“,而容器是其中的”用戶程序“,Pod的設(shè)計(jì)可以讓用戶從虛擬機(jī)環(huán)境到容器環(huán)境的遷移變得更加平滑。Pod水平擴(kuò)展與收縮,是平臺(tái)級(jí)項(xiàng)目必須具備的編排能力。
HPA(Horizontal Pod Autoscaling),是指Kubernetes中實(shí)現(xiàn)Pod水平自動(dòng)伸縮的功能,按需實(shí)現(xiàn)部署的自動(dòng)擴(kuò)展和縮減。在GKE,除了支持HPA,還支持VPA,VPA即Vertical Pod Autoscaler縱向擴(kuò)容,用來(lái)調(diào)整CPU和內(nèi)存請(qǐng)求,目前只在Google Cloud上支持此功能。除了Pod的伸縮,其實(shí)更重要是計(jì)算資源的伸縮,Google Cloud支持Worker Node自動(dòng)部署,當(dāng)HPA/VPA使用資源不夠時(shí)可以自動(dòng)部署Node節(jié)點(diǎn)。
GKE的負(fù)載均衡
在GKE里可以直接享受Google強(qiáng)大的負(fù)載均衡。創(chuàng)建Ingress時(shí),只要寫(xiě)一個(gè)YAML文件,Google Cloud可自動(dòng)創(chuàng)建一個(gè)全球負(fù)載均衡。同時(shí)可以支持Secret模式創(chuàng)建證書(shū),同一GCLB支持多證書(shū),以及支持CDN和網(wǎng)絡(luò)安全屬性服務(wù)。
另外Google還做了一個(gè)有趣的服務(wù)叫Network Endpoint Group,把Pod作為后端負(fù)載均衡的節(jié)點(diǎn),這樣在服務(wù)發(fā)布的時(shí)候,遇到網(wǎng)絡(luò)繁忙,直接檢查Pod是否符合要求,如果可以就轉(zhuǎn)發(fā)流量,相比分組方式常出現(xiàn)二次跳轉(zhuǎn)的現(xiàn)象,優(yōu)化了網(wǎng)絡(luò)路徑。
日志和監(jiān)控-與GCP Stackdriver深度集成
Google公司做大數(shù)據(jù)出身,日志和監(jiān)控系統(tǒng)做的非常好,Stackdriver產(chǎn)品可以監(jiān)控和管理服務(wù)、容器、應(yīng)用及基礎(chǔ)架構(gòu),普遍用于混合云監(jiān)控、日志記錄和診斷。
除了Kubernetes,配套的服務(wù)如容器鏡像倉(cāng)庫(kù)、容器的可執(zhí)行軟件授權(quán)等,GKE也是業(yè)界最早支持Istio的Kubernetes平臺(tái)。GKE是Google Cloud云上產(chǎn)品,如果想在自己數(shù)據(jù)中心部署,GKE On-Prem可以幫助部署在自己的數(shù)據(jù)中心,通過(guò)GKE On-Prem,可以使用到和在Google Cloud一樣的GKE Service。
Google Cloud與美圖海外的攜手
以上產(chǎn)品都是美圖出海的明星產(chǎn)品,BeautyPlus和美圖秀秀海外版在東南亞市場(chǎng)表現(xiàn)活躍,AirBrush主要布局在歐美市場(chǎng)。在本文開(kāi)篇我們也提到了BeautyPlus是美圖海外的旗艦APP,據(jù)美圖財(cái)報(bào)顯示,2019年上半年,BeautyPlus的月活躍用戶數(shù)較2018年12月大漲12%達(dá)到6682萬(wàn),是目前最受印度用戶喜愛(ài)的相機(jī)產(chǎn)品之一。
亮眼成績(jī)的背后離不開(kāi)美圖在出海策略上堅(jiān)持高度本地化運(yùn)營(yíng),注重與當(dāng)?shù)仄放坪献?,共同打造符合?dāng)?shù)厥袌?chǎng)流行趨勢(shì)及偏好的產(chǎn)品,
今年4月份美圖正式發(fā)布AI開(kāi)放平臺(tái),為美圖全線產(chǎn)品提供云端圖像處理能力,也為很多B端品牌客戶提供AI技術(shù)的支持,比如Bobbi Brown的WebAR和五官分析,雅詩(shī)蘭黛的多款定制化妝容,嬌韻詩(shī)的上妝效果及拍照角度推薦等。
能夠在海外取得這樣的成績(jī),除了得益于美圖自身本地化運(yùn)營(yíng)策略的成功,以及美圖AI開(kāi)放平臺(tái)為其提供AI能力外,也離不開(kāi)Google Cloud的大力支持。不管是To C的BeautyPlus,還是To B的美圖AI開(kāi)放平臺(tái),都需要在海外有一個(gè)穩(wěn)定強(qiáng)大的云端平臺(tái)來(lái)做支撐。美圖選擇了Google Cloud。
自2016年起美圖便與Google開(kāi)展深入合作,包括Google Could、Firebase、Google AdMob、Google Ads等方面,ARCore是Google推出的搭建增強(qiáng)現(xiàn)實(shí)應(yīng)用程序的軟件平臺(tái),ARCore技術(shù)也已成功應(yīng)用在美圖BeautyPlus的多款A(yù)R特效中。
美圖為什么選擇Google Cloud
1、更低的成本
CP有特有的持續(xù)使用折扣定價(jià)模式。計(jì)算實(shí)例定價(jià)不是固定的,而是隨著使用時(shí)長(zhǎng)不斷降低,對(duì)于需要長(zhǎng)期使用的實(shí)例,會(huì)越使用越便宜。
美圖海外高級(jí)服務(wù)端經(jīng)理陳澤青也提到“我們的緩存實(shí)例占用總支出很大一部分,且對(duì)緩存實(shí)例的帶寬依賴較大。但是,實(shí)例最大帶寬是與實(shí)例規(guī)格是成正比的,為了大帶寬只能開(kāi)大規(guī)格的實(shí)例,造成其他資源(CPU、內(nèi)存)的浪費(fèi)。而GCP上,小規(guī)格的實(shí)例就能承載非常大的帶寬,避免資源浪費(fèi)。在我們的具體業(yè)務(wù)場(chǎng)景中顯著的降低了成本?!?/span>
美圖每種算法容器都需要不同的配置比,Google Cloud可以進(jìn)行任意的CPU和內(nèi)存配置,與其他云服務(wù)的固定機(jī)器類型相比,在美圖業(yè)務(wù)中提升了資源的利用率,更節(jié)省費(fèi)用。另外在業(yè)務(wù)高低峰期,請(qǐng)求量變化較大場(chǎng)景下如節(jié)假日,GKE與GCE服務(wù)的彈性伸縮功能,使得整個(gè)業(yè)務(wù)平臺(tái)都能在較低的成本下運(yùn)行,并且還能在有大量突發(fā)請(qǐng)求時(shí),保持業(yè)務(wù)的穩(wěn)定性。
2、更先進(jìn)的功能
Google在全球部署了很多專線來(lái)打造一個(gè)骨干內(nèi)網(wǎng),以提升區(qū)域間訪問(wèn)的速度?;贕CP負(fù)載均衡和AnyCast技術(shù)也方便打造美圖的全球化架構(gòu),使用負(fù)載均衡實(shí)現(xiàn)就近接入。
美圖海外業(yè)務(wù)架構(gòu)全部基于Kubernetes進(jìn)行容器化部署,依托于Google的資源,能及時(shí)、專業(yè)地提供各類技術(shù)支持。
在運(yùn)維層面,GCP的Cloud Shell可以直接在瀏覽器中通過(guò)命令行訪問(wèn)云端資源,且無(wú)需安裝SDK。通過(guò)Cloud Shell,可以隨時(shí)使用最新且經(jīng)過(guò)全面身份驗(yàn)證的Cloud SDK、gcloud命令行以及其他必要的實(shí)用工具進(jìn)行云端資源管理,并且有獨(dú)立的用戶數(shù)據(jù)空間,簡(jiǎn)化了云端資源的運(yùn)維管理操作。
3、豐富的自定義監(jiān)控和日志
GCP上的Stackdriver平臺(tái)正在為美圖海外業(yè)務(wù)監(jiān)控和日志分析的需求提供支持。包括收集各類云上資源運(yùn)行指標(biāo)和日志,并對(duì)日志進(jìn)行各個(gè)維度的分析,及生成監(jiān)控圖表。同時(shí),通過(guò)Stackdriver無(wú)縫結(jié)合GCP的其他功能比如BigQuery和大數(shù)據(jù)分析服務(wù),對(duì)日志進(jìn)行更多維度的分析。代替了美圖海外自己搭建的監(jiān)控日志平臺(tái),節(jié)省了資源成本和配置、管理成本。
“我們?cè)谶w移后統(tǒng)計(jì),使用GCP平臺(tái),每月節(jié)省了近44%的成本?!标悵汕嗫偨Y(jié)到。
分享嘉賓:
魏衡,Google Cloud工程師,IT從業(yè)20年,專注在網(wǎng)絡(luò)、Linux和容器領(lǐng)域。曾就職于Cisco和Microsoft。
陳澤青,美圖海外高級(jí)服務(wù)端經(jīng)理,美圖海外及AI云計(jì)算負(fù)責(zé)人,多年機(jī)器學(xué)習(xí)高性能計(jì)算及云計(jì)算研發(fā)經(jīng)驗(yàn)。2017年加入美圖,組建團(tuán)隊(duì)架構(gòu)美圖AI開(kāi)放平臺(tái),后負(fù)責(zé)美圖海外服務(wù)端業(yè)務(wù),通過(guò)云平臺(tái)服務(wù)美圖海外億級(jí)用戶。