《從零開始學架構》四 高效能伺服器

2021-09-28 21:47:48 字數 1416 閱讀 2699

高效能伺服器架構設計主要集中在兩方面:

除了以上兩點,最終系統能否實現高效能,還和具體的實現及編碼相關。

但架構設計是高效能的基礎,如果架構設計沒有做到高效能,則後面的具體實現和編碼能提公升的空間是有限的。

架構設計決定了系統效能的上限,實現細節決定了系統效能的下限

關鍵:併發模型

併發模型有如下兩個關鍵設計點:

以上兩個設計點最終都和作業系統的 i/o 模型及程序模型相關。

每次有新的連線就新建乙個程序去專門處理這個連線的請求

使用了prefork,即提前建立程序

系統在啟動的時候就預先建立好程序,然後才開始接受使用者的請求,當有新的連線進來的時候,就可以省去 fork 程序的操作,讓使用者訪問更快、體驗更好。

每次有新的連線就新建乙個執行緒去專門處理這個連線的請求。

解決或者弱化了 ppc fork 代價高的問題和父子程序通訊複雜的問題。

使用了prethread,預先建立執行緒,然後才開始接受使用者的請求,當有新的連線進來的時候,就可以省去建立執行緒的操作

不同併發模式的選擇要考察三個指標,分別是響應時間(rt),併發數(concurrency),吞吐量(tps)。三者關係,吞吐量=併發數/平均響應時間。不同型別的系統,對這三個指標的要求不一樣。

三高系統,比如秒殺、即時通訊,不能使用。

三低系統,比如tob系統,運營類、管理類系統,一般可以使用。

高吞吐系統,如果是記憶體計算為主的,一般可以使用,如果是網路io為主的,一般不能使用。

方案:i/o 多路復用結合執行緒池

結合不同的業務場景,reactor 模式的具體實現方案靈活多變,主要體現在:

reactor 的數量可以變化:可以是乙個 reactor,也可以是多個 reactor。

資源池的數量可以變化:以程序為例,可以是單個程序,也可以是多個程序(執行緒類似)。

單 reactor 單程序:redis

單 reactor 多執行緒:

多 reactor 多程序 / 執行緒:nginx為多 reactor 多程序,netty為多reactor 多執行緒,下圖以程序為例

i/o 操作改為非同步,來了事件,作業系統核心就會進行處理,處理完了再去通知應用;

同步則是來了事件,作業系統核心通知應用,應用進行處理,這個處理過程會阻塞,這個阻塞就是比非同步慢的原因

高效能伺服器架構

1.請求佇列 連線池 2.主要的業務邏輯挪到應用伺服器處理,資料庫只做輔助的業務處理 3.快取 4.快取更新 同步 快取失效 time out 重新去資料庫中查詢,實時性較差 5.一旦資料庫中資料更新,立即通知前端快取更新,實時性較好 6.快取換頁 記憶體不夠,將不活躍資料換出記憶體 fifo 先進...

從零開始學架構 00學習

這個專欄躺在極客時間裡已經躺了很久了,有空的時候才會去聽它,斷斷續續的學習沒有多大效果。還是希望能有時間系統的學習一遍,所以才會整理這份學習筆記,希望寫完了還回再回過頭看看吧。廢話不多說,直接總結乾貨。1.架構設計相對程式設計來說思維方式有很大的差異。架構設計是判斷和取捨,程式設計是邏輯和實現。2....

從零開始學NGUI (四)Slider

首先在assets ngui examples wooden下 找到control horizontal slider,並拖拽到scene中 在hierarchy視窗,將這個slider重新命名為myhorizontalslider 執行unity可以任意滑動這個slider 如何根據slider的...