我們知道,對于一個大型網站來說,可伸縮性是非常重要的,怎么樣在縱向和橫向有良好的可伸縮性,就需要在做架構設計的時候考慮到一個分的原則,我想在多個方面說一下怎么分:
橫向的分
1. 大的網站化解為多個小網站:當我們一個網站有多個功能的時候,可以考慮把這個網站拆分成幾個小模塊,每一個模塊可以是一個網站,這樣的話我們到時候就可以很靈活地去把這些網站部署到不同的服務器上。
2. 靜態動態分離:靜態文件和動態文件最好分離開成2個網站,我們知道靜態網站和動態網站對服務器來說壓力的側重不同,前者可能重IO后者重CPU,那么我們在選擇硬件的時候也可以有側重,而且靜態和動態內容的緩存策略也不一樣。典型的應用,我們一般會有獨立的文件或圖片服務器。
3. 按照功能來分:比如有一個模塊是負責上傳的,上傳操作很消耗時間,如果和其它應用混在一起的話很可能,一點點訪問就會使服務器癱瘓,這種特殊的模塊應該分開。安全的不安全的也要分開,還需要考慮到以后SSL的購買。
4. 我們不一定要全部用自己的服務器,搜索、報表可以依靠別人的服務,比如google的搜索和報表服務,自己做的不一定比得過別人,服務器帶寬都省了。
縱向的分
1. 文件也相當于數據庫,IO的流量可能比數據庫還大,這也算是縱向級別的訪問,上傳的文件圖片一定要和WEB服務器分開。當然,數據庫和網站都放在一個服務器上的很少了,這是最基本的。
2. 對于涉及到數據庫訪問的動態程序來說,我們可以使用一個中間層(所謂的應用層或邏輯層)來訪問數據庫(部署在獨立的服務器上),最大的好處就是緩存和靈活性。緩存的內存占用比較大,我們要把它和網站進程分開,而且這樣做我們可以很方便的去改變一些數據訪問的策略,即使到時候數據庫有分布的話在這里可以做一個調配工作,這樣靈活性就很大了。
還有好處是中間層可以做電線網通橋梁,可能網通訪問雙線再訪問電信會比網通直接訪問電信服務器快。 有人說我不分,我可以做負載均衡,對,是可以的,但是如果分的話,同樣的10臺機器肯定比不分10臺機器可以承受更多的訪問量,而且對硬件的需求可能不會很高,因為知道需要哪個硬件特別好。爭取讓每一個服務期都不空閑,又都不是太忙,合理進行組合調整和擴充,這樣的系統伸縮性就高了,能根據訪問量來調整的前提就是之前有考慮到分,分的好處是靈活性、伸縮性、隔離性以及安全性。
新聞熱點
疑難解答