典型伺服器結構:
網路i/o+伺服器高效能程式設計技術+資料庫
高併發問題:
1.超出資料庫連線數:
乙個資料庫最多同時連線10個當伺服器1000個請求,則有990個失敗。
2.超出時限
資料庫併發連線數為10,1s中最多處理1000個請求,當有10000個請求,則會出現0-10s等待。
解決方案:
1.應用佇列+連線池
2.主要業務邏輯在應用伺服器處理,資料庫製作輔助業務處理
3.快取 redis(分布式快取 )
(1)快取同步,當快取失效,去資料庫查詢資料,時效性較差
(2)當資料庫更新,則更新前端快取。
快取換頁,記憶體不夠時,將不活躍的資料患處記憶體。fifo (先進先出) lru (將最近最少使用換出) lfu(最不頻繁使用)
4.負載均衡
(1) 資料庫
讀寫分離 資料庫 讀操作》寫操作 使用負載均衡 主從機制 將乙個資料分為多個資料庫 ,乙個用於寫 多個用於讀,當主庫更新資料,從庫也更新
(2)應用伺服器
1.被動接受任務: 使用任務伺服器監控應用伺服器的負載(http), cpu io 併發 記憶體換頁,查詢到這些資訊後,選取負載最低的伺服器分配任務
2.主動請求任務:
5.資料庫分割槽(分庫、分表)
分庫,垂直分割槽,資料庫按照一定的邏輯,把錶分散
水平分割槽
6.伺服器效能殺手
1.資料拷貝 快取
2.環境切換 該不該用多執行緒,單執行緒好還是多執行緒好,
單核伺服器(採用狀態機程式設計,效率最佳)
多核伺服器能充分發揮多和伺服器效能
3.記憶體分配 增加記憶體池
4.鎖競爭
高效能伺服器設計1
先後檢視了 haproxy l7sw 和 lighttpd 的相關原始碼,無一例外,他們一致認為多路復用是效能最好的伺服器架構。事實也確實應該如此,程序的出現一方面就是為了儲存任務的執行上下文從而簡化應用程式設計,如果程式的邏輯結構不是很複雜,那麼用整個程序控制塊來儲存執 行上下文未免有些大材小用,...
linux高效能伺服器程式設計(1)
linux網路程式設計基礎api 1 socket位址api 2 sockt基礎api sockt的api全部定義在sys socket.h檔案中,包括 建立socket,命名socket,監聽socket,接受連線,發起連線,讀寫資料,獲取位址資訊,檢測帶外標記,以及讀取和設定socket選項。3...
高效能伺服器設計
原文 http blog.chinaunix.net u 5251 showart 236329.html 先後檢視了 haproxy l7sw 和lighttpd 的相關原始碼,無一例外,他們一致認為多路復用是效能最好的伺服器架構 事實也確實應該如此,程序的出現一方面就是為了儲存任務的執行上下文從...