把網站架構層次化

來源:互聯網
上載者:User

   一個較為合理的網站架構,通常會對整個架構進行分層設計。這樣的好處是分散伺服器的壓力,不至於由於單台伺服器壓力過大宕機而停止提供服務。在架構設計中,我覺得有2個黃金準則。一個是“所有的問題,都往前面推”,另一個是“避免單點故障”。這兩點實際上也就保證了系統架構的高可用、可擴充性和可靠性。

   下面簡單的畫一個圖,來說明一下,就我的理解,一個網站的架構大概可以分為以下四層:

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1G1535602-0.jpg" title="一般網路架構.jpg" />

    從底層開始,分別是共用儲存層,伺服器層,緩衝加速層,負載平衡層等4層。

共用儲存層:提供儲存空間,由於上面一層多台伺服器都串連到共用存放裝置這裡來,這樣就保證了資料的一致性。當然共用存放裝置的價格還是相當昂貴的,並不是所有公司,所有業務都承受得起。在沒有這種條件的情況下,就只能使用一台有較大硬碟空間的伺服器,作為存放裝置,並在上層伺服器上,通過NFS 掛載該裝置。  

    這一層所涉及的技術或工具有:Distributed File System,NFS,DRBD,RAID陣列等。

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1G1531618-1.gif" />相關連結:

DRBD+HeartBeat+NFS 架構 http://pmghong.blog.51cto.com/3221425/1261349

鏡像技術DRBD http://pmghong.blog.51cto.com/3221425/1260138

磁碟鏡像技術 DRBD 原理簡介 http://pmghong.blog.51cto.com/3221425/1259488


伺服器層:顧名思義,這一層伺服器主要提供相關的業務支援,例如這是一個網站架構,則這裡提供的主要是web服務和mysql資料庫的服務。多台伺服器組成的一個集合叫做“伺服器集區”,當使用者請求分配過來後,系統將從伺服器集區中挑選出其中一台服務,並由分配到的這台伺服器真正的提供服務。當業務擴充,伺服器壓力過大,可以往該伺服器集區中添加新的伺服器,共同分攤壓力,從而減小單台機器的壓力,提高效率。

   這一層涉及的軟體:apache、nginx、lighthttpd等。其中以nginx的效能為優,它支援高並發,而且資源消耗少,配置簡單。

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1G1531618-1.gif" />相關連結:

nginx+tomcat 跑jsp http://pmghong.blog.51cto.com/3221425/1218497

apache+nginx 實現動靜分離 http://pmghong.blog.51cto.com/3221425/1217151

搭建lemp環境http://pmghong.blog.51cto.com/3221425/1178603


緩衝層:這一層實際上並不是必須的,但業務較小的時候,可以先不考慮這一層的設計。緩衝層顧名思義,就是通過緩衝靜態檔案,從而達到加速的功能。設定了緩衝層之後,當使用者第一次請求訪問的時候,快取服務器會到底層走一遍,將使用者請求資料拿過來,發送給使用者並在本地儲存一份資料。但第二次,使用者請求相同的內容的時候,快取服務器還是會到底層跑一遍,但是它只做一個校正,已確保緩衝中的資料是否與底層伺服器上的資料一致。如果一致,則快取服務器會將緩衝中的資料直接返回給使用者,從而提高使用者體驗。

   這一層涉及的軟體:squid,nginx

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1G1531618-1.gif" />相關連結:

nginx 實現反向 Proxy  http://pmghong.blog.51cto.com/3221425/1244223


   負載平衡層:這一層的伺服器作為先鋒置於最前端,使用者請求最先到達),需要相當的處理和負載能力,因為它本身充當的就是一個調度器的作用,需要扛住大量的使用者訪問所造成的壓力。因此這一層的伺服器往往要求高CPU,高記憶體和高頻寬等。另外這一層作為整個架構的最前端,相當於整個架構的統帥,一旦這一層停止提供服務,底層伺服器將全部停止提供服務(確切的講,是沒辦法被分配到任務)所以,應該足夠重視這一層伺服器的設定,可通過一些機制、技術來確保其可靠性。不至於單台伺服器宕機,則造成整個系統的癱瘓。

   這一層涉及的軟體和技術:haproxy、keepalived、nginx、lvs等


650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1G1531618-1.gif" />相關連結:

nginx+keepalived 負載平衡架構  http://pmghong.blog.51cto.com/3221425/1264947

Haproxy+keepalived實現高可用負載平衡 http://pmghong.blog.51cto.com/3221425/1262741

lvs+keepalive 實現高可用叢集 http://pmghong.blog.51cto.com/3221425/1201533

LVS_TUN http://pmghong.blog.51cto.com/3221425/1195695

LVS_DR  http://pmghong.blog.51cto.com/3221425/1195686

LVS_NAT  http://pmghong.blog.51cto.com/3221425/1192543


補充一下:

   實際上,在架構的設計中,還有兩點需要考慮進去,一個就是資料庫的設計。對於一個大型網站來說,資料庫的設計尤為重要,它可能對網站的整體響應速度上,起著至關重要的作用。例如,當資料量大的時候,應該如何對資料進行“切割”,如何提高查詢速度,這些都是我們需要考慮的。(這裡只考慮mysql)

相關技術和要點:

   mysql分表(垂直分表,水平分表)、mysql分區、mysql慢查詢、sql語句最佳化、參數最佳化、索引、Database Backup等。

主要的架構有:主從複製、mysql叢集


另一方面就是監控系統。在事故發生的第一時間趕赴現場並及時處理問題,是我們營運人員義不容辭的。我們不可能7*24 小時對著監控螢幕看伺服器是否出現問題,這時我們便需要一個工具來幫我們“看著”我們的伺服器,那就是監控系統。


   這裡說的監控系統,其實可大可小,具體應該根據業務需求來確定,可以簡單的通過shell,python等指令碼來實現監控並警示。也可以通過其他開源軟體來完成,這裡主要推薦以下三款:

nagios、cacti和zabbix,這三者各有優缺點,這裡就不展開了,有需要的可以自行去瞭解。



以上觀點,均為個人所見,鑒於本人學識淺薄,可能很多方面都沒考慮到,還請大家多多指教。有什麼補充的,也歡迎大家提出來,完善一下!謝謝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.