軟件體系架構閱讀筆記(十四)

通常狀況下,架構分兩種來討論的,一種是開發架構,一種是部署架構數據庫

部署架構,就是開發完的程序在實際運行環境下,經過負載均衡,DNS輪詢,SquID等等來減輕單臺服務器負載,達到性能優化的目的設計模式

這裏你們估計更想了解的是開發上的架構緩存

我的觀點是,全部的架構都是死的,而Web高性能開發優化策略是活的,我在開發中,全部的東西都不是必定要按照什麼固定的模式,去死開發,更多的是針對須要優化的信息進行鍼對處理,下面說說個人優化策略性能優化

一、數據庫優化,這個是全部的優化策略中中重要的,能夠說數據庫設計的好壞,直接影響了一個系統的承受力。普通的數據庫細節優化,網上已經有大筆文章了,沒什麼好說的,想了解的本身去找。而我要說的就是在數據庫設計中的一個思路,分庫、分表、緩存表。服務器

1)分庫指的是在設計中,要考慮到後期數據量大的狀況下,你的數據庫可以隨着應用隨時拆分,這個拆分並非只是針對功能模塊對應的數據拆分。舉個例子,就 用這個CSDN論壇吧,好比裏面有不少類,C#版,JAVA版,系統設計版等等,拆分的目的是能夠把任何一個版的數據拆分到單獨的一個數據庫中去。架構

2)分表相對的就好理解了,就是說同類型的數據,你能夠爲了性能優化,進行拆分到多個表中去,拆分規則能夠有多種,按照類型、按照時間、按照姓名等等。一樣以這個CSDN論壇來講,我要設計的話,我會按照裏面的大版面進行數據庫拆分,而按照小版,進行表拆分。負載均衡

3)而對於緩存表,網上我還不多看到有人來講這個東西,這個的目的就是針對一個大的數據表中,通常中有死數據庫和活動數據,好比用戶表,裏面有不少基本不 來的用戶,那麼針對這樣的狀況,當表數據上了千萬的時候,我就會採用緩存表的模式來進行了,就是在實際表和用戶之間在搭建一個臨時表,訪問用戶數據時,首 先訪問臨時表,若是不存在,則進入實際表中獲取,而後放入緩存表中,同時會經過後臺線程,定時將緩存表數據同步到實際數據庫中,同步時間能夠針對系統要求 來進行。數據庫設計

若是理解了上面的東西,那麼在數據承載上,能夠上升一個很大的層次。。。。。性能

二、程序優化。這個對我來講相對的就不是那麼的看中了,程序的優化,我更多的認爲是個技巧,而不是架構了,包括如今常常見到的那些各類設計模式,另外這裏提下,不少設計模式,他的出發點並非Web高性能開發,而是考慮的系統擴展性,因此在單個技術細節上,不少人也發現了,並不如直接的寫代碼來的快,可是就是推薦 那樣,是由於採用了那些模式的程序,擴展性比你的強,那麼一旦系統要求變更,或者是要求進行拆分的時候要比你方便的多,在分擔到多個服務器上時,性能相對 的就起到了優化也。廢話了通,繼續說我對程序部分常常採用的方式吧優化

1) 首推靜態化,這個的優化效果不用多說,直接減輕了服務器負擔,不過若是用上了Squid,那麼有第三放來作靜態,也能夠達到一樣的效果

2) 合適的數據緩存,緩存不少人都用到了,可是在使用前,是否定真思考過爲這個這個要進行Cache,Cache他的標準是什麼?我說下個人標準:小數據量、 大訪問量、更新儘可能少的數據,所有能夠進行緩存。另外我提到的緩存,並不僅是說。NET自己提供的Cache,我說的緩存還包括了使用Static來進行 的數據

3) 活用線程,不少人的觀念中感受線程好象在B/S中是用不到的,或者是沒有必要。其實這個觀念徹底錯,在特定狀況下使用線程,能夠提升的局部性能不是一點兩點

4) 功能模塊拆分,這個通常人基本都在作,我要補充的是,不僅是在單個項目中進行功能模塊的拆分,而是爲了進行分步式開發而進行拆分在其它的基本都是細節優化。

相關文章
相關標籤/搜索