大型網站架構演變和知識體系

jopen 12年前發布 | 50K 次閱讀 網站

1、架構演變第一步:物理分離webserver和數據庫

大型網站架構演變和知識體系

2、架構演變第二步:增加頁面緩存

如用squid做頁面緩存,或生產靜態頁面,不使用jsp

大型網站架構演變和知識體系

3、架構演變第三步:增加頁面片段緩存

頁面緩存失效情況比較多,因此可以使用頁面片段緩存,只緩存不長變部分。

大型網站架構演變和知識體系

4、架構演變第四步:數據緩存:緩存那些讀多寫少的數據。最常見的就是用戶數據。如java中單JVM級/集群級緩存(Ehcache)、分布式緩存(memcached)等。

大型網站架構演變和知識體系

5、架構演變第五步: 增加webserver(集群web server):考慮負載均衡(apache的負載均衡,LVS負載均衡、F5硬件級負載均衡),數據緩存需要考慮使分布式緩存(memcached)

大型網站架構演變和知識體系

6、架構演變第六步:分庫:按業務將不同業務分為不同的庫,部署到不同的服務器上,如用戶系統單獨一臺、論壇等其他每個產品一臺。

大型網站架構演變和知識體系

7、架構演變第七步:分表、DAL和分布式緩存:按照分庫思想分表,需要注意一些規則。如用戶系統設計時,把不經常訪問的數據放到 一張表(需要時加載)。DAL(Data Access Layer):分布式數據訪問層,使分表透明化,自動切表。DAL涉及到比較多的復雜技術,例如數據庫連接的管理(超時、異常)、數據庫操作的控制(超 時、異常)、分庫分表規則的封裝等;

大型網站架構演變和知識體系

8、架構演變第八步:增加更多的webserver:web服務器禁止使用session,數據可存分布式緩存

大型網站架構演變和知識體系

9、架構演變第九步:數據讀寫分離和廉價存儲方案:如使用NoSql(key-value數據庫,mongodb等),數據讀寫分離要求對數據庫的復制、standby(可將單實例數據庫升級到RAC

(real application clusters 實時應用集群)數據庫)等策略有深入的掌握和理解,同時會要求具備自行實現的技術;

大型網站架構演變和知識體系

大型網站架構演變和知識體系

10、架構演變第十步:進入大型分布式應用時代和廉價服務器群夢想時代

大型網站架構演變和知識體系

大型網站架構演變和知識體系

七種緩存使用武器 為網站應用和訪問加速發布時間:

Web應用中緩存的七種武器:

1 數據庫的緩存

通常數據庫都支持對查詢結果的緩存,并且有復雜的機制保證緩存的有效性。對于MySQL,Oracle這樣的數據庫,通過合理配置緩存對系統性能帶來的提升是相當顯著的。


2 數據連接驅動的緩存。

諸如PHP的ADODB,J2EE的連接驅動,甚至如果把HIbernate等ORM也看成連接器的話。這里的緩存有效機制就不是那么強了,使用此步的方法實現緩存的一個最好的優點就是我們取數據的方式可以保持不變。例如,我調用

$db->CacheGetAll("select * from table"); 的語句不需要改變,可以透明實現緩存。這主要應用于一些變化不大的數據上,例如一些數據字典是不經常變化的。


3 系統級的緩存

可以在系統內通過Cache庫,自行對需要的數據進行緩存,例如一個樹樁菜單生成十分消耗資源,那可以將這個生成的樹緩 存起來。這樣做的缺點是,當這顆樹的某些地方被更新時,你需要手動更新緩存內的東西。使用的緩存庫都可以有不同的緩存方法,有的把內容放在硬盤上,有的放 在內存里面,如果你把內容模擬成硬盤來緩存,速度當然也能提升不少。

4 頁面級的緩存

這個在內容管理系統里面用的最多。也就是生成靜態頁面。這里面緩存控制機制最為復雜,一般也沒有什么包治百病的方法,只有具體情況具體分析。通常生成的靜態葉面你需要有一個機制去刪除過時的,或訪問很少的葉面,以保證檢索靜態葉面的速度。

5 使用預編譯葉面和加載為FastCGI的辦法

對于PHP,可以使用zend等編譯引擎,對于JSP本身就是預編譯。而FastCGI的原理就是將腳本預先加載起來,不用每次執行都去讀,這和JSP預編成Servlet,然后加載的道理是一樣的。

6 前置緩存

可以使用Squid作為Web服務器的前置緩存。

7 做集群

對數據庫作集群,對web服務器作集群,對Squild前置機做集群

對于新手來說,如果你的程序要是恰死,首先你要檢查代碼是否有錯誤,是否存在內存泄漏,如果都沒有,那么通常問題出在數據庫連接上面。

綜合應用上面的緩存方法,開發高負載的Web應用成就很容易了。

web軟件設計時考慮你的性能解決方案

* 關鍵準則:

1. 選擇什么編程語言不是問題

2. 選擇的框架才可能影響系統的擴展和性能

3. 我傾向于以數據庫為中心設計數據結構。

4. 分從兩個方面提升性能:

1) . 軟件設計方面

* 網頁靜態化

* 獨立的圖片服務器

* 可能采用中間緩存層服務器,最可能采用第三方成熟的軟件

* 數據庫分表(水平分割是最終方案)

2). 系統、網絡、硬件結構

* 集群:數據庫集群,WEB集群

* 采用:SAN

* 提升網絡接入帶寬

影響性能的因素有哪些?其實只有下面幾個方面:

1.持久性數據查找速度

2.持久性數據讀寫速度

3.邏輯復雜度

4.物理內存不夠導致的虛擬存儲頻繁交換.

對應的解決方法:

1.建立最合適的索引,建立緩存

2.建立緩存,升級硬件

3.精簡,優化邏輯

4.減少內存使用。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!