什麼是refined architecture
refined architecture相對於conceptual architecture而言,分別對應於「概念級」解決方案和「規約級」解決方案。refined architecture(細化架構)屬於架構設計,不能與detailed design(詳細設計)相混淆。
架構領域最喜歡將建築設計的多檢視方法與軟體架構設計的多檢視方法做模擬。
實際意義
多檢視方法的價值:
1.利於思考
2.便於交流
實踐要領
5檢視方法
總圖:每個檢視,乙個思維角度
5檢視方法包括下面幾個檢視:
邏輯檢視。
開發檢視。
執行檢視。
物理檢視。
資料檢視。
5個檢視各自「思維立足點」:
職責劃分(邏輯檢視)。
程式單元組織(開發檢視)。
控制流組織(執行檢視)。
物理節點安排(物理檢視)。
持久化設計(資料檢視)。
詳圖:每個檢視,一組技術關注點
5檢視方法梳理眾多技術關注點:
邏輯架構
劃分子系統的3種比用策略
分層的細化
分層是最常用的架構模式。3層或4層架構支援團隊的並行開發遠遠不夠,需要「分層細化」(更多層)。
分割槽的引入
為了支援迭代開發,邏輯架構設計中必須引入分割槽。分割槽是一種單元,它位於某個曾的內部,粒度比層要小。
一旦架構師對每個層進行分割槽設計,「深度優先」式的迭代開發就非常自然。
機制的提取
機制定義:軟體系統中的機制,是指預先定義好的、能夠完成預期目標的、基於抽象角色的協作方式。機制不僅包含了協作關係,同時也包含了協作流程。
對於物件導向方法而言,「協作」可以被定義為「多個物件為完成某種目標而進行的互動」,而「協作」和「機制」的區別可以概括為:基於介面(和抽象類)的協作是機制,基於具體類的協作則算不上機制。
分層的細化、分割槽的引入、機制的提取這3種策略背後的4個通用設計原則:
職責不同的單元劃歸不同子系統。
通用性不同的單元劃歸不同子系統。
需要不同開發技能的單元劃歸不同子系統。
兼顧工作量的相對均衡,進一步切分太大的子系統。
邏輯架構設計的整體思維套路
要點:質疑驅動。
結構設計和行為設計相分離。
架構設計不是一蹴而就。需求對架構設計有「驅動」作用,不斷設計中間成果->質疑中間成果->不斷調整完善細化中間成果->繼續質疑->繼續完善…
更多經驗總結
物理架構
為什麼需要物理結構設計
有時候增加硬體未必能解決問題;
軟體實際服務能力不僅受到「硬體資源」的制約,也受到「資料短缺」和「資料爭用」的制約。
增加硬體 = 增加計算能力 不等於 軟體的實際服務能力增強
物理結構關注如何可以滿足軟體系統的可靠性、可伸縮性、持續可用性、效能、安全性等方面的要求。
物理架構設計的工作內容
物理架構設計主要的3項任務:
硬體選擇和物理拓撲。
軟體到硬體的對映關係。
方案的優化。
物理架構的設計思維
從設計結果層面,決策無非圍繞物理節點、網路、軟體單元、資料單元等內容展開。
執行架構
為什麼需要執行架構設計
當系統並不引入任何並行或併發處理,並且也沒有給予sdk、api等基礎軟體進行定製開發,那就不需要設計執行架構設計。
如果系統為了應對複雜的業務邏輯或者複雜的互操作邏輯(含硬體互動),或者為了優化關鍵資源使用效率,而必須借助多條控制流並行或者併發執行時,就需要設計執行架構。
執行架構設計工作內容
執行架構設計可能根據具體情況不同包括下列工作內容:
確定引入哪些控制流。
確定每條控制流的任務。
處理相關問題:控制流的建立、銷毀、通訊機制等。
進一步考慮:控制流之間的同步關係,若有資源爭用還要引入加鎖機制。
控制流圖是關鍵。執行架構設計的工作看似多而雜,單其實只要把握「控制流圖」,就能夠提綱挈領地開展其他相關設計。
實現控制流的3種常見手段
最常用於實現控制流的3種手段:
程序、執行緒、中斷服務程式。
開發架構
為什麼開發架構是必須的
並行開發所需的「程式單元」、「原始碼目錄結構」等概念,是不同程式團隊開展具體工作的基礎。
能支援並行的詳細設計。
讓程式經理參與到架構實踐的工作,免去大量的「單純架構交流」的工作量,更讓程式人員有「成就感」。
開發架構設計的工作內容
一般完成:
1.將「邏輯職責」對映為「程式單元」:
要自主編寫的源程式
可重用的庫、框架
其他方式(如shell指令碼、平台支援下的配置檔案)
2.開發技術選型
開發語言
開發工具
3.「程式單元」間的關係
project劃分
project目錄結構
編譯依賴關係
重用測試是關鍵
解決年復一年修復類似問題的問題
從根本上降低維護成本
資料分布
資料分布的6種策略
1.獨立schema
當乙個大系統由相關的多個小系統組成,且不同小系統具有互不相同的資料庫schema定義,這種情況稱為「獨立schema」。
如果可以架構師應首選此種分布策略,以減少系統間無謂的互相影響,避免人為地將問題複雜化。
2.集中(centralized)
指乙個大系統必須支援來自不同地點的訪問,或者該系統由相關的多個小系統組成,而將持久集中化資料進行集中化的、統一格式的儲存。
特點:集中儲存、分布訪問
3.分割槽(partitioned)
分割槽方式包括水平分割槽和垂直分割槽。
當系統要為「地域分布廣泛的使用者」提供「相同的服務」時,常常採用水平分割槽。特點:兩個相同,兩個不同——相同的應用程式、不同的應用程式部署例項,相同的資料型別、不同的資料值。
一般垂直分割槽作用較小。特點:不同資料節點的schema會有「部分字段」的差異。
4.複製(replicated)
整個分布式系統中,資料儲存多個副本,並且以某種機制(實時或快照)保持多個資料副本之間的資料一致性。
特點:通過資料「本地化」,提公升了資料訪效能;資料的專門副本,有利於針對性地進行優化;資料的專門副本,提高可管理性,加強安全控制。
5.子集(subset)
「子集」是「複製」的特殊方式,就是某節點因功能或非功能考慮而儲存全體資料的乙個相對固定的子集。
子集相對複製特點(優點):減少了跨機器進行資料傳遞的開銷;降低了資料冗餘,節省了儲存成本。
6.重組(reorganized)
不同資料節點因要支援的功能不同,而以不同的schema儲存資料——但本質上這些資料是同源的。資料不是直接複製,而是以「重新組織」格式進行傳遞或者儲存。
資料分布策略大局觀
1.6種策略的二維圖比較
2.質量屬性方面的效果對比
資料分布策略的3條應用原則
1.把握系統特點,確定分布策略;
2.不同分布策略,可以綜合運用;
3.從「對嗎」、「好嗎」兩方面進行評估優化;
專案管理 發布階段,維護階段
如果有培訓,工程部人員出 培訓準備檢查表 它確保培訓所需的硬體 軟體 材料 人員都準備就緒,以免誤漏。例子見表9 型別 事項 實施者 是否到位硬體 web伺服器 姓名 是 否 不需要 外部硬體裝置 紫光筆 加密狗等等 姓名 是 否 不需要 講師筆記本 電腦 姓名 是 否 不需要 投影儀 姓名 是 否...
《effective Java》讀後筆記
為什麼區域性變數要宣告為 final 在jdk 1.8 之前,不用final修飾會編譯報錯。在jdk 1.8 中,不用final修飾不會報錯,但是一旦改變了變數的值就會報錯 區域性類如果乙個內部類需要在多個方法之外仍然是可見的,或者是它太長了,不適合於放在方法內部,就應該使用成員類。如果成員類的每個...
《無懈可擊》讀後篩選
1.a 通常ie5 win中字的現實結果總是要比其他瀏覽器整整大一號,為了讓所有瀏覽器相容,我們需要利用css hack。body voice family inherit font size small for compliant browsers html body只有ie5 win能識別出 v...