標籤:更新 img 失敗 網路 作業系統 監視 應用服務 方案 接收
大並發伺服器架構介紹
一、伺服器設計目標
(1)高效能(High Performance):快速請求響應;
(2)高可用(High Availability):能7X24小時工作,能夠進行容錯移轉;
(3)伸縮性(Scalability):能跨機器通訊;
二、分布式
(1)負載均載
(2)分布式儲存
(3)分散式運算
三、C/S結構
任何網路系統都可以抽象為C/S結構
四、一個典型的伺服器結構
網路I/O + 伺服器高效能編程技術 + 資料庫
1.超出資料庫連接數:
(1)問題描述:
資料庫並發串連數10個,應用伺服器這邊有1000個並發請求,將會有990個請求失敗;
(2)解決方案:
我們可以加一個隊列進行排隊,中介層DAL資料訪問層(佇列服務+串連池)。
2.超出時限:
(1)問題描述:
資料庫並發串連數10個,資料庫1秒鐘之內最能處理1000個請求,應用伺服器這邊有10000個並發請求,會出現0-10秒的等待;
(2)解決方案:
主要的商務邏輯挪到應用伺服器處理,資料庫只做輔助的業務處理,利用緩衝cache。
3.緩衝更新(緩衝同步)
(1)如果緩衝失效(timeout),重新去資料庫查詢,這種方法即時性比較差;
(2)將熱點資料存至緩衝,一旦資料庫中資料更新,立即通知前端的緩衝更新,這種方法即時性比較高。
4.緩衝換頁:
記憶體不夠,將不活躍的資料換出記憶體。常見換出演算法有:FIFO(先進先出) LRU(最近最少使用) LFU(最不頻繁使用換出),這些在大家的作業系統課程中應該有介紹過。
5.nosql:
key/value 存放非關係資料,一致性要求不是很高的資料,可以把nosql當做緩衝來使用,比如分布式緩衝開源軟體:redis memcached等。
6.資料庫讀寫分離:
對大部分應用來說資料庫的讀操作,>寫操作,對資料庫進行負載平衡,master(主人) slave(奴隸)實現主從機制,主庫負責寫的操作,從庫負責讀的操作,利用大部分資料庫都有的replication機制。
7.應用伺服器的負載平衡:
增加一個任務伺服器來實現,任務伺服器查詢可以監視應用伺服器當前的負載。如CPU高、IO高、並發高、記憶體換頁高等情況。
(1)應用伺服器被動接收任務:查詢到這些資訊之後,選取負載最低的伺服器分配任務;
(2)應用伺服器主動接收任務:更公平。
8.資料分區(分庫、分表):
(1)垂直資料分割:分庫,資料庫可以按照一定的邏輯,把表分散到不同的資料庫,如分為使用者表、業務表、基礎資料表;
(2)水平資料分割:如把使用者表的10條記錄分到10個資料庫,每個資料庫分到一條記錄。這種方式更常用。
9.伺服器效能的四大殺手:
(1)資料拷貝:盡量減少資料拷貝,伺服器內部一些緩衝解決;
(2)環境切換(理性建立線程): 該不該用多線程,單線程好還是多線程好,例如單核伺服器(採用狀態機器編程,效率最佳) 採用多線程編程時不能並發,反而增加了線程間的切換開銷;多核伺服器使用多線程能夠充分發揮多核伺服器的效能;
(3)記憶體配置: 記憶體池;
(4)鎖競爭:儘可能減少鎖的競爭;
歡迎大家學習交流,如有不足懇請批評指正,轉載請註明出處,感謝您的支援。如果您也喜歡我的部落格可以持續關注我,讓我們一起成長,共同進步。
生活很精彩 剔除雜質,留下對編程的窮極探索 純粹追求。
大並發伺服器開發學習筆記_01大並發伺服器架構介紹