分佈式架構優化方案

第一級優化:數據庫的優化

1.集羣(主備、讀寫分離,----如何實現讀寫分離?(aop來實現,中間件mycat來實現)) 

2.分表、分庫(應對大數據量)

3.開啓緩存(將數據暫時放入內存中)

4.開啓索引查詢

5.數據庫表的設計(儘量不要讓表的關係不要太複雜)

6.sql語句的優化


數據庫不能解決所有問題,隨着讀取數據庫的併發壓力的增加,數據庫集羣也越來越難以處理頻繁的io操作。不能無限制的構建mysql集羣,?不行,集羣也是會有他的瓶頸。 因此要考慮別的優化。(加redis緩存)
爲了進一步減輕數據庫壓力:redis緩存

第二級優化、redis緩存服務優化

1.減輕數據庫壓力
2.提高查詢效率,(內存版的nosql數據庫,讀取效率每秒11w次,最基本的服務器。17年雙十一阿里的併發爲38w,因此redis的查詢效率是相當快的,)
3.併發能力提高
redis 是 nosql內存版的數據庫:
1.內存數據庫(內存存滿了,內存淘汰策略)
2.存儲原理(通過hash槽進行存儲)
3.線程安全(單線程數據庫,雖然是單線程,但是它是基於內存的nosql數據庫,它的查詢速率相當的高)最大的特性就是單線程。

第三級優化、使用solr進行搜索

1.減輕了數據庫的壓力,
2.提高查詢效率(查詢索引)
3.併發能力提高
面試:
1.索引庫的維護?添加(擴展詞彙、停用詞彙、動態)、同步索引庫、刪除
2.solr集羣(運維人員)
》集羣的特性
》集羣api
》zookeeper特性,數據節點4種類型(臨時節點)
瞭解:每個節點是有生命週期的,這取決於節點的類型。在ZooKeeper中,節點類型可以分爲持久節點(PERSISTENT )、臨時節點(EPHEMERAL),以及時序節點(SEQUENTIAL ),具體在節點創建過程中,一般是組合使用,可以生成以下4種節點類型:
持久節點(PERSISTENT)
所謂持久節點,是指在節點創建後,就一直存在,直到有刪除操作來主動清除這個節點——不會因爲創建該節點的客戶端會話失效而消失。
持久順序節點(PERSISTENT_SEQUENTIAL )
這類節點的基本特性和上面的節點類型是一致的。額外的特性是,在ZK中,每個父節點會爲他的第一級子節點維護一份時序,會記錄每個子節點創建的先後順序。基於這個特性,在創建子節點的時候,可以設置這個屬性,那麼在創建節點過程中,ZK會自動爲給定節點名加上一個數字後綴,作爲新的節點名。這個數字後綴的上限是整型的最大值。
臨時節點(EPHEMERAL )
和持久節點不同的是,臨時節點的生命週期和客戶端會話綁定。也就是說,如果客戶端會話失效,那麼這個節點就會自動被清除掉。注意,這裏提到的是會話失效,而非連接斷開。另外,在臨時節點下面不能創建子節點。

臨時順序節點(EPHEMERAL_SEQUENTIAL)

 

前三級是數據層面的優化。


下面是項目層的優化  面向服務的分佈式架構SOA

 

第四級優化:面向服務架構優化

1.分擔服務器的壓力
2.提高項目併發能力


代碼優化:java程序的性能調優,
1.設計模式(掌握基本的設計模式)?
2.垃圾回收gc ?
3.多線程問題?(線程池,安全性問題,線程鎖)
4.jvm優化,
5.tomcat服務器的優化
 

第五級優化:引入第三方文件系統存儲圖片

fastDFS分佈式文件系統
1.減輕項目壓力
2.提高文件加載速度


圖片碎片化存儲
圖片水印 

 

第六級優化:activeMQ消息總線,(異步通信)

activemq消息中間件
1.流量削峯(秒殺)
2.提高用戶併發能力

應用層優化:

 

第七級優化:  商品詳情靜態頁面/動靜分離   靜態頁面服務器

通過nginx服務器來訪問靜態頁面
html
css
js


1.提高查詢效率(查詢靜態頁面,和後臺服務沒有交互)
2.提高併發能力


 

第八級優化:nginx負載/http服務器

1.提高併發能力
2.提高加載速度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章