SEDA架構(gòu)模型

一、傳統(tǒng)并發(fā)模型的缺點(diǎn)
基于線程的并發(fā)


特點(diǎn):每任務(wù)一線程直線式的編程使用資源昂高,context切換代價(jià)高,競(jìng)爭(zhēng)鎖昂貴太多線程可能導(dǎo)致吞吐量下降,響應(yīng)時(shí)間暴漲。

基于事件的并發(fā)模型


特點(diǎn):?jiǎn)尉€程處理事件每個(gè)并發(fā)流實(shí)現(xiàn)為一個(gè)有限狀態(tài)機(jī)應(yīng)用直接控制并發(fā)負(fù)載增加的時(shí)候,吞吐量飽和響應(yīng)時(shí)間線性增長(zhǎng)
二、SEDA架構(gòu)

特點(diǎn):(1)服務(wù)通過queue分解成stage: 每個(gè)stage代表FSM的一個(gè)狀態(tài)集合 Queue引入了控制邊界(2)使用線程池驅(qū)動(dòng)stage的運(yùn)行: 將事件處理同線程的創(chuàng)建和調(diào)度分離 Stage可以順序或者并行執(zhí)行 Stage可能在內(nèi)部阻塞,給阻塞的stage分配較少的線程
1、Stage-可靠構(gòu)建的基礎(chǔ)

(1)應(yīng)用邏輯封裝到Event Handler 接收到許多事件,處理這些事件,然后派發(fā)事件加入其他Stage的queue 對(duì)queue和threads沒有直接控制 Event queue吸納過量的負(fù)載,有限的線程池維持并發(fā)(2)Stage控制器 負(fù)責(zé)資源的分配和調(diào)度 控制派發(fā)給Event Handler的事件的數(shù)量和順序 Event Handler可能在內(nèi)部丟棄、過濾、重排序事件。2、應(yīng)用=Stage網(wǎng)絡(luò) (1)有限隊(duì)列 入隊(duì)可能失敗,如果隊(duì)列拒絕新項(xiàng)的話 阻塞在滿溢的隊(duì)列上來實(shí)現(xiàn)吸納壓力 通過丟棄事件來降低負(fù)載 (2) 隊(duì)列將Stage的執(zhí)行分解 引入了顯式的控制邊界 提供了隔離、模塊化、獨(dú)立的負(fù)載管理 (3)方便調(diào)試和profile 事件的投遞可顯 時(shí)間流可跟蹤 通過監(jiān)測(cè)queue的長(zhǎng)度發(fā)現(xiàn)系統(tǒng)瓶頸3、動(dòng)態(tài)資源控制器(1)、線程池管理器目標(biāo): 決定Stage合理的并發(fā)程度操作:觀察queue長(zhǎng)度,如果超過閥值就添加線程移除空閑線程

(2)、批量管理器目的:低響應(yīng)時(shí)間和高吞吐量的調(diào)度操作:Batching因子:Stage一次處理的消息數(shù)量小的batching因子:低響應(yīng)時(shí)間大的batching因子:高吞吐量嘗試找到具有穩(wěn)定吞吐量的最小的batching因子觀察stage的事件流出率當(dāng)吞吐量高的時(shí)候降低batching因子,低的時(shí)候增加

三、小結(jié) SEDA主要還是為了解決傳統(tǒng)并發(fā)模型的缺點(diǎn),通過將服務(wù)器的處理劃分各個(gè)Stage,利用queue連接起來形成一個(gè)pipeline的處理鏈,并且在Stage中利用控制器進(jìn)行資源的調(diào)控。資源的調(diào)度依據(jù)運(yùn)行時(shí)的狀態(tài)監(jiān)視的數(shù)據(jù)來進(jìn)行,從而形成一種反應(yīng)控制的機(jī)制,而stage的劃分也簡(jiǎn)化了編程,并且通過queue和每個(gè)stage的線程池來分擔(dān)高并發(fā)請(qǐng)求并保持吞吐量和響應(yīng)時(shí)間的平衡。簡(jiǎn)單來說,我看中的是服務(wù)器模型的清晰劃分以及反應(yīng)控制。

因在閱讀的過程中感覺非常好,所以轉(zhuǎn)載該文章,轉(zhuǎn)自莊周蝶夢(mèng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容