天天看點

SEDA架構模型

一、傳統并發模型的缺點

基于線程的并發

特點:每任務一線程直線式的程式設計使用資源昂高,context切換代價高,競争鎖昂貴太多線程可能導緻吞吐量下降,響應時間暴漲。

基于事件的并發模型

特點:單線程處理事件每個并發流實作為一個有限狀态機應用直接控制并發負載增加的時候,吞吐量飽和響應時間線性增長

二、SEDA架構

特點:(1)服務通過queue分解成stage: 每個stage代表FSM的一個狀态集合 Queue引入了控制邊界(2)使用線程池驅動stage的運作: 将事件處理同線程的建立和排程分離 Stage可以順序或者并行執行 Stage可能在内部阻塞,給阻塞的stage配置設定較少的線程

1、Stage-可靠建構的基礎

(1)應用邏輯封裝到Event Handler 接收到許多事件,處理這些事件,然後派發事件加入其他Stage的queue 對queue和threads沒有直接控制 Event queue吸納過量的負載,有限的線程池維持并發(2)Stage控制器 負責資源的配置設定和排程 控制派發給Event Handler的事件的數量和順序 Event Handler可能在内部丢棄、過濾、重排序事件。2、應用=Stage網絡 (1)有限隊列 入隊可能失敗,如果隊列拒絕新項的話 阻塞在滿溢的隊列上來實作吸納壓力 通過丢棄事件來降低負載 (2) 隊列将Stage的執行分解 引入了顯式的控制邊界 提供了隔離、子產品化、獨立的負載管理 (3)友善調試和profile 事件的投遞可顯 時間流可跟蹤 通過監測queue的長度發現系統瓶頸3、動态資源控制器(1)、線程池管理器目标: 決定Stage合理的并發程度操作:觀察queue長度,如果超過閥值就添加線程移除空閑線程

(2)、批量管理器目的:低響應時間和高吞吐量的排程操作:Batching因子:Stage一次處理的消息數量小的batching因子:低響應時間大的batching因子:高吞吐量嘗試找到具有穩定吞吐量的最小的batching因子觀察stage的事件流出率當吞吐量高的時候降低batching因子,低的時候增加

三、小結 SEDA主要還是為了解決傳統并發模型的缺點,通過将伺服器的處理劃分各個Stage,利用queue連接配接起來形成一個pipeline的處理鍊,并且在Stage中利用控制器進行資源的調控。資源的排程依據運作時的狀态監視的資料來進行,進而形成一種反應控制的機制,而stage的劃分也簡化了程式設計,并且通過queue和每個stage的線程池來分擔高并發請求并保持吞吐量和響應時間的平衡。簡單來說,我看中的是伺服器模型的清晰劃分以及反應控制。

因在閱讀的過程中感覺非常好,是以轉載該文章,轉自

莊周蝶夢