常見服務(wù)器架構(gòu)


//
常見服務(wù)器架構(gòu) - 啊哈的日志 - 網(wǎng)易博客
http://4729469.blog.163.com/blog/static/38971212201311722616119/

這里的服務(wù)器指 client/server 編程中的 server。服務(wù)器常用架構(gòu)包括四種:

  • 多線程
  • 多進(jìn)程
  • 基于 I/O 復(fù)用的事件循環(huán)架構(gòu)
  • SEDA 模式

前兩種架構(gòu)適用于類 web 服務(wù)器。這樣的服務(wù)器只需處理來自客戶端的請求,且請求間幾乎是相互獨立的。后兩種架構(gòu)適用于構(gòu)造復(fù)雜的服務(wù)器,比如 Cassandra 系統(tǒng)中的一個節(jié)點,再比如 Redis 服務(wù)器。

多線程服務(wù)器對每個客戶端來的請求生成一個新的線程來服務(wù)它。多進(jìn)程服務(wù)器則生成一個新的進(jìn)程。一個經(jīng)常用的優(yōu)化措施是使用線程池(或進(jìn)程池)。

基于 I/O 復(fù)用的事件循環(huán)就是利用操作系統(tǒng)的 I/O 復(fù)用函數(shù),比如 select, epoll, 采用一個主線程來監(jiān)聽所有的事件(網(wǎng)絡(luò) I/O 事件、timer 事件等),并在這個線程中調(diào)用相應(yīng)的回調(diào)函數(shù)。

基于 I/O 復(fù)用的事件循環(huán)的好處之一是所有事件都在一個線程中處理,就不用考慮非常復(fù)雜的并發(fā)問題,大大簡化了程序。

因為要在主線程中處理所有的事件,所以要求每個事件的處理時間必須要短。如果有些操作非常耗時,那么就要啟動工作線程來處理耗時的操作,工作完成后通知主線程。一般通過管道來解決這個通信問題。(MooseFS 中的 chunkserver 就是這樣做的)

SEDA 這種模式就是把對一個請求的完成過程劃分為多個 stage。每一個 stage 對應(yīng)一個線程池。在前面的一個 stage 完成之后就把請求扔到下一個 stage??梢园阉氤梢粋€流水作業(yè)。

SEDA 這種架構(gòu)使得每個 stage 可以單獨的控制和調(diào)優(yōu),這是它的一個優(yōu)點。 它的缺點在于跨 stage 的控制比較難。 比如如果前一個 stage 的處理時間非常短,后一個 stage 是一個磁盤 I/O stage, 處理時間很長,那么請求就會在后一個 stage 堆積起來;劃分成多個 stage 多,全局的過載控制就比較難。 Cassandra 系統(tǒng)中就有這個問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,913評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 記憶中的媽媽 從來沒有年輕過 永遠(yuǎn)都是齊耳的短發(fā) 永遠(yuǎn)都是粗糙的臉龐 她從來不進(jìn)理發(fā)店 臉上從沒抹過化妝品 記憶中...
    棗園草閱讀 617評論 13 12
  • 人性是善的呢?是惡的呢?自古以來難有定論。 茍子主張:人性本惡,生來就自私和執(zhí)著,帶著貪、瞋、癡而來人間為惡,怎么...
    墨陽踐行閱讀 1,956評論 1 2
  • 我曾遇見你, 在沉默的世界。 我曾愛過你, 用六年的青春。 我曾有個家, 卻不得不流浪。 我曾流淚卻堅強, 我曾受...
    了了之不閱讀 477評論 0 5

友情鏈接更多精彩內(nèi)容