淘宝应用柔性架构的探索
導(dǎo)讀:隨著淘寶業(yè)務(wù)的飛速發(fā)展,微服務(wù)架構(gòu)在持續(xù)演進(jìn)的過(guò)程中,也受到了越來(lái)越多的挑戰(zhàn):如同步模型帶來(lái)的資源利用率有限、依賴(lài)調(diào)用并發(fā)度有限、下游故障引發(fā)應(yīng)用自身出問(wèn)題;又如靜態(tài)限流隨著業(yè)務(wù)代碼的演進(jìn)、依賴(lài)拓?fù)涞淖兓⒉渴瓠h(huán)境的調(diào)整,而造成過(guò)時(shí)引起的穩(wěn)定性隱患等挑戰(zhàn)。
ArchSummit(全球架構(gòu)師峰會(huì))上淘寶高級(jí)技術(shù)專(zhuān)家——澤彬分享了為應(yīng)對(duì)這些挑戰(zhàn),淘寶基礎(chǔ)服務(wù)在淘系架構(gòu)升級(jí)上(代號(hào) Tango :Taobao Architecture Next GeneratiOn )對(duì)這些問(wèn)題的認(rèn)識(shí)以及讓?xiě)?yīng)用面對(duì)突發(fā)問(wèn)題時(shí)更具柔性(應(yīng)用柔性架構(gòu))的一些探索。
Reactive 全異步化
當(dāng)前我們的微服務(wù)主要是基于同步的調(diào)用模型,帶來(lái)了如下挑戰(zhàn):
- 同步等待造成應(yīng)用資源利用率很難進(jìn)一步提升
- 并發(fā)度有限,技術(shù)實(shí)現(xiàn)無(wú)法做到業(yè)務(wù)理想程度的并發(fā),導(dǎo)致 RT 增加
- 下游出現(xiàn)問(wèn)題會(huì)導(dǎo)致應(yīng)用本身出現(xiàn)問(wèn)題(如應(yīng)用等待下游響應(yīng)的線程會(huì)被長(zhǎng)時(shí)間阻塞)
為此,我們引入了基于 Reactive 編程模型,以全異步、可編排的能力,來(lái)應(yīng)對(duì)上述挑戰(zhàn):
- 通過(guò)全異步化使得資源利用率/性能進(jìn)一步提升
- 通過(guò)全異步化,編排能力,使對(duì)外調(diào)用的請(qǐng)求并發(fā)能夠突破原有并發(fā)線程的限制,做到極致并發(fā)
- 通過(guò)全異步化能力,使得應(yīng)用在等待依賴(lài)響應(yīng)的耦合資源從線程變成了回調(diào)對(duì)象,讓下游出問(wèn)題時(shí)對(duì)應(yīng)用自身的影響變得十分有限,從而提升了應(yīng)用本身的穩(wěn)定性。
基于 Reactive 全異步的解決方案打通了全棧,使得應(yīng)用能夠進(jìn)行全異步化升級(jí)。淘寶的一核心推薦應(yīng)用,在上線后 QPS 上漲了 90%+,另一核心應(yīng)用,上線后 RT 也下降了 40%。
關(guān)注穩(wěn)定性
在全異步化解決方案落地的同時(shí),我們也在持續(xù)關(guān)注著穩(wěn)定性。業(yè)務(wù)規(guī)模不斷的增加,對(duì)穩(wěn)定性的挑戰(zhàn)也在變得越來(lái)越大。盡管我們對(duì)穩(wěn)定性非常重視,但有時(shí)還是難免因一些錯(cuò)誤的判斷而導(dǎo)致了穩(wěn)定性問(wèn)題。
比如,在某次大型活動(dòng)中,我們的收獲地址出現(xiàn)了一些短暫不可用問(wèn)題;又比如,在另一次大型聯(lián)歡活動(dòng)中,我們的登錄系統(tǒng)也出現(xiàn)了短暫的不可用問(wèn)題。這兩個(gè)經(jīng)典的案例,都是在我們對(duì)應(yīng)用的容量、活動(dòng)的流量預(yù)估上出現(xiàn)了失誤而導(dǎo)致的問(wèn)題。
雖然通過(guò)限流,我們可以大幅度提升應(yīng)用在流量方面的穩(wěn)定性,但通過(guò)上述兩個(gè)案例,以及業(yè)務(wù)的不斷實(shí)踐,我們認(rèn)為,只使用靜態(tài)限流,系統(tǒng)還是會(huì)因?yàn)橐恍┎淮_定性因素而帶來(lái)穩(wěn)定性上的隱患和風(fēng)險(xiǎn)。
由不確定性而引發(fā)的問(wèn)題
限流是保護(hù)應(yīng)用穩(wěn)定性的有力武器,應(yīng)用在正確預(yù)估自身容量和外部流量的情況下,借助限流可以保護(hù)應(yīng)用自身不被流量打垮,從而提高自身的穩(wěn)定性,淘寶這么多年的活動(dòng),限流都起到了功不可沒(méi)的穩(wěn)定性作用。
隨著微服務(wù)數(shù)量的增長(zhǎng),我們發(fā)現(xiàn)應(yīng)用在使用靜態(tài)限流時(shí),也帶來(lái)了一些穩(wěn)定性的隱患 —— 靜態(tài)限流 與 不斷演進(jìn)的應(yīng)用之間存在著時(shí)間上的不匹配。換句話說(shuō),應(yīng)用一旦設(shè)置了限流,只要應(yīng)用不斷的發(fā)展,靜態(tài)限流就有可能面臨著過(guò)時(shí)的風(fēng)險(xiǎn)。造成過(guò)時(shí)隱患和風(fēng)險(xiǎn)的因素主要包括:
1、業(yè)務(wù)演進(jìn)/依賴(lài)變化引起的不確定性
業(yè)務(wù)一直在發(fā)展,我們的應(yīng)用代碼也一直在變化,很有可能昨天剛剛設(shè)置過(guò)的限流 QPS,在今天應(yīng)用一發(fā)布,就已經(jīng)不適用了。就算應(yīng)用本身不發(fā)布,應(yīng)用自身依賴(lài)的后端服務(wù)的拓?fù)洳煌5淖兓?#xff0c;也會(huì)引發(fā)應(yīng)用能夠承受的 QPS 發(fā)生變化,帶來(lái)不確定性
2、流量模型發(fā)生變化引起的不確定性
應(yīng)用和服務(wù)通常包含多種方法調(diào)用,每種方法調(diào)用消耗的系統(tǒng)資源都不同,這要求在對(duì)應(yīng)用壓測(cè)時(shí)的流量模型要足夠的合理準(zhǔn)確,才能找到有效的限流值,然而業(yè)務(wù)的流量模型往往也是在不斷的變化,這也會(huì)為應(yīng)用的 QPS 評(píng)估帶來(lái)不確定性。
3、不同容器實(shí)例容量引起的不確定性
隨著運(yùn)維環(huán)境和方法越來(lái)越復(fù)雜,交付給業(yè)務(wù)的容器,也變得不確定,如我們的混部、CPU Sharing 。同時(shí),同一應(yīng)用的不同容器,很可能會(huì)有不同的容量,如同一個(gè)應(yīng)用的不同容器,壓出來(lái)的基線 QPS 都很可能有很大的差異。底層機(jī)器資源的不確定性,也為應(yīng)用限流QPS 評(píng)估帶來(lái)了不確定性
因此,針對(duì)應(yīng)用的限流閾值設(shè)置,應(yīng)用開(kāi)發(fā)就會(huì)很糾結(jié):
- 如果設(shè)置的限流閾值偏保守(偏低),那么:有的機(jī)器資源使用率上不去,浪費(fèi)機(jī)器,造成成本升高問(wèn)題。
- 如果設(shè)置的限流閾值偏樂(lè)觀(偏高),那么:有的機(jī)器還沒(méi)有達(dá)到限流閾值,就會(huì)被壓垮,造成穩(wěn)定性問(wèn)題。
上述的不確定性,也是我們?cè)诖笮突顒?dòng)前,進(jìn)行封網(wǎng)的原因之一。
應(yīng)用柔性架構(gòu)升級(jí)
面對(duì)著如此多的不確定性,我們希望我們的應(yīng)用本身能夠具有一些『柔性』的特征,使得在面對(duì)不確定的場(chǎng)景突然出現(xiàn)時(shí),應(yīng)用仍能夠承受這些變化,就像太極一樣,能夠做到以柔克剛。我們認(rèn)為,應(yīng)用架構(gòu)要做到柔性,至少需要有以下特征(針對(duì)應(yīng)用柔性架構(gòu)的特征,我們也在持續(xù)的探索中):
1、故障容忍
- 如使用隔離進(jìn)行解決。阿里的異地多活單元方案,可以隔離地區(qū)出現(xiàn)的問(wèn)題;微服務(wù)化提升了研發(fā)效率,同時(shí)也隔離了其他獨(dú)立鏈路出現(xiàn)的問(wèn)題;而我們提出的全異步化解決方案,也增加了上游對(duì)下游出問(wèn)題時(shí)的隔離作用。
2、過(guò)載保護(hù)
- 如使用自適應(yīng)負(fù)載調(diào)節(jié)進(jìn)行解決。來(lái)應(yīng)對(duì)由于流量容量預(yù)估不準(zhǔn)而帶來(lái)的穩(wěn)定性問(wèn)題。
為解決上述提到的不確定性帶來(lái)的應(yīng)用過(guò)載隱患問(wèn)題,我們引入了自適應(yīng)負(fù)載調(diào)節(jié)來(lái)升級(jí)應(yīng)用的過(guò)載保護(hù)能力,解決應(yīng)用過(guò)載的穩(wěn)定性隱患。
?
自適應(yīng)負(fù)載調(diào)節(jié)
?
通過(guò)自適應(yīng)負(fù)載調(diào)節(jié)來(lái)應(yīng)對(duì)上述不確定性,使得應(yīng)用能夠就地實(shí)時(shí)的評(píng)估自身負(fù)載,讓接受的 QPS 與處理能力同步,防止限流評(píng)估出錯(cuò)而導(dǎo)致的穩(wěn)定性問(wèn)題和資源利用率問(wèn)題;同時(shí),在應(yīng)用接收到超高壓時(shí),單機(jī)壓垮的 QPS 可提到更高。從而能夠應(yīng)對(duì)更高的突發(fā)流量,加固應(yīng)用自身的穩(wěn)定性。
整個(gè)方案的主要由兩部分構(gòu)成:
1、與應(yīng)用整合的負(fù)反饋組件
- 在應(yīng)用的入口設(shè)置一個(gè)負(fù)反饋組件,根據(jù)應(yīng)用自身的負(fù)載情況,對(duì)進(jìn)入的請(qǐng)求進(jìn)行針對(duì)性的攔截
- 為了適用更多業(yè)務(wù),此組件還支持服務(wù)權(quán)重,優(yōu)先拒絕權(quán)重低的服務(wù),使得在過(guò)載時(shí),資源能夠盡量往權(quán)重高的服務(wù)傾斜。
2、組件本身的快速迭代機(jī)制
- 為了讓方案本身能夠在不同的場(chǎng)景下有效,我們從很多不同的維度展開(kāi),組合成多個(gè)場(chǎng)景,再通過(guò)自動(dòng)化的場(chǎng)景壓測(cè),來(lái)快速進(jìn)行算法在不同場(chǎng)景下的效果評(píng)估和改進(jìn),從而提升整個(gè)方案的迭代演進(jìn)速度。
最終,整個(gè)方案沉淀了自適應(yīng)負(fù)載調(diào)節(jié)的自動(dòng)迭代平臺(tái),迭代出基于 CPU 的自動(dòng)控制算法。
上線案例
淘寶某核心業(yè)務(wù)的應(yīng)用,在一次大型活動(dòng)壓測(cè)中的效果得到驗(yàn)證:在某個(gè)機(jī)房的機(jī)器數(shù)比預(yù)期少 22.2% 的情況下,抗住了 130% 的壓測(cè)流量。按照以往雙十一的壓測(cè)經(jīng)驗(yàn),在少這么多機(jī)器的情況下,這個(gè)機(jī)房的應(yīng)用扛不住如此大的流量。
另一核心應(yīng)用,由于擔(dān)心不確定性原因,靜態(tài)限流值設(shè)置的偏保守,在接入自適應(yīng)負(fù)載調(diào)節(jié)后,限流值可以進(jìn)一步提升,使得服務(wù)的有效 QPS 提升了 230%,同時(shí)應(yīng)用的壓垮 QPS 提升了 3 倍,在壓測(cè)大流量過(guò)后,秒級(jí)恢復(fù),迅速提供正常服務(wù)(原需 6 分鐘+ )。
應(yīng)用柔性架構(gòu)升級(jí) - 后續(xù)展望
為了讓?xiě)?yīng)用更具高可用,我們從故障的角度,圍繞著從故障發(fā)生前的預(yù)防能力,到故障誘因發(fā)生中的防御能力,再到故障發(fā)生時(shí)的恢復(fù)能力,來(lái)打造應(yīng)用的高可用能力,進(jìn)行應(yīng)用的柔性架構(gòu)升級(jí)。
同時(shí),針對(duì)自適應(yīng)負(fù)載調(diào)節(jié),目前的策略為就地拒絕,提高了穩(wěn)定性,但仍有穩(wěn)定性風(fēng)險(xiǎn),后續(xù)我們需更進(jìn)一步豐富策略,如結(jié)合集團(tuán)的中間件產(chǎn)品,進(jìn)行快速擴(kuò)容/縮容操作;應(yīng)用向上游反饋壓力,使得壓力從上游杜絕(分布式回壓)等。同時(shí),為了在應(yīng)用的依賴(lài)出現(xiàn)問(wèn)題時(shí),仍能夠有柔性能力,我們也會(huì)針對(duì)同步模型的應(yīng)用,引入自適應(yīng)的隔離/熔斷能力,使得應(yīng)用下游出現(xiàn)問(wèn)題時(shí),不會(huì)影響到應(yīng)用本身。
應(yīng)用高可用關(guān)注的是應(yīng)用自身,除了應(yīng)用高可用,我們也在積極推進(jìn)淘系業(yè)務(wù)整體的高可用能力,比如在站點(diǎn)出現(xiàn)問(wèn)題時(shí),我們?nèi)绾巫龅揭宰羁斓乃俣惹袚Q流量,恢復(fù)業(yè)務(wù),最終提升整個(gè)淘系的高可用。更多關(guān)于應(yīng)用高可用、淘系業(yè)務(wù)高可用的理解和落地,我們?cè)诔掷m(xù)地探索。
加入我們
歡迎加入淘寶基礎(chǔ)平臺(tái)基礎(chǔ)服務(wù)團(tuán)隊(duì),團(tuán)隊(duì)成員大牛云集,有阿里移動(dòng)中間件的創(chuàng)始人員、Dubbo核心成員、更有一群熱愛(ài)技術(shù),期望用技術(shù)推動(dòng)業(yè)務(wù)的小伙伴。
淘寶基礎(chǔ)平臺(tái)基礎(chǔ)服務(wù)團(tuán)隊(duì),推進(jìn)淘系(淘寶、天貓等)架構(gòu)升級(jí)(代號(hào)Tango),致力于為淘系、整個(gè)集團(tuán)提供基礎(chǔ)核心能力、產(chǎn)品與解決方案:
- 業(yè)務(wù)高可用的解決方案與核心能力(應(yīng)用高可用:為業(yè)務(wù)提供自適應(yīng)的限流、隔離與熔斷的柔性高可用解決方案,站點(diǎn)高可用:故障自愈、多機(jī)房與異地容災(zāi)與快速切流恢復(fù))
- 新一代的業(yè)務(wù)研發(fā)模式FaaS(一站式函數(shù)研發(fā)Gaia平臺(tái))
- 下一代網(wǎng)絡(luò)協(xié)議QUIC實(shí)現(xiàn)與落地
- 移動(dòng)中間件(API網(wǎng)關(guān)MTop、接入層AServer、消息/推送、配置中心等等)
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的淘宝应用柔性架构的探索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 技术架构演进|0到千万DAU,微淘如何走
- 下一篇: Serverless 落地挑战与蚂蚁金服