對于程序員來說,什么才最為重要
?一筆高達(dá)50萬的巨額獎金罐栈?
?一個和千萬程序員一同賽跑的游戲黍衙?
?一次挑戰(zhàn)雙11萬億級服務(wù)調(diào)用的機(jī)會?
場主認(rèn)為荠诬,敲碼路上琅翻,我們所追求的是不斷進(jìn)階的自我提升!
4月26號柑贞,2018云棲大會南京峰會上方椎,阿里巴巴研究員林昊正式發(fā)布了第四屆阿里中間件性能挑戰(zhàn)賽。
這是首次把賽題設(shè)置在開源背景上钧嘶,旨在讓更多技術(shù)開發(fā)者參與其中棠众。
挑戰(zhàn)賽以開源項目為背景,核心技術(shù)為Dubbo和RocketMQ有决,目的是通過大賽向技術(shù)愛好者們傳達(dá)開源精神闸拿。
林昊在發(fā)布中表示,“對于開發(fā)人員來講书幕,很多工作都使用了開源的東西胸墙,開源對整個世界也產(chǎn)生了非常大的影響。對阿里來講也同樣按咒,阿里巴巴也同樣使用了開源的軟件,在這個過程中但骨,我們結(jié)合阿里的場景励七,對整個開源的產(chǎn)品進(jìn)行了很多的改進(jìn),也不斷開始回饋到社區(qū)奔缠÷犹В”
而且!此次大賽還收到了JimJagielski (Apache基金會聯(lián)合創(chuàng)始人)的祝福哦P0ァA讲ā瞳步!
感興趣的同學(xué)可以直接長按以上二維碼或戳中以下鏈接進(jìn)行報名了!
https://tianchi.aliyun.com/markets/tianchi/aliware2018contest?spm=5176.100065.5490641.1.31fe67b7UN1OQ0(若未能跳轉(zhuǎn)腰奋,煩請復(fù)制鏈接至瀏覽器打開)
從2017年起单起,阿里巴巴開源的步伐正在加速。
2017年9月劣坊,RocketMQ在Apache畢業(yè)嘀倒,成立了Apache頂級項目(TLP)。
10月份局冰,OpenMessaging發(fā)布测蘑,分布式消息中間件、流處理領(lǐng)域的應(yīng)用開發(fā)標(biāo)準(zhǔn)康二,目前已正式入駐Linux基金會碳胳,這也是國內(nèi)首個在全球范圍內(nèi)發(fā)起的分布式消息領(lǐng)域國際標(biāo)準(zhǔn)。
11月沫勿,社區(qū)突然熱鬧起來挨约,Dubbo快速更新,引發(fā)了非常廣泛的關(guān)注藕帜。
今年烫罩,Dubbo進(jìn)入了Apache,目前正在孵化期洽故。
Apache基金會聯(lián)合創(chuàng)始人 Jim Jagielski?表示:“ Apache頂級項目RocketMQ是一個極其強(qiáng)大且具有變革性的軟件項目贝攒,眾多公司都是它的深度用戶。Dubbo目前正在Apache軟件基金會內(nèi)孵化时甚,具有巨大的潛力隘弊。”
賽題深度解析
賽題解析
了解 Dubbo 的朋友們都知道荒适,Dubbo不僅僅是一款高性能的 RPC 通訊框架梨熙,更是一套完整的微服務(wù)解決方案——服務(wù)注冊與發(fā)現(xiàn)、負(fù)載均衡刀诬、服務(wù)治理等咽扇,這些都是我們耳熟能詳?shù)哪芰Α5?Dubbo 也有著天然的不足陕壹,初賽的題目便由此而來质欲。
初衷
Dubbo 一直致力于為 Java 應(yīng)用提供高效、穩(wěn)定和可用于生產(chǎn)環(huán)境的RPC通訊能力糠馆。在不使用 RESTful 接口的情況下嘶伟,用戶很難將 Dubbo 與其它語言實(shí)現(xiàn)的系統(tǒng)對接起來。
因此本次比賽將打破語言的藩籬又碌,參賽團(tuán)隊可以盡情選取你最中意的技術(shù)九昧,主流的也好绊袋,非主流的也罷——We don't care——讓 Dubbo 在多語言的方向上邁出第一步。
“ 提到 Dubbo 就不能不說微服務(wù)铸鹰,而言及微服務(wù)就一定有 Service Mesh 的一席之地癌别。”
傳統(tǒng)的微服務(wù)向我們展現(xiàn)了服務(wù)化的未來藍(lán)圖掉奄,也提供了諸多方法論和最佳實(shí)踐指導(dǎo)我們完成架構(gòu)的變革规个。但是顯然實(shí)施過微服務(wù)的朋友們都一定清楚,這是一個異常復(fù)雜且充滿了不確定性的改造過程姓建。
將單體系統(tǒng)剝離诞仓、引入服務(wù)化組件(如果 Dubbo 不是你的第一選擇,你更有理由關(guān)注本次比賽了)速兔、將內(nèi)部調(diào)用轉(zhuǎn)化為遠(yuǎn)程調(diào)用墅拭、解決因?yàn)檎{(diào)用遠(yuǎn)程化和分布化而帶來的各種次生問題(網(wǎng)絡(luò)問題、安全問題涣狗、狀態(tài)管理問題谍婉、一致性問題等等)。
在擁有復(fù)雜系統(tǒng)的組織內(nèi)部镀钓,這樣的改造不亞于夢魘穗熬。想想看要把各種不標(biāo)準(zhǔn)的 Java 應(yīng)用、PHP 應(yīng)用丁溅、Python 應(yīng)用等全部打通且服務(wù)化唤蔗,不是你在做夢,就是客戶在做夢窟赏。
可這樣的夢境就是我們要面對的現(xiàn)實(shí)妓柜,而Service Mesh 無疑是夢境架構(gòu)師遞給你的一根救命稻草。簡言之涯穷,Service Mesh 另辟蹊徑棍掐,在不深入服務(wù)內(nèi)部的情況下,以 Agent 的形式與服務(wù)共生拷况,并由 Agent 提供一切微服務(wù)所需要的能力作煌。
正如其名稱所揭示的那樣,Service Mesh 就如同一張網(wǎng)格赚瘦,將各種服務(wù)網(wǎng)羅在其下最疆。這次初賽的題目就是希望參賽選手編寫一個高性能的 Agent 實(shí)現(xiàn),讓 Dubbo 融入 Service Mesh 這張大網(wǎng)蚤告。
場景
在本次比賽中,并不需要實(shí)現(xiàn)一套完整的Service Mesh 框架服爷,因此我們對場景進(jìn)行了限定杜恰。
得益于 Docker 提供的容器化能力获诈,讓我們可以很方便的模擬出想要的場景。如圖所示心褐,整個場景由 5 個 Docker 實(shí)例組成(藍(lán)色的方框)舔涎,分別運(yùn)行了 etcd、Consumer逗爹、Provider 服務(wù)(綠色的方框)和 Agent 代理(紅色的圓圈)亡嫌。
Provider 是服務(wù)提供者,Consumer是服務(wù)消費(fèi)者掘而,Consumer 消費(fèi) Provider 提供的服務(wù)挟冠。Agent 是 Consumer 和 Provider 服務(wù)的代理,每個 Consumer 或 Provider 都會伴隨一個共生的 Agent袍睡。etcd 是注冊表服務(wù)知染,用來記錄服務(wù)注冊信息。
從圖中可以看出斑胜,Consumer 與 Provider 之間的通訊并不是直接進(jìn)行的控淡,而是經(jīng)過了 Agent 的中轉(zhuǎn)。這看似多余的一環(huán)止潘,卻在 Service Mesh 的架構(gòu)中扮演著舉足輕重的角色掺炭。
首先,Agent 需要實(shí)現(xiàn)負(fù)載均衡的能力凭戴。在圖中涧狮,藍(lán)色方框的大小代表了容器的性能。我們可以發(fā)現(xiàn)簇宽,一個Consumer 實(shí)例的性能是三個Provider 實(shí)例性能的總和勋篓,而且三個 Provider 的性能又是以1:2:3的比例分配的。假如整個系統(tǒng)性能是60魏割,則 Consumer 占30譬嚣,Provider(small) 占 5,Provider(medium) 占10钞它,Provider(large) 占15拜银。因此任何一個 Provider 服務(wù)的性能都比 Consumer 要小,Agent 必須做到負(fù)載均衡才能保證任意一個 Provider 服務(wù)不會被壓垮遭垛。
第二尼桶,Agent 需要實(shí)現(xiàn)服務(wù)注冊與發(fā)現(xiàn)的能力。服務(wù)注冊與發(fā)現(xiàn)是微服務(wù)的核心能力锯仪,Consumer Agent 具體要訪問哪一個 Provider Agent 不是在配置文件中寫死的泵督,而是動態(tài)發(fā)現(xiàn)的。簡單來說庶喜,當(dāng)Agent 啟動的時候小腊,需要將自己的信息寫入 etcd 注冊表救鲤,在服務(wù)調(diào)用發(fā)生的時候,再從 etcd 中讀取相關(guān)的注冊信息秩冈,這個過程就是最簡單的服務(wù)注冊與發(fā)現(xiàn)本缠。
第三,Agent 需要實(shí)現(xiàn)協(xié)議轉(zhuǎn)換的能力入问。Service Mesh 的一大特色就是可以實(shí)現(xiàn)不同語言丹锹、不同框架、不同協(xié)議間服務(wù)的互聯(lián)互通芬失,靠的就是其協(xié)議轉(zhuǎn)換的能力楣黍。在比賽設(shè)定的場景中,Consumer 使用 HTTP 協(xié)議麸折,而 Provider 使用 Dubbo 協(xié)議锡凝,在沒有 Agent 幫助的情況下,他們之間是無法通信的垢啼。
作為 Service Mesh Agent窜锯, 其實(shí)還有很多可以實(shí)現(xiàn)的功能,如流量控制芭析、服務(wù)降級或熔斷锚扎、安全認(rèn)證等等,但以上三點(diǎn)是本次比賽必須做到的能力馁启,其他能力不做要求驾孔。
另外我們還要考慮 Agent 的通用性,一個不具有通用性的 Agent 是沒有商業(yè)價值的惯疙。除此之外翠勉,?Agent 占用的系統(tǒng)資源應(yīng)該盡量小,而且不和共生的服務(wù)爭搶資源霉颠,否則“皮之不存对碌,毛將焉附”。如果服務(wù)失去了響應(yīng)蒿偎,那么 Agent 的性能再好也沒有存在的意義了朽们。
跑分
跑分環(huán)境是由一臺 4 核 8G 的施壓機(jī)和一臺 8 核 16G 的被壓機(jī)組成。所有 5 個 Docker 實(shí)例均運(yùn)行在被壓機(jī)上诉位。每個項目的每一次跑分會獨(dú)占一臺被壓機(jī)骑脱。流程大致如下:
1.準(zhǔn)備跑分環(huán)境,創(chuàng)建并鎖定工作區(qū)
2.根據(jù)提交的地址苍糠,從鏡像倉庫中拉取鏡像
3.驗(yàn)證 Provider叁丧、Consumer 及啟動腳本文件的簽名,以妨被篡改
4.啟動 etcd 實(shí)例,并驗(yàn)證服務(wù)可用性
5.啟動三個 Provider 實(shí)例歹袁,并驗(yàn)證服務(wù)可用性
6.啟動 Consumer 實(shí)例坷衍,并驗(yàn)證服務(wù)可用性
7.以最高并發(fā)數(shù)對系統(tǒng)進(jìn)行預(yù)熱
8.分若干次不同的壓力水平,對系統(tǒng)進(jìn)行壓力測試条舔,并記錄 QPS 值
9.取最優(yōu)的 QPS 作為最終的跑分結(jié)果,并上報給天池系統(tǒng)
10.按順序依次停止 Consumer 實(shí)例乏矾、三個 Provider 實(shí)例和 etcd 實(shí)例
11.清理 Docker 實(shí)例及鏡像
12.收集日志并上傳到 OSS
13.解鎖工作區(qū)孟抗,清理環(huán)境
因?yàn)?b>本屆比賽不限語言、不限技術(shù)钻心,因此需要一種手段對選手的運(yùn)行環(huán)境進(jìn)行隔離凄硼。借助 Docker 鏡像,參賽選手可以隨意安裝運(yùn)行時環(huán)境捷沸、添加組件庫摊沉、并定制 Agent 的啟動腳本。
但需要注意的是:
“ 因?yàn)?Provider 和 Consumer 服務(wù)與 Agent 是共生的痒给,因此他們都是被打到同一個 Docker 鏡像中的说墨。”
我們在賽題設(shè)計的時候已經(jīng)對代碼進(jìn)行了充分的隔離苍柏,以保證選手只需要關(guān)注賽題允許修改的部分——與 Agent 有關(guān)的內(nèi)容尼斧。
但不管怎樣,由于構(gòu)建 Docker 鏡像的主動權(quán)在大家手里试吁,就勢必會有篡改 Provider 和 Consumer 及其啟動腳本的可能性存在棺棵。
所以,本著公平的原則熄捍,在跑分流程中增加了對相關(guān)文件驗(yàn)證簽名的過程烛恤,如果簽名不通過,將失去本次評測機(jī)會余耽。
優(yōu)化
因?yàn)閮?yōu)化過程是本次比賽關(guān)注的重點(diǎn)缚柏,因此不能做過多的展開,僅僅提供幾個參考的方向宾添。
1.使用協(xié)程船惨。協(xié)程可以理解為輕量級的線程,可以節(jié)約因?yàn)榫€程切換而造成的性能損失缕陕。
2.使用異步通訊粱锐。Agent 與 Agent 之間的通訊機(jī)制完全由選手自行控制,采用非阻塞的異步通訊機(jī)制可以有效提高系統(tǒng)性能扛邑。
3.使用緩存怜浅。合理緩存響應(yīng)結(jié)果,當(dāng)相同的請求再次到來的時候,調(diào)用鏈可以不必經(jīng)過系統(tǒng)中的每一個節(jié)點(diǎn)恶座,從而盡快返回搀暑。
以上分別從賽題初衷、應(yīng)用場景跨琳、跑分環(huán)境與過程以及少許優(yōu)化方向的角度自点,對本屆比賽的題目進(jìn)行了簡單的剖析,希望對即將參加比賽的親們能有所幫助脉让。在此預(yù)祝各位參賽選手能取得優(yōu)異的成績桂敛,進(jìn)軍復(fù)賽和總決賽。
注:阿里中間件性能挑戰(zhàn)賽是由阿里巴巴集團(tuán)發(fā)起溅潜,阿里巴巴中間件术唬、阿里云天池聯(lián)合承辦的工程視角品牌賽事。自2015年開始已經(jīng)成功舉辦了三屆滚澜。
賽事的初衷是為熱愛技術(shù)的年輕人提供一個挑戰(zhàn)世界級技術(shù)問題的舞臺粗仓,希望選手在追求性能極致的同時,能深刻體會技術(shù)人的匠心精神设捐,用技術(shù)為全社會創(chuàng)造更大價值借浊。
大賽報名通道,點(diǎn)擊即可進(jìn)入挡育,是時候展現(xiàn)真正的技術(shù)了巴碗!
https://tianchi.aliyun.com/markets/tianchi/aliware2018contest?spm=5176.100065.5490641.1.31fe67b7UN1OQ0(若未能跳轉(zhuǎn),煩請復(fù)制鏈接至瀏覽器打開)