【轉載】SEDA高性能互聯網伺服器架構模型(1)

来源:https://www.cnblogs.com/drawnkid/archive/2022/06/06/16349982.html
-Advertisement-
Play Games

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 對於SEDA中的每一個stage,它由上面的三部分構成: 1) 輸入的event queue。SEDA中的event queue是限定大小的,代碼里是通過鏈表來實現的。所以如果event queue的大小到達閾值,新到的event會被拒絕或轉發到特定的stage。 2)thread pool:這個線程池對應用是通明的,並且每個stage的線程池是相互獨立的。針對請求量及特點,線程池可以靜態的調節,不至於某個stage的線程池耗盡所有的資源。 3)event handler,event handler接受event,做詳細的用戶指定的邏輯處理後將event分發到其餘stage。event handler需要應用開發者編寫。 針對各個stage運行時的狀態,SEDA引入resource controller來調解stage的資源分派和調節參數等。焦點的兩個Controller是thread pool controller和batching controller。thread pool controller用來控制threadpool的運轉時大小,比如當event queue很大時,就多分配些線程,反之則減少線程數。batching controller用來節制event handler同時處理的event的併發量(batching factor),當batching factor增大時,增長了吞吐量但event均勻相應時間會變長,當batching factor變小時,環境相同。batching controller的控制結果使得batching factor的高低動搖來控制吞吐量和響合時間。這兩個controller類似操作系統里進程調度的原則,在延遲和吞吐量中選擇平衡。 下麵是http://www.eecs.harvard.edu/~mdw/papers/seda-sosp01.pdf這個文章中介紹的一個基於SEDA的HTTP的實現。整個請求的過程分為以下幾個Stage: Socket listen,Socket read, HttpParse, PageCache, CacheMiss, file I/O, HttpSend, Socket write等,不同stage有不同的thread pool和controller,並配置不同的參數,各個stage之間通過Event queue來傳遞消息。下一篇文章我將從源代碼的角度分析這個HTTP伺服器。 目前EMC的Atmos產品和Google的產品中都有用到SEDA。而國內互聯網企業由於實際工程應用中往往開發效率和運行效率要綜合考慮。而SEDA的開發效率相對較低,所以現在看國內各廠高負載高併發系統開發還是傳統多線程占主導。 PS:http://matt-welsh.blogspot.com/2010/07/retrospective-on-seda.html 這是SEDA的作者最近對這個系統的回顧中反思了他當初設計系統的得失。(需要FQ) A Retrospective on SEDA ———————————————— 版權聲明:本文為CSDN博主「DataScientist」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/DataScientist/article/details/7184248
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對實時數據湖的解讀 數據湖的概念是比較寬泛的,不同的人可能有著不同的解讀。這個名詞誕生以來,在不同的階段被賦予了不同的含義。 數據湖的概念最早是在 Hadoop World 大會上提出的。當時的提出者給數據湖賦予了一個非常抽象的含義,他認為它能解決數據集市面臨的一些重要問題。 其中最主要的兩個問題是 ...
  • 來源公眾號:SQL資料庫運維 原文鏈接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485400&idx=1&sn=432b580ed77224bf883db109cb7767b4&chksm=ea3753a8dd40dabed ...
  • 鎖 併發事務可能出現的情況: 讀-讀事務併發:此時是沒有問題的,讀操作不會對記錄又任何影響。 寫-寫事務併發:併發事務相繼對相同的記錄做出改動,因為寫-寫併發可能會產生臟寫的情況,但是沒有一個隔離級別允許臟寫的情況發生。MySQL使用鎖的機制來控制併發情況下讓事務對一條記錄進行排隊修改,只有對記錄修 ...
  • 開心一刻 有個問題一直困擾著我:許仙選擇了救蛇,為什麼楊過卻選擇救雕(而不救蛇) 後面想想,其實楊過救神雕是有原因的,當年神雕和巨蛇打架的時候 雕對楊過說:殺蛇,殺蛇,殺蛇! 蛇對楊過說:殺雕,殺雕,殺雕! 楊過果斷選擇了殺蛇 業務場景 業務描述 業務上有這樣的需求,張三、李四兩個用戶,如果互相關註 ...
  • 華為運動健康服務(HUAWEI Health Kit)允許三方生態應用在獲取用戶授權後,通過REST API介面訪問資料庫,讀取華為和生態伙伴開放的運動健康數據或寫入數據到華為運動健康服務,為用戶提供更加個性化的健康改善服務。如運動類App在獲取授權碼後可以讀取華為用戶的心率、步數等運動數據,最終給 ...
  • 前言 ​ 將本地存儲的事件數據同步到伺服器,然後經過服務端的存儲、抽取、分析和展示,充分發揮數據真正的價值。 一、數據同步 第一步:在 SensorsSDK 項目中,新增 SensorsAnalyticsNetwork 工具類,並新增 serverURL 用於保存伺服器 URL 地址 #import ...
  • 標簽+元素 1.標題標簽 段落標簽<h1> 一級標題 <h1><h2> 二級標題 <h2><h3> 三級標題 <h3><h4> 四級標題 <h4><h5> 五級標題 <h5><h6> 六級標題 <h6> 2.段落標簽 <p> 我是一個段落標簽 </p> //不換行 3.容器標簽 <div> 這是頭部 ...
  • props中的children屬性 組件標簽只用有子節點的時候,props就會有該屬性; children的屬性跟props一樣的,值可以是任意值;(文本,React元素,組件,函數) 組件: <ClassCom> 傳遞的數據 </ClassCom> 這樣的組件標簽中就會有子節點 props中的ch ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...