前言
Sentinel的使用前景
隨著微服務(wù)的發(fā)展及DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的興起,越來(lái)越多的企業(yè)開(kāi)始使用微服務(wù)架構(gòu)。無(wú)論是項(xiàng)目重構(gòu),還是新項(xiàng)目的開(kāi)發(fā),即使項(xiàng)目初期沒(méi)有多大的流量,但從長(zhǎng)遠(yuǎn)考慮,企業(yè)也基本會(huì)優(yōu)先使用微服務(wù)架構(gòu)。但“魚(yú)和熊掌不可兼得”,項(xiàng)目微服務(wù)化在提升開(kāi)發(fā)效率及降低后期維護(hù)成本的同時(shí),也加大了服務(wù)部署運(yùn)維及問(wèn)題排查的難度,并且容易導(dǎo)致服務(wù)崩潰出現(xiàn)級(jí)聯(lián)效應(yīng),也就是“服務(wù)雪崩”。
為了應(yīng)對(duì)微服務(wù)化帶來(lái)的難題,一批微服務(wù)組件與應(yīng)用涌現(xiàn)出來(lái),如輔助問(wèn)題排查的分布式調(diào)用鏈追蹤探針、簡(jiǎn)化部署運(yùn)維的Kubernetes,以及本書(shū)介紹的熔斷器組件等。
熔斷器組件用于實(shí)現(xiàn)服務(wù)的自我保護(hù),一般都具備限流、熔斷功能。限流用于限制流量超過(guò)服務(wù)的臨界點(diǎn),避免突發(fā)流量導(dǎo)致服務(wù)崩潰;而熔斷用于保護(hù)自身不受下游服務(wù)的影響,在感知到下游服務(wù)不穩(wěn)定時(shí)自動(dòng)斷開(kāi)請(qǐng)求,在下游服務(wù)恢復(fù)時(shí)再恢復(fù)請(qǐng)求。
并非流量大時(shí)才需要熔斷器。一方面,微服務(wù)的調(diào)用錯(cuò)綜復(fù)雜,若一個(gè)服務(wù)不可用,則有很大的概率影響到其周邊服務(wù),使其不可用,并且這種現(xiàn)象就像病毒一樣具有擴(kuò)散性,因此需要使用熔斷器;另一方面,若項(xiàng)目對(duì)接一些第三方的接口,則在無(wú)法預(yù)估第三方接口的最大QPS及穩(wěn)定性的情況下,添加熔斷器能保證服務(wù)自身穩(wěn)定運(yùn)行。
Sentinel是熔斷器的實(shí)現(xiàn)組件之一,具有擴(kuò)展性強(qiáng)、對(duì)應(yīng)用性能影響小、配置靈活,支持異步鏈路與響應(yīng)式項(xiàng)目等特點(diǎn),因此Sentinel很快在國(guó)內(nèi)流行起來(lái),成為國(guó)內(nèi)眾多開(kāi)發(fā)者和架構(gòu)師首選的熔斷器組件。
筆者的使用體會(huì)
筆者有這樣一個(gè)經(jīng)歷,即將一個(gè)項(xiàng)目從單體架構(gòu)重構(gòu)為微服務(wù)架構(gòu),并且擔(dān)任該項(xiàng)目的主程序師,負(fù)責(zé)技術(shù)選型、微服務(wù)劃分及框架搭建。在這個(gè)過(guò)程中,系統(tǒng)發(fā)生了一次服務(wù)雪崩,筆者至今記憶猶新,也是從那時(shí)起才認(rèn)識(shí)到熔斷器組件對(duì)于微服務(wù)的重要性。
Sentinel使用簡(jiǎn)單、配置靈活,可將Sentinel的動(dòng)態(tài)數(shù)據(jù)源接口與配置中心結(jié)合使用,動(dòng)態(tài)地改變流量規(guī)則。Sentinel提供的流量控制功能有限流、熔斷、系統(tǒng)自適應(yīng)、授權(quán)等。筆者當(dāng)時(shí)使用了熔斷和系統(tǒng)自適應(yīng)功能應(yīng)對(duì)突增流量導(dǎo)致服務(wù)雪崩的問(wèn)題,同時(shí)使用限流功能并結(jié)合信號(hào)量隔離、勻速限流效果控制器,應(yīng)對(duì)內(nèi)部定時(shí)任務(wù)瞬時(shí)高并發(fā)調(diào)用某服務(wù)接口的問(wèn)題。
在后續(xù)開(kāi)發(fā)的項(xiàng)目中,筆者也經(jīng)常使用Sentinel,如在某跨境電商項(xiàng)目的支付服務(wù)中使用Sentinel的熔斷器功能;在其他微服務(wù)中擴(kuò)展Sentinel實(shí)現(xiàn)開(kāi)關(guān)降級(jí),從而在促銷活動(dòng)開(kāi)始前對(duì)不重要的接口進(jìn)行降級(jí)處理,為大促銷活動(dòng)保駕護(hù)航。為了使用Kubernetes的ConfigMap資源存儲(chǔ)限流規(guī)則,筆者還自行實(shí)現(xiàn)了Sentinel動(dòng)態(tài)數(shù)據(jù)源,并基于Spring Cloud動(dòng)態(tài)配置實(shí)現(xiàn)了限流規(guī)則的動(dòng)態(tài)配置。
本書(shū)的特色
本書(shū)以“概念、核心類、整體工作流程、核心功能”為主脈絡(luò),系統(tǒng)、全面地對(duì)Sentinel的源碼進(jìn)行了分析,以圖文結(jié)合的方式詳細(xì)介紹了Sentinel的一些晦澀難懂的概念及數(shù)據(jù)結(jié)構(gòu),講解了勻速限流算法、冷啟動(dòng)限流算法及Sentinel的代碼實(shí)現(xiàn),并分析了Sentinel中的一些代碼為何如此編寫(xiě),揣摩代碼背后的設(shè)計(jì)思想。
本書(shū)讀者對(duì)象
q 正在進(jìn)行微服務(wù)項(xiàng)目的開(kāi)發(fā)者或組織
q 對(duì)Sentinel工作原理尚未了解的開(kāi)發(fā)者
q 在響應(yīng)式編程項(xiàng)目中對(duì)Sentinel感到困惑的開(kāi)發(fā)者