云上效率提升指南 | K8S和Serverless还能这么玩
從之前的容器到當(dāng)前熱門(mén)的Kubernetes、Serverless、微服務(wù)等,新技術(shù)的每一次出現(xiàn),都是一場(chǎng)關(guān)于效率提升的革命,而效率通常包括了開(kāi)發(fā)效率、運(yùn)維效率和運(yùn)營(yíng)效率等。如果說(shuō)Kubernetes專(zhuān)注提升容器集群的運(yùn)維管理效率,那么Serverless則從根源上擺脫服務(wù)器的運(yùn)維難題,使計(jì)算資源作為服務(wù)而不是服務(wù)器的概念出現(xiàn),從而將開(kāi)發(fā)人員的效率最大化。為了幫助企業(yè)更高效率部署業(yè)務(wù),更快實(shí)現(xiàn)持續(xù)交付、灰度發(fā)布、應(yīng)用編排等訴求,5月28日UCloud TIC(北京站)“云上效率提升”技術(shù)專(zhuān)場(chǎng),來(lái)自 UCloud的四位資深技術(shù)專(zhuān)家圍繞該主題進(jìn)行了深入的技術(shù)探討和實(shí)踐案例分享。
基于Kubernetes構(gòu)建容器云平臺(tái)的實(shí)踐
基于Kubernetes自動(dòng)化部署、彈性伸縮和容器化等特性,UCloud針對(duì)內(nèi)部研發(fā)人員和外部用戶(hù)分別構(gòu)建了容器云平臺(tái),UCloud實(shí)驗(yàn)室負(fù)責(zé)人葉理燈在會(huì)上分享了這兩套容器云平臺(tái)的技術(shù)實(shí)踐原理。
?
UCloud內(nèi)部容器云平臺(tái)(簡(jiǎn)稱(chēng)KUN)的底層是基于Kubernetes搭建的,主要的實(shí)現(xiàn)方法之一是K8S+Docker,通過(guò)Docker提高運(yùn)維部署效率和運(yùn)維環(huán)境的一致性,通過(guò)K8S實(shí)現(xiàn)跨可用區(qū)容災(zāi)和AutoScaling能力,從而實(shí)現(xiàn)高可用、在線(xiàn)升級(jí)、自動(dòng)擴(kuò)縮、負(fù)載均衡、日志查看、資源監(jiān)控等多種功能。
圖:內(nèi)部云平臺(tái)的架構(gòu)圖
葉理燈提到,在構(gòu)建內(nèi)部容器云平臺(tái)KUN的過(guò)程中要解決四個(gè)主要問(wèn)題:1.多租戶(hù)隔離的問(wèn)題,保證業(yè)務(wù)之間互相不受干擾;2.IPv6的問(wèn)題,如何保證跟IPv4網(wǎng)絡(luò)兼容;3.如何用Operator來(lái)管理有狀態(tài)的服務(wù);4.監(jiān)控問(wèn)題。
對(duì)應(yīng)的解決方案分別是:
1.基于RBAC來(lái)實(shí)現(xiàn)賬號(hào)管理隔離,選擇Token認(rèn)證方式,通過(guò)服務(wù)賬號(hào)SA(Service Account)模擬普通用戶(hù)User,所有模擬賬號(hào)的SA放置同?個(gè)NS,進(jìn)行統(tǒng)?管理;定制權(quán)限組ClusterRole,通過(guò)授予模擬賬號(hào)SA的不同權(quán)限組,來(lái)控制不同User在NS中的不同權(quán)限。抽象Project對(duì)象給User使用,Project與每個(gè)集群的NS??對(duì)應(yīng),User在每個(gè)集群上都有對(duì)應(yīng)模擬賬號(hào)用于NS授權(quán)。
2.針對(duì)IPv6的問(wèn)題,接入6to4 Tunnel和Bridge網(wǎng)橋,核心基礎(chǔ)網(wǎng)絡(luò)無(wú)需修改,采用underlay,實(shí)現(xiàn)Pod與集群外部互通。Service全網(wǎng)可訪(fǎng)問(wèn),ClusterIP在K8S集群外部可以直接訪(fǎng)問(wèn),分配一個(gè)Ipv4地址,在Kubernetes集群下的所有介入交換機(jī)上宣告,該IPv4地址對(duì)應(yīng)的6to4地址作為該Kubernetes集群ServiceIP地址段。Pod返回的包,會(huì)先回給Service Gatevay,由于做了SNAT,基于連接追蹤(conntrack),再返回給請(qǐng)求的客戶(hù)端。
3.在KUN中使用Operator,為用戶(hù)提供可視化 Web 操作頁(yè)面,簡(jiǎn)化對(duì)各類(lèi)自定義資源的管理操作。 用戶(hù)不需要詳細(xì)理解具體的 CRD 結(jié)構(gòu),就可以在Web 頁(yè)面上快速創(chuàng)建?個(gè) Redis 集群,并且可以看到集群?步步創(chuàng)建的過(guò)程。同時(shí)還可以對(duì)集群進(jìn)行配置更新、刪除等操作。
4.監(jiān)控系統(tǒng)方案基于Prometheus構(gòu)建,Prometheus部署于K8S集群中,使用HostPath存儲(chǔ)數(shù)據(jù)、Metrics采集,使用Alert Manager 聚合報(bào)警,調(diào)用 Monitor Manager 提供的 Web Hook;自研 Monitor Manager:使用Grafana 實(shí)現(xiàn) Web 可視化;
而UK8S是基于Kubernetes的對(duì)外部用戶(hù)的容器管理服務(wù),用戶(hù)可以在UK8S上部署、管理、擴(kuò)展容器化應(yīng)用,而無(wú)需關(guān)心Kubernetes集群自身的搭建及維護(hù)等運(yùn)維類(lèi)工作。除此之外,UK8S還完全兼容原生的KubernetesAPI、以UCloud私有網(wǎng)絡(luò)為基礎(chǔ),并整合了ULB、UDisk、EIP、VPC等云產(chǎn)品。
?
UK8S集群網(wǎng)絡(luò)通過(guò)自研CNI插件與VPC網(wǎng)絡(luò)深度集成、利用Secondary IP API實(shí)現(xiàn)IP管理、無(wú)overlay性能與云主機(jī)一致、Pod網(wǎng)絡(luò)可與物理云托管云直接互通。
最后,葉理燈總結(jié)了UK8S管理服務(wù)的特點(diǎn)如下:
??? A、完全的容器化和微服務(wù)化。
??? B、所有管理服務(wù)全部運(yùn)行在K8S上。
??? C、基于K8S的API對(duì)服務(wù)模塊進(jìn)行動(dòng)態(tài)管理。
??? D、一個(gè)集群對(duì)應(yīng)生成一個(gè)watcher,容易進(jìn)行橫向擴(kuò)展。
??? E、基于watcher+redis緩存的方式,保證用戶(hù)在控制臺(tái)獲取集群信息的速度足夠快。
利用StepFlow快速可視化的構(gòu)建新業(yè)務(wù)
開(kāi)發(fā)人員在構(gòu)建應(yīng)用服務(wù)的時(shí)候通常會(huì)寫(xiě)很多業(yè)務(wù)邏輯,還需要調(diào)用大量API或者服務(wù)接口,這個(gè)過(guò)程會(huì)出現(xiàn)很多問(wèn)題,比如要寫(xiě)很多代碼才能要調(diào)用這些API、某個(gè)功能開(kāi)發(fā)完成后還需要后期維護(hù)。開(kāi)發(fā)完成之后還要進(jìn)行發(fā)布,除了本地去編寫(xiě)代碼、調(diào)試,發(fā)布上線(xiàn)還要申請(qǐng)物理資源,中間可能還需要各個(gè)團(tuán)隊(duì)的協(xié)作,整個(gè)流程非常長(zhǎng)。
?
UCloud技術(shù)總監(jiān)蒙曉?xún)粽f(shuō)到:“以上這些問(wèn)題其實(shí)都屬于在研發(fā)過(guò)程中產(chǎn)生的隱性成本,那么有沒(méi)有一種產(chǎn)品能夠讓我們解決上面的這些問(wèn)題?用可視化的頁(yè)面,比如畫(huà)一個(gè)流程圖把我的想法表達(dá)出來(lái),把流程圖轉(zhuǎn)換后立刻實(shí)現(xiàn)所要的業(yè)務(wù)功能。”答案是StepFlow產(chǎn)品,它是一個(gè)通過(guò)可視化的方式去編排API和微服務(wù)的服務(wù)平臺(tái),應(yīng)用開(kāi)發(fā)的時(shí)候可以在不寫(xiě)代碼的情況下完成新的功能的組裝、新的服務(wù)接口的發(fā)布。
?
為幫助大家進(jìn)一步了解StepFlow如何快速構(gòu)建業(yè)務(wù),蒙曉?xún)艚榻B了四個(gè)應(yīng)用場(chǎng)景:
1.? 實(shí)現(xiàn)一個(gè)串行流程。這個(gè)場(chǎng)景的案例來(lái)自于愛(ài)普新媒體,在使用USQL進(jìn)行數(shù)據(jù)分析之后,希望把這個(gè)分析結(jié)果導(dǎo)入到數(shù)據(jù)庫(kù)里面進(jìn)行二次保存,在導(dǎo)入完成后可以發(fā)一個(gè)短信給相關(guān)的人員通知任務(wù)完成或者失敗。在這個(gè)過(guò)程中愛(ài)普新媒體用到了很多USQL、UFile、StepFlow、UDTS、短信包、數(shù)據(jù)庫(kù)等產(chǎn)品,而StepFlow在這里相當(dāng)于起到中樞的作用,把各個(gè)產(chǎn)品關(guān)聯(lián)到一起。
2.? 實(shí)現(xiàn)一個(gè)并行的流程,這里舉一個(gè)UMedia媒體工廠的產(chǎn)品使用場(chǎng)景,它的功能是對(duì)視頻做各種處理,通常需要在一個(gè)視頻文件上傳到UFile之后,對(duì)它做多個(gè)視頻處理任務(wù),例如多種格式轉(zhuǎn)換、打水印、截圖等等。在這個(gè)場(chǎng)景中StepFlow把UFile、UMedia關(guān)聯(lián)到了一起,更關(guān)鍵的是它不僅局限于UCloud的產(chǎn)品,StepFlow還能夠與用戶(hù)自己的業(yè)務(wù)服務(wù)進(jìn)行交互關(guān)聯(lián),調(diào)用第三方的Http,提供了極大的業(yè)務(wù)想象空間。
3.? 實(shí)現(xiàn)調(diào)用子工作流,已創(chuàng)建的工作流能夠變成子工作流,被其他工作流調(diào)用。類(lèi)似于各種編程語(yǔ)言中標(biāo)準(zhǔn)庫(kù)提供的公共函數(shù),或是業(yè)務(wù)框架自行封裝的函數(shù);可以提前構(gòu)造常用的公共流程,方便使用。
4.如何更新業(yè)務(wù)&快速發(fā)布?這里StepFlow是通過(guò)多版本管理的方式來(lái)解決這個(gè)問(wèn)題。例如當(dāng)前正式業(yè)務(wù)使用的是版本V1,如果要對(duì)V1進(jìn)行修改,我們可以基于V1新增一個(gè)步驟NewStep并保存,只要是僅保存不發(fā)布,正常的流量是不會(huì)流入的。通過(guò)這樣的方式也可以確保流程編輯不會(huì)影響正式的業(yè)務(wù)。然后通過(guò)指定版本的方式進(jìn)行調(diào)試,最后確認(rèn)無(wú)誤后再進(jìn)行發(fā)布。以這樣的多版本功能還可以實(shí)現(xiàn)類(lèi)似灰度控制的方案。
圖:傳統(tǒng)研發(fā)路徑和StepFlow流程對(duì)比
大家可以看到,在以上四個(gè)場(chǎng)景實(shí)現(xiàn)的整個(gè)過(guò)程中我們并沒(méi)有申請(qǐng)任何物理資源,甚至也不需要關(guān)心底下的物理資源使用情況怎么樣,這充分表明了StepFlow本質(zhì)上是一個(gè)Serverless的服務(wù),這些事情都是StepFlow服務(wù)在后端進(jìn)行動(dòng)態(tài)的管理和調(diào)度的。同時(shí),在這樣的前提下,用戶(hù)就可以集中更多精力在自己的業(yè)務(wù)上,優(yōu)化自己的產(chǎn)品,從而獲得更大的價(jià)值。
基于Serverless的數(shù)據(jù)湖分析引擎USQL實(shí)戰(zhàn)
“我曾經(jīng)作為一線(xiàn)的大數(shù)據(jù)開(kāi)發(fā)工程師,經(jīng)歷過(guò)很多諸如組件版本沖突、維度膨脹、硬件故障、臟數(shù)據(jù)、集群更換、數(shù)據(jù)丟失等問(wèn)題,經(jīng)常半夜三四點(diǎn)爬起來(lái)加班進(jìn)行數(shù)據(jù)排測(cè)的工作。為了解決這些困擾,我加入U(xiǎn)Cloud之后希望做出的大數(shù)據(jù)產(chǎn)品具備成本低、分析簡(jiǎn)單、無(wú)需運(yùn)維三大特點(diǎn)。”UCloud產(chǎn)品總監(jiān)張曉康說(shuō)到。用戶(hù)都希望數(shù)據(jù)創(chuàng)造的價(jià)值越大越好,而相關(guān)的成本投入能夠趨于收斂,因此2018年10月份UCloud發(fā)布了一款基于Serverless的SQL分析計(jì)算引擎USQL(數(shù)據(jù)湖分析),企業(yè)無(wú)需數(shù)據(jù)庫(kù)管理員和運(yùn)維人員即可完成面向海量數(shù)據(jù)的數(shù)據(jù)建模、SQL數(shù)據(jù)查詢(xún)分析等工作。
舉一個(gè)案例:愛(ài)普新媒體每天的數(shù)據(jù)日增量是300G、總量120T,每天運(yùn)行50個(gè)Hive SQL實(shí)例, 大數(shù)據(jù)團(tuán)隊(duì)4-5個(gè)人,每年150萬(wàn)的人力投入。設(shè)備上的成本每年折舊下來(lái)大概是60萬(wàn),托管費(fèi)用大概每年30萬(wàn),最終計(jì)算下來(lái)的結(jié)果是131.5元/SQL。針對(duì)這個(gè)場(chǎng)景,UCloud幫助用戶(hù)利用對(duì)象存儲(chǔ)UFile優(yōu)化存儲(chǔ)成本,再通過(guò)USQL節(jié)省計(jì)算成本。“我們將Kafka存儲(chǔ)規(guī)模龐大的全量原始廣告日志數(shù)據(jù)放到UFile,無(wú)需加載數(shù)據(jù),直接通過(guò)SQL分析UFile數(shù)據(jù)再交給USQL,研發(fā)人力投入為0,大數(shù)據(jù)消費(fèi)降低了92.85%,需求完成周期從原來(lái)的43.2小時(shí)降低到2小時(shí)。”愛(ài)普新媒體CTO牛德恒總結(jié)到。
在數(shù)據(jù)探索場(chǎng)景,普遍存在的問(wèn)題有數(shù)據(jù)格式不固定、數(shù)據(jù)規(guī)模大、沒(méi)有元數(shù)據(jù)、分析目標(biāo)不明確等,USQL由于支持豐富的數(shù)據(jù)格式、計(jì)算與存儲(chǔ)分離、元數(shù)據(jù)與數(shù)據(jù)分離、快速SQL分析等特性占據(jù)了絕對(duì)的優(yōu)勢(shì)。未來(lái),UQSL產(chǎn)品將持續(xù)完善新的功能,例如支持JDBC的驅(qū)動(dòng)、數(shù)據(jù)加密——協(xié)同UKMS(密鑰管理服務(wù))、CREATETABLE AS SELECT(CTAS)等。
云主機(jī)并發(fā)創(chuàng)建優(yōu)化實(shí)例及用戶(hù)價(jià)值
不同行業(yè)的客戶(hù)可能對(duì)云主機(jī)并發(fā)創(chuàng)建都有需求,最常見(jiàn)的場(chǎng)景有電商大促、動(dòng)畫(huà)渲染、營(yíng)銷(xiāo)活動(dòng)、教育培訓(xùn)等。在這些場(chǎng)景下,用戶(hù)往往需要用盡可能短的時(shí)間創(chuàng)建上百臺(tái)甚至上萬(wàn)臺(tái)云主機(jī)來(lái)應(yīng)對(duì)業(yè)務(wù)的高峰期。UCloud資深研發(fā)工程師齊良在現(xiàn)場(chǎng)分享了云主機(jī)并發(fā)創(chuàng)建的后臺(tái)優(yōu)化實(shí)踐方案。
?
針對(duì)本地盤(pán)主機(jī),虛擬機(jī)鏡像從鏡像倉(cāng)庫(kù)復(fù)制到宿主機(jī)再拷貝到虛擬機(jī)大概需要300秒,如果我們將鏡像文件提前部署到宿主機(jī)上,那么從宿主機(jī)上拷貝鏡像到虛擬機(jī)的時(shí)間就只需要30秒,這個(gè)方案在UCloud早期機(jī)房規(guī)模不是很大的時(shí)候還能適用。但到后期顯然不行,因此UCloud開(kāi)發(fā)了BlockStreaming技術(shù),從而使單臺(tái)云主機(jī)的創(chuàng)建時(shí)間小于10秒。
?
針對(duì)云盤(pán)主機(jī)的開(kāi)機(jī)需要鏡像完全復(fù)制、復(fù)制時(shí)間長(zhǎng)、鏡像倉(cāng)庫(kù)帶寬瓶頸問(wèn)題,UCloud研發(fā)了Koala鏡像系統(tǒng),實(shí)現(xiàn)了鏡像分片存儲(chǔ)、并發(fā)拷貝,有效的解決了由于復(fù)制導(dǎo)致開(kāi)機(jī)時(shí)間長(zhǎng)的問(wèn)題,最終使得單臺(tái)云主機(jī)創(chuàng)建時(shí)間小于15秒。如果要進(jìn)行批量創(chuàng)建,我們采取的方案是鏡像分片在UDisk內(nèi)部進(jìn)行P2P分發(fā)、同?個(gè)鏡像只從Koala復(fù)制?次 、UDisk只緩存熱門(mén)鏡像,最后的效果是平均單臺(tái)創(chuàng)建時(shí)間6s秒100臺(tái)耗時(shí)10分鐘。然而這個(gè)時(shí)間還是不能夠滿(mǎn)足很多用戶(hù)的需求,于是我們進(jìn)一步優(yōu)化的手段是異步返回、并發(fā)申請(qǐng)資源、優(yōu)化IP地址申請(qǐng),最后100臺(tái)耗時(shí)約5分鐘;如果在批量創(chuàng)建100臺(tái)云主機(jī)的代碼中采用批量創(chuàng)建API接口可能耗時(shí)只需要2分鐘,用戶(hù)看到的可能只是改了API接口,但這只是背后復(fù)雜邏輯的冰山一角。
?
由于Koala鏡像系統(tǒng)的限制是24臺(tái)物理機(jī)、1000M網(wǎng)口、云主機(jī)拉取鏡像20Mbps,我們經(jīng)過(guò)計(jì)算這個(gè)系統(tǒng)最大只能支持150臺(tái)并發(fā)創(chuàng)建。如果要實(shí)現(xiàn)同時(shí)創(chuàng)建1萬(wàn)臺(tái)云主機(jī),就需要提前預(yù)約資源、利用空閑資源加速創(chuàng)建 、突破Koala系統(tǒng)?網(wǎng)絡(luò)瓶頸,基于這個(gè)想法我們又開(kāi)發(fā)了鏡像Cache系統(tǒng)。鏡像Cache系統(tǒng)里面的空閑資源是成千上萬(wàn)的,可以假設(shè)這種帶寬是沒(méi)有限制的,基本就可以解決Koala鏡像系統(tǒng)的帶寬問(wèn)題。
齊良最后補(bǔ)充說(shuō):“后臺(tái)做了這么多的優(yōu)化之后,導(dǎo)致最終的系統(tǒng)也非常復(fù)雜,出問(wèn)題的概率會(huì)比較大。為了保證系統(tǒng)的穩(wěn)定性,我們需要對(duì)系統(tǒng)進(jìn)行改造,要把這個(gè)系統(tǒng)做的足夠簡(jiǎn)單,包括建造周期要短,調(diào)度和鏡像拉取的邏輯也要更簡(jiǎn)單。最終體現(xiàn)在架構(gòu)上就是關(guān)鍵路徑要短、核心邏輯要簡(jiǎn)單、非核心服務(wù)可插拔以及兜底策略。”
?
關(guān)于本次技術(shù)專(zhuān)場(chǎng)的更多演講內(nèi)容,歡迎關(guān)注“UCloud技術(shù)”公眾號(hào)回復(fù)“TIC”獲取講師PPT。
總結(jié)
以上是生活随笔為你收集整理的云上效率提升指南 | K8S和Serverless还能这么玩的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机网络的协议与体系结构
- 下一篇: 一份完整的机房建设方案