一般情況下,架構分兩種來討論的,一種是開發架構,一種是部署架構
部署架構,就是開發完的程序在實際運行環境下,通過負載均衡,DNS輪詢,SquID等等來減輕單臺服務器負載,達到性能優化的目的
這里大家估計更想了解的是開發上的架構
我對這個的觀點是,所有的架構都是死的,而Web高性能開發優化策略是活的,我在開發中,所有的東西都不是一定要按照什么固定的模式,去死開發,更多的是針對需要優化的信息進行針對處理,下面說說我的優化策略
1、數據庫優化,這個是所有的優化策略中中重要的,可以說數據庫設計的好壞,直接影響了一個系統的承受力。普通的數據庫細節優化,網上已經有大筆文章了,沒什么好說的,想了解的自己去找。而我要說的就是在數據庫設計中的一個思路,分庫、分表、緩存表。
1)分庫指的是在設計中,要考慮到后期數據量大的情況下,你的數據庫能夠隨著應用隨時拆分,這個拆分并不是只是針對功能模塊對應的數據拆分。舉個例子,就用這個CSDN論壇吧,比如里面有很多類,C#版,JAVA版,系統設計版等等,拆分的目的是可以把任何一個版的數據拆分到單獨的一個數據庫中去。
2)分表相對的就好理解了,就是說同類型的數據,你可以為了性能優化,進行拆分到多個表中去,拆分規則可以有多種,按照類型、按照時間、按照姓名等等。同樣以這個CSDN論壇來說,我要設計的話,我會按照里面的大版面進行數據庫拆分,而按照小版,進行表拆分。
3)而對于緩存表,網上我還很少看到有人來說這個東西,這個的目的就是針對一個大的數據表中,一般中有死數據庫和活動數據,比如用戶表,里面有很多基本不來的用戶,那么針對這樣的情況,當表數據上了千萬的時候,我就會采用緩存表的模式來進行了,就是在實際表和用戶之間在搭建一個臨時表,訪問用戶數據時,首先訪問臨時表,如果不存在,則進入實際表中獲取,然后放入緩存表中,同時會通過后臺線程,定時將緩存表數據同步到實際數據庫中,同步時間可以針對系統要求來進行。
如果理解了上面的東西,那么在數據承載上,可以上升一個很大的層次。。。。。
2、程序優化。這個對我來說相對的就不是那么的看中了,程序的優化,我更多的認為是個技巧,而不是架構了,包括現在經常見到的那些各種設計模式,另外這里提下,很多設計模式,他的出發點并不是Web高性能開發,而是考慮的系統擴展性,所以在單個技術細節上,很多人也發現了,并不如直接的寫代碼來的快,但是就是推薦那樣,是因為采用了那些模式的程序,擴展性比你的強,那么一旦系統要求變動,或者是要求進行拆分的時候要比你方便的多,在分擔到多個服務器上時,性能相對的就起到了優化也。廢話了通,繼續說我對程序部分經常采用的方式吧
1)首推靜態化,這個的優化效果不用多說,直接減輕了服務器負擔,不過如果用上了Squid,那么有第三放來做靜態,也可以達到同樣的效果
2)合適的數據緩存,緩存很多人都用到了,但是在使用前,是否認真思考過為這個這個要進行Cache,Cache他的標準是什么?我說下我的標準:小數據量、大訪問量、更新盡量少的數據,全部可以進行緩存。另外我提到的緩存,并不只是說。NET本身提供的Cache,我說的緩存還包括了使用 Static來進行的數據
3)活用線程,很多人的觀念中感覺線程好象在B/S中是用不到的,或者是沒有必要。其實這個觀念完全錯,在特定情況下使用線程,可以提高的局部性能不是一點兩點
4)功能模塊拆分,這個一般人基本都在做,我要補充的是,不只是在單個項目中進行功能模塊的拆分,而是為了進行分步式開發而進行拆分
在其它的基本都是細節優化了,這個沒有太多興趣寫了,網上資料應該不少,可以自己搜索查閱
上面的這幾部分如果能在開發中,靈活運用上,可以說,你實現Web高性能開發,絕對不是難事。
我曾經開發的過的站點中,也有過社區,一個WEB服務器,一個DB服務器,主題帖千萬,回復帖有6000W左右吧,其它數據不算,運行過程中沒出過任何問題,日訪問在100WPV情況下,還沒有達到性能瓶頸。
原文出處:
http://java.csdn.net/index.php/2009/09/07/%e4%bb%8e%e6%9e%b6%e6%9e%84%e5%b7%ae%e5%bc%82%e7%9c%8bweb%e9%ab%98%e6%80%a7%e8%83%bd%e5%bc%80%e5%8f%91/
posted on 2009-09-10 13:20
Mickey.Shao 閱讀(154)
評論(0) 編輯 收藏 所屬分類:
技術文章轉載