關于架構設計的目的,存在一些常見的誤解。首先,僅僅因為架構很重要,并不意味著必須進行架構設計。重要的是理解架構為何重要。例如,有人可能認為沒有架構設計,系統就無法運行,但這并非事實。
在許多創業公司,初期產品往往沒有經過正規的架構設計,只是通過簡單討論后直接開始編碼,這種方式有時候反而能加快產品開發并保持良好運行。
另外,架構設計并不總是提升開發效率。有時,簡單的設計反而更高效,因為架構設計需要投入時間和人力,而這些資源如果用于早期編碼,可能會使項目進展更快。此外,雖然良好的架構設計有助于業務發展,比如高性能的架構能提升用戶體驗,但僅僅模仿成功案例(如微信)的架構,并不能保證達到同樣的業務規模。架構設計是重要的,但理解其作用和限制同樣關鍵。
在討論架構設計時,常見的一個誤區是認為每個系統都需要進行架構設計,僅因為這是常規做法。許多人認為因為大家都在做架構設計,所以這一定是正確的,但他們并沒有深入理解為什么需要架構設計。這種思維方式可能導致架構師或設計師盲目模仿其他公司的架構,僅做微小的調整而不是針對特定需求設計。這樣的方法可能導致引入的架構與公司的實際情況不符,最終導致不斷的重構甚至從頭再來。
另一個類似的問題是,有些公司認為因為有專門的架構師,或者流程規定必須進行架構設計,所以就必須做架構設計。這種做法忽視了架構設計的真正目的,可能導致在不需要架構設計的情況下也進行設計,從而浪費資源和拖慢開發進度。
有些人認為架構設計是為了實現高性能、高可用性和高可擴展性,這看似是一個成熟的觀點,但如果不考慮具體的系統和業務需求,僅僅追求這些“高XX”的目標,可能會導致架構設計過于復雜,使項目難以落地。這種方法可能會導致團隊內部沖突,項目不穩定,維護困難,以及增加功能變得異常復雜。
總的來說,架構設計的關鍵是要理解其目的和適用場景,而不是盲目遵循流程或追求某些抽象的高級目標。正確的方法是基于具體的業務需求和系統特點來制定架構設計。
架構設計的真正目的
答案:架構設計的主要目的是為了解決軟件系統復雜度帶來的問題。
簡單的復雜度分析案例
我們通過分析一個大學學生管理系統的架構設計來理解架構設計的真正目的:解決軟件系統復雜度帶來的問題。首先,我們確定系統功能包括登錄、注冊、成績管理和課程管理等。
-
性能分析:考慮到學校學生數量(1萬至2萬)和相對低的訪問頻率(每天平均每學生不到一次訪問),性能需求并不高。因此,使用MySQL作為存儲方案是足夠的,甚至可以不考慮緩存。對于Web服務器,選擇Nginx已經足夠應對需求。
-
可擴展性考慮:由于學生管理系統的功能較為固定,擴展的需求并不大,所以可擴展性方面的復雜度較低。
-
高可用性需求:雖然系統短時間宕機(如2小時)對學生管理影響不大,但數據的完整性和可靠性至關重要。因此,考慮到數據丟失的風險和后果,需要重點關注存儲的高可靠性。這包括設計MySQL的主備方案以應對機器故障,以及跨機房同步方案以防機房故障。
-
安全性考慮:鑒于存儲的信息具有一定隱私性,安全措施需要包括Nginx的ACL控制、用戶賬號密碼管理和數據庫訪問權限控制,以確保數據安全。
-
成本考慮:由于系統架構相對簡單,幾臺服務器就能滿足需求,對于大學來說這是可接受的,因此成本并不是主要考慮因素。
總結:
架構是為了應對軟件系統復雜度而提出的一個解決方案。
個人感悟是:架構即(重要)決策,是在一個有約束的盒子里去求解或接近最合適的解。這個有約束的盒子是團隊經驗、成本、資源、進度、業務所處階段等所編織、摻雜在一起的綜合體(人,財,物,時間,事情等)。
架構無優劣,但是存在恰當的架構用在合適的軟件系統中,而這些就是決策的結果。需求驅動架構。在分析設計階段,需要考慮一定的人力與時間去"跳出代碼,總攬全局",為業務和IT技術之間搭建一座"橋梁"。
架構設計處于軟件研制的前期,一方面,越是前期,如有問題,就能夠越早發現,修改的代價也就越低;另外一方面,也意味著,軟件實施后期若有架構上的修改,也需要付出更多的代價。
1 架構是為了應對軟件系統復雜度而提出的一個解決方案。
2 架構即(重要)決策
3 需求驅動架構,架起分析與設計實現的橋梁
4 架構與開發成本的關系