一、前言
二、當前流行的兩種并發(fā)處理編程模型
三、 SEDA 架構
四、小結
五、參考文獻
一、前言
Staged Event Driven Architecture (SEDA) 是加州大學(xué)伯克利分校研究的一套優(yōu)秀的高性能互聯(lián)網(wǎng)服務(wù)器架構模型。其設計目標是:支持大規模并發(fā)處理、簡(jiǎn)化系統開(kāi)發(fā)、支持處理監測、支持系統資源管理。本文會(huì )先對兩種目前被廣泛使用的網(wǎng)絡(luò )服務(wù)器架構模型進(jìn)行介紹。然后對 SEDA 進(jìn)行詳細描述。
二、當前流行的兩種并發(fā)處理編程模型
1、 多線(xiàn)程服務(wù)器 (Threaded Server)

工作原理:對于每一個(gè) request , dispatcher 會(huì )為其創(chuàng )建并分配一個(gè)線(xiàn)程。該線(xiàn)程負責這個(gè)請求的處理。這種方式 又名( Thread-per-request )。
優(yōu)點(diǎn):執行粒度是整個(gè)完整的處理流程。處理邏輯清晰,容易開(kāi)發(fā)。
缺點(diǎn):是當隨著(zhù)處理請求不斷增加,導致并發(fā)執行的線(xiàn)程數量太多。過(guò)多的線(xiàn)程數量導致系統在線(xiàn)程調度和資源爭用上的開(kāi)銷(xiāo)過(guò)大。引起系統性能急劇下降。導致系統處理能力下降。
改進(jìn)措施:線(xiàn)程池( Bounded Thread Pools )
系統最多只能創(chuàng )建一定數量的線(xiàn)程。當所有線(xiàn)程都飽和運行時(shí),新到達的處理請求只能等待,或者被拋棄。
缺點(diǎn):
執行粒度仍然是完整的處理流程。難以檢測系統性能瓶頸的根源以及進(jìn)行相應調整。 /p>
2、 事件驅動(dòng)并發(fā)處理 (Event-Driven Concurrency)

將處理流程分割成多個(gè)步驟,每一個(gè)步驟都實(shí)現為一個(gè)有限狀態(tài)機( FSM )。
工作原理:所有的處理請求會(huì )作為 Event 進(jìn)入系統。由 Scheduler 負責傳遞給相應 FSM 。 FSM 的處理結果也以 Event 形式輸出給 Scheduler 。新的 Event 會(huì )再次被 Scheduler 進(jìn)行轉發(fā)給下一個(gè) FSM 。直至處理完成。
優(yōu)點(diǎn):
1 、隨著(zhù)處理量的增加,系統負荷是以線(xiàn)形增長(cháng)。當達到系統飽和處理能力后。系統的處理能力不會(huì )下降。
2 、由于將各個(gè)處理步驟獨立實(shí)現,可以很容易的進(jìn)行系統監測和調整。
缺點(diǎn):
Scheduler 的設計和實(shí)現過(guò)于復雜。針對于不同的應用和系統的邏輯變更需要不同的實(shí)現。
三、 SEDA 架構

( 近似于 Event-Driven Concurrency ,但是沒(méi)有其中的 Scheduler)
將每一個(gè)處理步驟獨立為一個(gè) Stage 。

Stage 結構:
1、 一個(gè)接受輸入的 Event Queue ;
2、 一個(gè)應用開(kāi)發(fā)者編寫(xiě)的 Event Handler ;
3、 一個(gè) Controller 用于對執行過(guò)程進(jìn)行控制。包括并發(fā)線(xiàn)程數量,批處理數量, …;
4、 一個(gè) Thread Pool 用于并發(fā)處理;
Stage 的輸入通過(guò) Event Queue 獲得。 Stage 的輸出會(huì )以 Event 形式推送到其他 Stage 的 Event Queue 中。 Stage 之間的這種連接關(guān)系由應用開(kāi)發(fā)人員指定。
帶來(lái)的問(wèn)題: Event Queue 盡管減少了模塊間的耦合性,但是會(huì )降低響應速度。
四、小結:
SEDA 架構將應用的整個(gè)處理過(guò)程分割為多個(gè)步驟即 Stage 。每個(gè) Stage 可以獨立進(jìn)行開(kāi)發(fā)。同時(shí) Stage 之間通過(guò) Event Queue 來(lái)進(jìn)行通信,可以降低耦合性??梢砸院苄〉某杀緛?lái)適應將來(lái)的系統邏輯變化。
同時(shí)系統提供了標準的資源控制,使得應用開(kāi)發(fā)人員只需要專(zhuān)注于實(shí)現 Event Handler 的內部邏輯。而無(wú)須關(guān)注多線(xiàn)程、資源共享、 …
同時(shí)可以在運行時(shí)對于每一個(gè) Stage 的運行情況進(jìn)行監測以及調整。
五、參考文獻 : http://www.eecs.harvard.edu/~mdw/papers/seda-sosp01.pdf
聯(lián)系客服