一直以來,Windows架構體系都是飽受詬病的,因為Windows體系的特殊性使得其擴充套件性及生態性上比其它體系要弱一些、實施代價大一些,但這並不代表Windows體系支撐不了高併發的專案。
高併發、高流量的站點對於系統軟硬體的要求是極高的,若軟、硬體中某一項不達標可能都會使得站點異常。總體來說高併發站點面臨的挑戰有以下幾大方面:
1、單一伺服器的效能瓶頸
每臺伺服器都是有效能上限的,單一伺服器根本抗不住高併發大流量的衝擊,所以需要需要足夠多的伺服器以提升處理能力。
2、伺服器上行頻寬不夠
使用者對伺服器發出請求,伺服器返回資料是需要消耗頻寬的。在大量使用者訪問時伺服器頻寬壓力也就會變得很大。
3、資料庫讀/寫速度慢
資料庫的讀/寫操作會受到鎖機制的影響,本身就存在I/O開銷,訪問量較大時資料庫效能也會跟著下降。
根據上面提到的高併發站點受到的挑戰,我們就可以針對性的來做架構方案以使Windows體系也能承受高併發。
1、負載均衡
透過負載均衡技術,可將流量分攤到多臺節點伺服器上,這樣單一伺服器的負載壓力就會變小。我們可以在多臺Windows伺服器上部署IIS站點,然後拿一臺伺服器作為前置代理伺服器,此代理伺服器架構模式為:Linux + Nginx 。
2、主從同步 + 讀寫分離
SQL Server可以透過釋出與訂閱來實現主從同步,MySQL透過binlog來實現主從同步。
主從同步是為了讀寫分離作準備的,因為絕大多數都是讀多寫少,而寫鎖環境下資料庫查詢速度會很慢,所以我們將讀、寫操作分離保讀資料讀取速度不受寫操作的影響。主庫負責寫入、從庫負責查詢。
3、熱點資料快取,緩解資料庫壓力
很多熱點資料完全可以從快取中讀取,而不是每次都從資料庫中查詢。我們建議使用Redis等NoSQL產品來快取熱點資料,從而緩解資料庫壓力。
4、前端最佳化,加快響應
前端也有很多細節最佳化會直接影響網站的載入速度,另外也可以節省伺服器頻寬壓力,比如說:
前端資源走CDN加速,這也就是動靜分離;
圖片惰性載入,避免載入了不必要的資源,節省了頻寬;
圖片動態裁剪,使得圖片載入速度較快;
請求合併,減少前端資源的排隊時間等。
一直以來,Windows架構體系都是飽受詬病的,因為Windows體系的特殊性使得其擴充套件性及生態性上比其它體系要弱一些、實施代價大一些,但這並不代表Windows體系支撐不了高併發的專案。
高併發高流量站點面臨的挑戰有哪些?高併發、高流量的站點對於系統軟硬體的要求是極高的,若軟、硬體中某一項不達標可能都會使得站點異常。總體來說高併發站點面臨的挑戰有以下幾大方面:
1、單一伺服器的效能瓶頸
每臺伺服器都是有效能上限的,單一伺服器根本抗不住高併發大流量的衝擊,所以需要需要足夠多的伺服器以提升處理能力。
2、伺服器上行頻寬不夠
使用者對伺服器發出請求,伺服器返回資料是需要消耗頻寬的。在大量使用者訪問時伺服器頻寬壓力也就會變得很大。
3、資料庫讀/寫速度慢
資料庫的讀/寫操作會受到鎖機制的影響,本身就存在I/O開銷,訪問量較大時資料庫效能也會跟著下降。
Windows體系高併發架構方案根據上面提到的高併發站點受到的挑戰,我們就可以針對性的來做架構方案以使Windows體系也能承受高併發。
1、負載均衡
透過負載均衡技術,可將流量分攤到多臺節點伺服器上,這樣單一伺服器的負載壓力就會變小。我們可以在多臺Windows伺服器上部署IIS站點,然後拿一臺伺服器作為前置代理伺服器,此代理伺服器架構模式為:Linux + Nginx 。
2、主從同步 + 讀寫分離
SQL Server可以透過釋出與訂閱來實現主從同步,MySQL透過binlog來實現主從同步。
主從同步是為了讀寫分離作準備的,因為絕大多數都是讀多寫少,而寫鎖環境下資料庫查詢速度會很慢,所以我們將讀、寫操作分離保讀資料讀取速度不受寫操作的影響。主庫負責寫入、從庫負責查詢。
3、熱點資料快取,緩解資料庫壓力
很多熱點資料完全可以從快取中讀取,而不是每次都從資料庫中查詢。我們建議使用Redis等NoSQL產品來快取熱點資料,從而緩解資料庫壓力。
4、前端最佳化,加快響應
前端也有很多細節最佳化會直接影響網站的載入速度,另外也可以節省伺服器頻寬壓力,比如說:
前端資源走CDN加速,這也就是動靜分離;
圖片惰性載入,避免載入了不必要的資源,節省了頻寬;
圖片動態裁剪,使得圖片載入速度較快;
請求合併,減少前端資源的排隊時間等。