<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    SEDA架構(gòu)筆記

    Posted on 2010-06-20 23:53 dennis 閱讀(7280) 評論(6)  編輯  收藏 所屬分類: 模式與架構(gòu)java


    一、傳統(tǒng)并發(fā)模型的缺點


    基于線程的并發(fā)


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

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



    特點:
    單線程處理事件
    每個并發(fā)流實現(xiàn)為一個有限狀態(tài)機
    應(yīng)用直接控制并發(fā)
    負載增加的時候,吞吐量飽和
    響應(yīng)時間線性增長


    二、SEDA架構(gòu)




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

    1、Stage-可靠構(gòu)建的基礎(chǔ)



    (1)應(yīng)用邏輯封裝到Event Handler
       接收到許多事件,處理這些事件,然后派發(fā)事件加入其他Stage的queue
       對queue和threads沒有直接控制
       Event queue吸納過量的負載,有限的線程池維持并發(fā)
    (2)Stage控制器
      負責(zé)資源的分配和調(diào)度
      控制派發(fā)給Event Handler的事件的數(shù)量和順序
      Event Handler可能在內(nèi)部丟棄、過濾、重排序事件。

    2、應(yīng)用=Stage網(wǎng)絡(luò)

       (1)有限隊列
            入隊可能失敗,如果隊列拒絕新項的話
            阻塞在滿溢的隊列上來實現(xiàn)吸納壓力
            通過丟棄事件來降低負載
       (2) 隊列將Stage的執(zhí)行分解
            引入了顯式的控制邊界
            提供了隔離、模塊化、獨立的負載管理
       (3)方便調(diào)試和profile
            事件的投遞可顯
            時間流可跟蹤
            通過監(jiān)測queue的長度發(fā)現(xiàn)系統(tǒng)瓶頸

    3、動態(tài)資源控制器

    (1)、線程池管理器

    目標: 決定Stage合理的并發(fā)程度
    操作:
    觀察queue長度,如果超過閥值就添加線程
    移除空閑線程



    (2)、批量管理器
    目的:低響應(yīng)時間和高吞吐量的調(diào)度
    操作:
    Batching因子:Stage一次處理的消息數(shù)量
    小的batching因子:低響應(yīng)時間
    大的batching因子:高吞吐量

    嘗試找到具有穩(wěn)定吞吐量的最小的batching因子
    觀察stage的事件流出率
    當(dāng)吞吐量高的時候降低batching因子,低的時候增加


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



      

    評論

    # re: SEDA架構(gòu)筆記[未登錄]  回復(fù)  更多評論   

    2010-06-21 14:14 by 牛牛
    3、動態(tài)資源控制器

    (1)、線程池管理器
    目標: 決定Stage合理的并發(fā)程度
    操作:
    觀察queue長度,如果超過閥值就添加線程
    移除空閑線程

    這里有個問題?如果queue長度超過閥值,但同時stage線程內(nèi)部又阻塞,那怎么處理呢?

    # re: SEDA架構(gòu)筆記[未登錄]  回復(fù)  更多評論   

    2010-06-21 19:51 by 匿名
    @牛牛
    可以通過排隊的方法解決

    # re: SEDA架構(gòu)筆記[未登錄]  回復(fù)  更多評論   

    2010-06-22 02:00 by dennis
    @牛牛
    queue可以阻塞,也可以丟棄放入的消息,取決于你選擇的策略

    # re: SEDA架構(gòu)筆記  回復(fù)  更多評論   

    2010-06-22 22:33 by 下里巴人
    這種基于事件的并發(fā)模型是可以很好的提高吞吐量跟響應(yīng)時間,在業(yè)界已經(jīng)有使用了嗎?哪些公司有這樣的模型運用了呢?能否推薦下這方面的具體資料

    # re: SEDA架構(gòu)筆記  回復(fù)  更多評論   

    2010-08-11 17:27 by lucharse
    @下里巴人
    cassandra 用得就是 SEDA模型

    # re: SEDA架構(gòu)筆記  回復(fù)  更多評論   

    2013-06-05 11:45 by 范小瑞
    大哥,圖片看不到啊,真心想看看。
    主站蜘蛛池模板: 特级毛片免费播放| 中文字幕亚洲一区二区三区 | 无码少妇精品一区二区免费动态| 亚洲精品网站在线观看不卡无广告| 亚洲精品乱码久久久久蜜桃 | 日本不卡在线观看免费v| 亚洲日韩乱码中文字幕| 免费做爰猛烈吃奶摸视频在线观看 | 免费一级毛片在线观看| 亚洲av无码成人精品国产| 日本免费网站在线观看| 国产精品亚洲а∨天堂2021 | 国产VA免费精品高清在线| 国产成人高清亚洲| 久久国产精品国产自线拍免费| 亚洲国产精品成人久久| 99久久精品免费精品国产| 亚洲av无码不卡久久| 精品国产精品久久一区免费式| 羞羞视频网站免费入口| 亚洲综合色自拍一区| 免费观看在线禁片| 亚洲大香伊人蕉在人依线| 午夜免费不卡毛片完整版| 欧洲乱码伦视频免费国产 | 无码免费午夜福利片在线 | 无人视频免费观看免费视频| 亚洲色成人WWW永久网站| 四虎免费影院ww4164h| 美女被羞羞网站免费下载| 国产亚洲成av人片在线观看| 日韩毛片免费无码无毒视频观看| 亚洲爆乳精品无码一区二区| 自拍偷自拍亚洲精品第1页| 免费观看无遮挡www的小视频| 亚洲妇女无套内射精| 亚洲成AV人片在线播放无码| 毛片a级毛片免费播放下载| 一级毛片免费观看不收费| 亚洲成年人电影在线观看| 人人狠狠综合久久亚洲高清 |