Srinath,科學家,軟體架構師。Apache Axis2項目的聯合創始人,Apache Software基金會的成員,WSO2流處理器(wso2.com/analytics)的聯席架構師。 Srinath通過不懈的努力最終總結出了30條架構原則,他主張架構師的角色應該由開發團隊本身去扮演,而不... ...
轉載自:https://blog.csdn.net/DataScientist/article/details/7184248 修改了一些錯別字,調整優化了一下格式,修複了一些鏈接
SEDA高性能互聯網伺服器架構模型(1)
最近研究雲存儲相關的系統,Oceanstore和Cassandra都用到了SEDA編程模型。 (註:關於Cassandra的代碼結構和SEDA模型的使用情況可以參考這篇文章: http://prettyprint.me/2010/05/02/understanding-cassandra-code-base/,裡面還有一張時間序列圖來說明程式的流程。 (轉載說:文章已不存在,博客還在:http://prettyprint.me/prettyprint.me/index.html)) Staged Event Driven Architecture (SEDA) 是加州大學伯克利分校研究的一套優秀的高性能互聯網伺服器架構模型。 其設計目標是:支持大規模併發處理、簡化系統開發、支持處理監測、支持系統資源管理。 它的核心思想是把一個請求處理過程分成幾個Stage,不同資源消耗的Stage使用不同數量的線程來處理,Stage間使用事件驅動的非同步通信模式。 http://www.eecs.harvard.edu/~mdw/papers/seda-sosp01.pdf這篇文章是介紹SEDA最好的材料。(轉載說:文章已不存在,同pdf見:https://www.mdw.la/papers/seda-sosp01.pdf,或https://github.com/mdwelsh/mdwelsh.github.io/blob/main/papers/seda-sosp01.pdf) 傳統的高性能伺服器處理模型無非就是兩種:多線程處理模型和事件驅動處理模型。 關於這兩種模型網上有很多資料了。http://www.iteye.com/topic/432134這篇文章(轉載說:文章已經不存在)把多線程模型和SEDA模型的實驗對比以數字的形式展現出來了。而且詳細描述了為什麼多線程模型在某些場合不適用。簡單理解就是傳統多線程模型有的時候由於處理邏輯不同的線程對資源的需求不同,會導致有些CPU空閑,而另外一些CPU卻浪費了大量的時間線上程的調度上,資源利用率不高。本質原因就是不同線程的處理邏輯對資源的需求不同。 SEDA模型處理的流程是:一個請求被分成多個stage處理,每一個stage各做各的,一個請求的多個stage可以串列化也可以並行化。stage外部使用Event-Driven,新到的請求放到event queue中,整個SEDA框架從該Stage對應的thread pool中的挑選一個線程運行Event Handler來處理事件,Event Handler處理完後將請求派發到下一個stage。 下麵是一個基於SEDA的處理流程:![0](https://img2022.cnblogs.com/blog/1143429/202206/1143429-20220606222122969-443586901.png)
![](https://img2022.cnblogs.com/blog/1143429/202206/1143429-20220606222210230-1206048167.png)
![](https://img2022.cnblogs.com/blog/1143429/202206/1143429-20220606222220496-1053537247.png)