最後一本有關軟體架構的著作是群裡的《軟體架構實踐第二版》掃瞄版,閱讀後總結記錄了我個人認為書中的一些重點:
1、**架構模式:分層(單一職責,mvc分層,控制層-服務層-資料層),分割(不同功能與服務分割),分布式(服務呼叫需要通過網路,帶來了網路問題;分布式資料一致性問題),集群,快取,非同步,冗餘(冷備份,熱備份),自動化,安全。
2、常用的分布式方案:分布式應用與服務;分布式靜態資源(動靜分離js,css,等,減輕應用伺服器的負載壓力);分布式資料與儲存(讀寫分離;分庫分表;快取優化;傳統資料庫分布式部署;使用nosql);分布式計算。
3、快取:cdn(內容分發,部署在離使用者最近的網路服務商),反向**(部署在**的資料中心),本地快取(快取在本機記憶體中,但是不適合大量的資料),分布式快取(分布式快取集群)。熱點資料快取,注意快取的時間,避免出現資料髒讀,影響資料一致性。
4、非同步:單一伺服器可以通過多執行緒共享記憶體佇列的方式實現;分布式系統中可以通過分布式訊息佇列實現。典型的模型就是生產者-消費者模式,兩者之間不存在直接呼叫,只是保持資料結構不變。作用:提高**可用性;加快**響應速度;消除併發訪問高峰。
5、效能問題,**響應速度慢,優化措施:通過瀏覽器快取,頁面壓縮等;使用cdn,動靜分離,部署反向**伺服器,快取熱點檔案;使用本地快取與分布式快取;使用訊息佇列,非同步處理請求;**層面使用多執行緒,記憶體管理等進行優化;資料庫方面使用索引,快取,優化sql,讀寫分離等。
6、可用性:**高可用的主要手段就是冗餘,通過負載均衡伺服器統一乙個集群對外提供服務,有效的負載均衡策略;資料伺服器進行實時備份,宕機時進行資料轉移並恢復。
7、**可擴充套件性的主要手段是事件驅動架構和分布式服務。事件驅動通常將請求構造成訊息發布到訊息佇列之中,訊息處理者通過訊息佇列中獲取訊息進行處理。分布式服務是將業務與基礎服務分離開來。
8、效能優化策略:首先要進行效能資料的蒐集,然後針對性能報告進行效能分析,檢查請求處理的各個環節的日誌資訊,分析是哪個環節響應時間較長,檢查監控資料,分析影響效能的是硬體設施(記憶體,磁碟,cpu,網路)還是**問題還是架構設計不合理,亦或是系統資源不足等。找到問題的原因後再針對不同的問題進行相應的優化。
9、瀏覽器訪問優化:減少http請求(合併css,js檔案,等),http協議是無狀態的應用層協議,意味著每次http請求都需要建立通訊鏈路,進行資料傳輸。使用瀏覽器快取(設定http的頭字段)。啟用壓縮(對html,css,js檔案進行gzip壓縮)
11、快取的基本原理:快取指的是將資料儲存在相對較高訪問速度的儲存介質中,減少資料訪問的時間。快取的本質是乙個記憶體hash表,資料快取以一對key,value的形式儲存在記憶體hash表中。hash表資料讀寫的時間複雜度為o(1)。快取中主要用來存放讀寫比較高,很少變化的資料,應用程式先讀寫快取,快取中沒有或者資料失效再去資料庫中查詢,並將查詢到的資料寫入快取。快取要考慮資料一致性問題與髒讀。可以設定策略是資料更新後馬上更新快取。快取雪崩問題通過分布式快取解決。
12、分布式快取:快取部署在多個伺服器組成的集群上。兩種快取架構方式:jboss cache為代表的需要更新同步的分布式快取;以memcached為代表的不互相通訊的分布式快取。
13、jboss cache的分布式快取在集群中的所有伺服器上都儲存相同的快取資料,當某台伺服器快取更新時,會通知集群中所有的機器進行快取更新或清除快取。一般會將jboss cache與應用程式部署在同一伺服器上。
14、memcached採用的是集中式的快取管理,快取與應用分離部署,快取系統部署在專門的集群上,應用程式通過一致性hash等路由演算法選擇快取伺服器遠端訪問快取資料,快取伺服器之間不通訊。這樣快取集群可以很簡單的實現擴容,具備良好的可伸縮性。採用的是tcp協議(udp也支援)通訊,序列化協議是通過基於文字的自定義協議。服務端和客戶端,採用memcached協議互動。
15、負載均衡+session複製,將session同步至每個應用伺服器,保證服務的狀態。session繫結,利用負載均衡的源位址hash演算法實現將**於同一ip的請求始終分發到同一臺應用伺服器上。利用瀏覽器的cookie記錄下session以及sessionid,將session以及sessionid傳送給負載均衡器,負載均衡伺服器根據sessionid將請求**至相應的應用伺服器。設定專門的session伺服器統一管理session,應用程式每次讀寫session都通過session伺服器。
03《軟體構架實踐第二版》閱讀筆記之三
在本書的第一部分,我們學習了預想構架,為分析軟體架構奠定了基礎,陳述了當設計師開始構建系統時的各種影響因素,並指出了特定的質量屬性要求通常產生於組織的業務目標。而本書的第二部分的重點就是設計師如何建立構架。首先 的是可能適合構架的不同型別的質量屬性。在構架商業週期部分,已經學習到商業目的決定了系統構...
軟體架構實踐閱讀筆記二
1 質量屬性 系統從設計 實現到部署的整個過程中考慮質量屬性的實現。質量屬性包括下列三類 1 系統的質量屬性。可用性 可修改性 效能 安全性 可測試性和易用性 2 受架構影響的商業屬性。上市時間 成本和收益 所希望的系統生命期的長短 目標市場 推出計畫 與老系統的整合 3 與架構本身相關的一些質量屬...
試讀 《軟體架構設計(第二版)》
作為技術開發人員以及有將近2年了。因為現在團隊裡有乙個架構師,所以在日常開發中不太涉及到架構方面的思考。但總聽到大家在會議上討論 過度設計 冗餘設計 深刻體會到作為乙個剛入門的開發人員,想要成為乙個架構師還有很多地方需要學習進步。掌握好基本的技術只是第一步。讀書我會首先看目錄,軟體架構設計 這本書的...