瓜分60万现金大奖,云原生编程挑战赛等你来挑战!
作者 | 項(xiàng)升
2021 年第二屆云原生編程挑戰(zhàn)賽目前正在火熱招募中。本次大賽由阿里云、Intel 主辦,阿里云云原生、阿里云天池承辦。自 2015 年開(kāi)始,大賽已經(jīng)成功舉辦了六屆,并從 2020 年開(kāi)始升級(jí)為云原生編程挑戰(zhàn)賽,共吸引超過(guò) 23000 支隊(duì)伍,覆蓋 10 余個(gè)國(guó)家和地區(qū)。
本屆大賽將繼續(xù)深度探索 RocketMQ、Dubbo3、Serverless 三大熱門(mén)技術(shù)領(lǐng)域,為熱愛(ài)技術(shù)的年輕人提供一個(gè)挑戰(zhàn)世界級(jí)技術(shù)問(wèn)題的舞臺(tái),希望選手用技術(shù)為全社會(huì)創(chuàng)造更大價(jià)值。初賽我們共準(zhǔn)備了三個(gè)賽道供選手選擇,你準(zhǔn)備好了嗎?
本文主要解密賽道二:實(shí)現(xiàn)一個(gè)柔性集群調(diào)度機(jī)制,希望給選手們提供一些思路。
瓜分60萬(wàn)現(xiàn)金大獎(jiǎng),三大賽道任意選擇,
更有奇葩任務(wù)定義拿獎(jiǎng)新姿勢(shì),快快點(diǎn)擊報(bào)名吧!👇
https://tianchi.aliyun.com/competition/entrance/531923/introduction?spm=5176.12281925.0.0.58987137KRXtxf
1、賽題背景
云原生帶來(lái)了技術(shù)標(biāo)準(zhǔn)化的重大變革,如何讓?xiě)?yīng)用在云上更簡(jiǎn)單地創(chuàng)建和運(yùn)行,并具備可彈性擴(kuò)展的能力,是所有云原生基礎(chǔ)組件的核心目標(biāo)。借助云原生技術(shù)帶來(lái)的彈性能力,應(yīng)用可以在極短時(shí)間內(nèi)擴(kuò)容出一大批機(jī)器以支撐業(yè)務(wù)需要。
比如為了應(yīng)對(duì)零點(diǎn)秒殺場(chǎng)景或者突發(fā)事件,應(yīng)用本身往往需要數(shù)千甚至數(shù)萬(wàn)的機(jī)器數(shù)來(lái)提升性能以滿(mǎn)足用戶(hù)的需要,但是在擴(kuò)容的同時(shí)也帶來(lái)了諸如集群節(jié)點(diǎn)極多導(dǎo)致的節(jié)點(diǎn)異常頻發(fā)、服務(wù)容量受多種客觀因素影響導(dǎo)致節(jié)點(diǎn)服務(wù)能力不均等一系列的在云原生場(chǎng)景下集群大規(guī)模部署的問(wèn)題。
Dubbo 期待基于一種柔性的集群調(diào)度機(jī)制來(lái)解決這些問(wèn)題。這種機(jī)制主要解決的問(wèn)題有兩個(gè)方面:一是在節(jié)點(diǎn)異常的情況下,分布式服務(wù)能夠保持穩(wěn)定,不出現(xiàn)雪崩等問(wèn)題;二是對(duì)于大規(guī)模的應(yīng)用,能夠以最佳態(tài)運(yùn)行,提供較高的吞吐量和性能。
從單一服務(wù)視角看,Dubbo 期望的目標(biāo)是對(duì)外提供一種壓不垮的服務(wù),即在請(qǐng)求數(shù)特別高的情況下,可以通過(guò)選擇性地拒絕一些請(qǐng)求來(lái)保證總體業(yè)務(wù)的正確性、時(shí)效性。
從分布式視角看,要盡可能降低因?yàn)閺?fù)雜的拓?fù)洹⒉煌?jié)點(diǎn)性能不一導(dǎo)致總體性能的下降,柔性調(diào)度機(jī)制能夠以最優(yōu)的方式動(dòng)態(tài)分配流量,使異構(gòu)系統(tǒng)能夠根據(jù)運(yùn)行時(shí)的準(zhǔn)確服務(wù)容量合理分配請(qǐng)求,從而達(dá)到性能最優(yōu)。
2、賽題解析
集群的柔性調(diào)度正是指 Dubbo 能夠從全局的角度合理分配請(qǐng)求,達(dá)到集群的自適應(yīng)。具體來(lái)說(shuō)使消費(fèi)者能夠快速地感知服務(wù)端節(jié)點(diǎn)性能的隨機(jī)變化,通過(guò)調(diào)節(jié)發(fā)送往不同服務(wù)端節(jié)點(diǎn)的請(qǐng)求數(shù)比例分配變得更加合理,讓 Dubbo 即使遇到集群大規(guī)模部署帶來(lái)的問(wèn)題,也可以提供最優(yōu)的性能。
柔性調(diào)度機(jī)制主要解決的場(chǎng)景有以下這些:
- 多機(jī)房異地部署,網(wǎng)絡(luò)丟包嚴(yán)重
隨著業(yè)務(wù)不斷地發(fā)展,當(dāng)前業(yè)務(wù)觸達(dá)的用戶(hù)越來(lái)越多,服務(wù)端所需的計(jì)算容量也越來(lái)越大。另外由于應(yīng)用不斷龐大,在微服務(wù)架構(gòu)拆分的體系下依賴(lài)的上游應(yīng)用也在變多。而對(duì)于單一機(jī)房來(lái)說(shuō)所能提供的機(jī)器容量是有限的,因此不論是為了解決機(jī)器需求數(shù)大的問(wèn)題、亦或者是為了保證業(yè)務(wù)高可用做的異地多活的,多機(jī)房異地部署的場(chǎng)景對(duì)于業(yè)務(wù)方來(lái)說(shuō)多機(jī)房異地部署的情況變得越來(lái)越普遍。
涉及到多機(jī)房異地部署,對(duì)于同城部署,機(jī)房之間的網(wǎng)絡(luò)尚且可以使用租用裸光纖等方式保障網(wǎng)絡(luò)的穩(wěn)定,但是一旦多個(gè)機(jī)房部署在不同的城市、甚至是不同的國(guó)家,網(wǎng)絡(luò)丟包嚴(yán)重等問(wèn)題會(huì)越來(lái)越嚴(yán)重。
本次賽題通過(guò)模擬服務(wù)端隨機(jī)丟棄部分請(qǐng)求來(lái)模擬這種情況,旨在期望看到有一種自動(dòng)基于延時(shí)學(xué)習(xí),快速對(duì)調(diào)用進(jìn)行失敗返回的機(jī)制,不論是及時(shí)將失敗的結(jié)果返回給調(diào)用端或者是發(fā)起重試來(lái)保證服務(wù)的總體可用性的提高。
- 服務(wù)端處理性能有限,并發(fā)越大處理越慢
對(duì)于一般業(yè)務(wù)場(chǎng)景,單一服務(wù)往往不是單機(jī)的操作,更多的是需要連接如數(shù)據(jù)庫(kù)等三方組件,這些組件很多對(duì)于總體并發(fā)數(shù)是有上限的,也即是當(dāng)請(qǐng)求并發(fā)量達(dá)到一定值時(shí),剩下的請(qǐng)求會(huì)進(jìn)行排隊(duì),這將加大總體的處理延時(shí)。換個(gè)角度說(shuō),即使是在單機(jī)的視角來(lái)看,由于單機(jī)的 CPU 核心數(shù)是遠(yuǎn)小于并發(fā)線(xiàn)程數(shù)的,在并發(fā)數(shù)特別高的情況下,會(huì)花費(fèi)較多的資源用于上下文切換上。而且如果服務(wù)的并發(fā)數(shù)過(guò)大,亦很容易造成服務(wù)單點(diǎn)過(guò)熱的問(wèn)題,進(jìn)而演進(jìn)為單點(diǎn)服務(wù)被壓垮,這可能導(dǎo)致整個(gè)集群出現(xiàn)服務(wù)雪崩的現(xiàn)象。
下圖是以指數(shù)函數(shù)(評(píng)測(cè)時(shí)不應(yīng)依賴(lài)此模型)模擬并發(fā)數(shù)和延時(shí)之間關(guān)系時(shí),服務(wù)總吞吐量的對(duì)比圖。
可以看到,單位時(shí)間內(nèi)能處理的請(qǐng)求數(shù)并不是并發(fā)數(shù)越大就越高的。本次賽題希望看到有一種機(jī)制能夠自動(dòng)分析出上游服務(wù)的最佳請(qǐng)求并發(fā)數(shù),依次來(lái)達(dá)到單位時(shí)間內(nèi)成功請(qǐng)求的服務(wù)數(shù)更大。
- 宿主機(jī)性能超配,服務(wù)端性能不穩(wěn)定
隨著云原生時(shí)代的到來(lái),越來(lái)越多的應(yīng)用被部署在容器之中,不管是容器本身還是說(shuō)普通用戶(hù)上云使用的類(lèi)似阿里云 ECS 等 IaaS 設(shè)施,都是運(yùn)行在虛擬化環(huán)境之中的。但是在一個(gè)虛擬化環(huán)境中,宿主機(jī)的資源(包括CPU cache 和內(nèi)存帶寬)都是共享的。如果有一個(gè)消耗 CPU cache 的應(yīng)用快速消耗了 L3 緩存,或者一個(gè)應(yīng)用消耗了系統(tǒng)大量?jī)?nèi)存帶寬,都會(huì)對(duì)運(yùn)行在同一臺(tái)宿主機(jī)上的其他“鄰居”造成干擾。而往往應(yīng)用部署的時(shí)候很難預(yù)測(cè)到具體哪臺(tái)機(jī)器會(huì)出現(xiàn)這種情況,因此我們期待 RPC 服務(wù)框架可以主動(dòng)去適配這種波動(dòng),動(dòng)態(tài)調(diào)配機(jī)器間的調(diào)用比例,最終達(dá)到盡可能高的服務(wù)容量。
3、解題思路
- 容量評(píng)估
本題的設(shè)計(jì)目標(biāo)就是基于容量的自動(dòng)化調(diào)度機(jī)制,評(píng)估服務(wù)最佳容量是完成本題的前提,基于最大服務(wù)容量以及預(yù)期調(diào)用延遲可以為整體流量調(diào)度提供宏觀的數(shù)據(jù)基礎(chǔ)。一般集群的容量評(píng)估都是通過(guò)線(xiàn)上實(shí)際壓測(cè)來(lái)確定的,而關(guān)于運(yùn)行時(shí)的動(dòng)態(tài)計(jì)算可以基于如接口響應(yīng)的平均耗時(shí),P999 耗時(shí)、錯(cuò)誤率等數(shù)據(jù)進(jìn)行容量評(píng)估。同時(shí)應(yīng)該盡可能多地去評(píng)估各種情況下的容量,避免陷入局部最優(yōu)解。
基于不同服務(wù)端的容量信息,消費(fèi)端可以控制對(duì)服務(wù)端請(qǐng)求的并發(fā)量,達(dá)到總體請(qǐng)求數(shù)最高的目標(biāo)。
- 快速失敗
當(dāng)一個(gè)請(qǐng)求被服務(wù)端丟棄或者是網(wǎng)絡(luò)傳輸過(guò)程中丟棄時(shí),通常消費(fèi)端需要一段較長(zhǎng)的時(shí)間(超時(shí)時(shí)間配置)來(lái)發(fā)現(xiàn)這種情況。比如一個(gè)預(yù)期請(qǐng)求延時(shí)是 10ms 的,等到 5000ms 的超時(shí)時(shí)間才進(jìn)行報(bào)錯(cuò)重試的話(huà)會(huì)浪費(fèi)大量的時(shí)間在等待上面。如果可以基于預(yù)期的實(shí)際延時(shí)對(duì)具體的接口進(jìn)行快速失敗處理可以大大節(jié)約無(wú)效的等待時(shí)間。
- 自動(dòng)探測(cè)
由于服務(wù)端性能是實(shí)時(shí)在進(jìn)行變化的,因此對(duì)服務(wù)端的調(diào)用并發(fā)數(shù)不能一直固定在一個(gè)值上面,需要?jiǎng)討B(tài)地在一定范圍內(nèi)進(jìn)行試探,如果發(fā)現(xiàn)有更優(yōu)的容量則需要自動(dòng)調(diào)節(jié)調(diào)用參數(shù),最終盡可能達(dá)到所有時(shí)間的最優(yōu)解。
4、總結(jié)
本文從賽題背景、賽題解析和解題思路的角度,對(duì)本屆比賽題目進(jìn)行了分析,介紹了柔性集群調(diào)度算法的基本設(shè)計(jì)思路,希望對(duì)即將參加比賽的同學(xué)們能有所幫助。在此預(yù)祝各位參賽選手能取得優(yōu)異的成績(jī),進(jìn)軍復(fù)賽和總決賽,我們?cè)跊Q賽答辯等你。
5、報(bào)名方式
【賽道1】針對(duì)冷熱讀寫(xiě)場(chǎng)景的 RocketMQ 存儲(chǔ)系統(tǒng)設(shè)計(jì)
https://tianchi.aliyun.com/competition/entrance/531922/introduction?spm=5176.12281925.0.0.58987137KRXtxf
【賽道2】實(shí)現(xiàn)一個(gè)柔性集群調(diào)度機(jī)制
https://tianchi.aliyun.com/competition/entrance/531923/introduction?spm=5176.12281925.0.0.58987137KRXtxf
【賽道3】Less is more - Serverless創(chuàng)新應(yīng)用賽
https://tianchi.aliyun.com/competition/entrance/531924/introduction?spm=5176.12281925.0.0.58987137KRXtxf
戳👇立刻報(bào)名參賽:
https://tianchi.aliyun.com/competition/entrance/531923/introduction?spm=5176.12281925.0.0.58987137KRXtxf
原文鏈接:https://developer.aliyun.com/article/788075?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶(hù)自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開(kāi)發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開(kāi)發(fā)者社區(qū)用戶(hù)服務(wù)協(xié)議》和《阿里云開(kāi)發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫(xiě)侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的瓜分60万现金大奖,云原生编程挑战赛等你来挑战!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AI让边缘更智能,边缘让AI无处不在
- 下一篇: 阿里云IoT Studio升级版新增解决