[isTMS]課程 - 團隊開發與架構設計實戰
 
軟體開發的架構與設計模式
軟體架構師
常用的設計模式 - DI
常用的設計模式 - AOP
關於測試與可測試性
實踐系統的可擴展性
系統的身分驗證與安全性
關於微服務
雲端架構
架構的推動與框架的使用
dotnet 的專案與項目範本
開發者體驗(DX)
補充資料 與 參考

什麼是軟體開發架構?

軟體開發主要在做一件事情:

"將想法化為實際可執行的資訊系統"

而軟體開發,實際上的行為是: 將有系統的流程,最大幅度的自動化

從傳統的角度來看,過去軟體開發這件事情被常常拆分成幾個部分:
A> 決定要做什麼? (釐清需求)
B> 決定要怎麼做? (系統設計)
C> 開始進行 (開發與執行)
D> 測試
E> 上線運行
F> 維運

過去在『系統設計』階段,我們會在蒐集好所有需求的狀況下,著手進行系統架構的設計,以便於能夠在需求、預算、功能間找到平衡。

一般來說,設計人員會需要考慮底下幾個不同的需求競爭: 圖片

也因此,系統設計人員會針對種種要求和期待(有來自於...系統面、商業需求、使用者...),試圖尋找最有利的方式來進行開發前的規劃。

而上述提到的規劃,具體而言,是設計人員在從底下幾個系統的特性之間做權衡與折衝,諸如: 高可用性(high availability)、可維護性 (Maintainability)、易用性 (Usability)、可延展性 (Scalability)、可測試性 (Testability)、重用性 (Reusability)、可擴展性 (Extensibility)、相依性 (Dependency)、安全性 (Security)、效能 (Performance)。

而具體的設計手法,一言以蔽之,則是: 『拆分』。

例如,底下是一個古典的架構設計樣式:

圖片

這個設計把單體的資訊系統,分成展示層、服務層、商業邏輯層、資料層。

#sample code Demo-BmiNTier
git clone https://github.com/isdaviddong/Demo-BmiNTier.git

但上述做法因為技術變遷,最近幾年被新技術(例如容器化)與新的開發方法論(例如敏捷、迭代式開發)大幅度的影響,後面我們來談談這些影響。

討論與思考:

  • 為何拆分系統,有助於實現各種軟體特性?(ability)
  • 拆分系統,會帶來哪些副作用?

近代技術變遷對架構設計的影響

近代軟體開發中,以下幾個技術或開發方法的改變對架構設計帶來了影響:

  1. 微服務架構 微服務架構是一種將應用程式切分成多個小型服務的架構,每個服務都運行在自己的行程中,使用輕量級通訊機制進行溝通。這種架構的出現使得系統的設計和架構更加模塊化和可擴展,不同的服務可以獨立地開發、部署和維護,並且可以更容易地進行水平擴展。
  2. 容器化技術 容器化技術是一種將應用程式打包成為可移植和可部署的容器的技術。這些容器可以在不同的環境中運行,例如本地開發環境、測試環境和生產環境。容器化技術的出現使得系統的設計和架構更加靈活和可移植,可以更快地進行部署和升級,也可以更好地進行資源隔離和安全性控制。
  3. DevOps、敏捷開發、與持續交付 DevOps和持續交付是一種整合軟體開發和運營的方法論,旨在實現軟體交付的自動化和高效化。透過DevOps和持續交付的實踐,軟體開發和運營團隊可以更好地合作和協調,可以更快地發布新功能和修復錯誤。這種方法論的出現對系統的設計和架構帶來了新的挑戰和要求,需要更好地支持自動化、可擴展性和容錯性。
  4. 雲端運算和服務化 雲端運算和服務化是一種基於網路的資訊技術,通過將應用程式和資源移動到雲端,實現資源共享和彈性調配。這種技術的出現使得系統設計和架構更加彈性和可擴展,可以更快地進行部署和升級,並且可以更好地進行資源

敏捷開發

圖片

敏捷開發是一種軟體開發方法論,其強調迭代和增量式的開發過程,通過快速反饋和迭代來提高開發速度和產品質量。敏捷開發方法論的實踐對系統設計和架構設計產生了以下幾個方面的影響:

  1. 強調簡潔的設計
    在敏捷開發方法論中,軟體設計應該保持簡潔,不應該過度設計,因為過度設計會增加軟體開發的成本和時間。敏捷開發強調儘可能減少不必要的複雜度,使設計更加簡單易懂,並且更容易進行重構。
  2. 鼓勵可測試性和可重構性
    敏捷開發強調可測試性可重構性,這有助於提高代碼的質量和可維護性。透過可測試性和可重構性的實踐,可以在減少錯誤的同時提高代碼的品質和可讀性。
  3. 強調交互式和增量式的開發過程
    敏捷開發強調交互式和增量式的開發過程,這使得系統設計和架構設計的實踐更加靈活和靈敏。系統和架構設計可以根據實際需求進行調整,並且可以在開發過程中不斷進行改進和優化。
  4. 鼓勵團隊合作和交流
    敏捷開發強調團隊合作和直接交流(而非傳統透過文件的間接溝通),這有助於提高系統設計和架構設計的質量和效率。團隊成員之間的密切合作和交流可以確保需求和目標的準確理解和共享,並且可以提供更多的想法和解決方案。

容器化與微服務

容器化和微服務是當前熱門的技術趨勢,容器化技術可以將應用程式打包成可移植和可部署的Container,這些Container可以在不同的環境中運行,對傳統架構設計帶來了許多影響。

容器化技術對架構設計的影響主要體現在底下幾個部分:

  1. 資源隔離:容器化技術可以為每個應用程式提供獨立的運行環境,從而實現資源的隔離和保護,避免不同應用程式之間的相互影響。
  2. 可移植性:容器化技術可以將應用程式打包成可移植的容器,這些容器可以在不同的環境中運行,從而實現應用程式的可移植性,並減少應用程式在不同環境中運行的差異性。
  3. 快速部署:容器化技術可以快速地部署和啟動應用程式,從而提高系統的可用性和效率。容器化還可以實現自動化部署和管理,從而減少了手動部署和管理的工作量和錯誤率。
微服務對傳統架構設計的影響

微服務是一種將應用程式切分成多個小型服務的架構,每個服務都運行在自己的進程中,使用輕量級通訊機制進行溝通。微服務對傳統架構設計的影響主要體現在以下方面:

  1. 可擴展性:微服務架構可以將應用程式切分成多個小型服務,每個服務都可以獨立地開發、部署和擴展,從而實現應用程式的可擴展性和高可用性。
  2. 可維護性:微服務架構可以將應用程式切分成多個小型服務,每個服務都可以獨立地進行開發、測試和部署,從而實現應用程式的可維護性和可靠性。當一個服務發生故障時,只需要關注這個服務的修復,而不需要停止整個應用程式。
  3. 彈性伸縮:微服務架構可以根據實際需求動態地伸縮服務的數量,從而實現應用程式的彈性伸縮和資源的最優分配。
  4. 系統複雜度:微服務架構的實現需要將應用程式切分成多個小型服務,因此需要更複雜的系統架構和管理工具,從而增加了系統的複雜度和管理難度。

總體而言,容器化和微服務技術的出現和普及對傳統架構設計帶來了新的思路和挑戰,需要設計師和開發人員進一步學習和適應這些新技術,從而提高系統和架構的質量和效能。同時,設計師和開發人員需要結合實際需求和場景,選擇適合的技術和架構,並運用適當的設計原則和最佳實踐來實現系統和架構的優化和改進。

雲端技術

雲端技術對傳統架構設計產生了深遠的影響。雲端計算提供了基礎設施、平台和軟件即服務(IaaS、PaaS和SaaS),使企業能夠更靈活地構建和運行應用程序。以下是雲端技術對傳統架構設計的主要影響:

  1. 彈性和擴展性:雲端技術允許企業根據需求靈活地調整資源,從而提高了系統的彈性和擴展性。在傳統架構中,企業需要提前預估資源需求並投資相應的硬件和軟件。而在雲端環境中,企業可以按需分配和回收資源,降低了運營成本。
  2. 成本效益:雲端技術通常使用按使用量付費的模式,這意味著企業只需為所需的資源付費,減少了過度配置和閒置資源的浪費。此外,雲端提供商會負責基礎設施的維護和管理,進一步降低了企業的成本負擔。
  3. 運營簡化:雲端技術使得企業不再需要在本地部署和維護硬件基礎設施。這降低了運營的複雜性,使開發團隊能夠更加專注於應用程序的開發和優化。
  4. 高可用性和容錯能力:雲端提供商通常會在多個地理位置部署數據中心,以確保應用程序的高可用性。此外,雲端平台還提供了自動故障切換和數據備份功能,提高了系統的容錯能力。
  5. 數據安全和合規性:雖然雲端技術可能帶來數據安全方面的顧慮,但許多雲端提供商都提供了強大的安全措施,如加密、網絡隔離和身份訪問管理。此外,雲端提供商還會遵循國際標準和地區法規,幫助企業達到合規性要求。
  6. 開發和部署速度:雲端技術提供了豐富的開發工具和平台即服務(PaaS)環境,使開發團隊能夠更快速地構建和部署應用程序。此外,自動化部署和持續集成/持續交付(CI/CD)流程在雲端環境中更容易實現,有助於提高開發效率和縮短上市時間。
  7. 全球化和分佈式架構:雲端技術使企業能夠更容易地構建全球化應用程序,通過在不同地區部署資源,滿足各地用戶的需求。這有助於提高應用程序的性能和用戶體驗。
  8. 微服務和無服務架構:雲端技術鼓勵使用微服務和無服務架構來構建應用程序。這些架構模式使應用程序更加模組化和可擴展,並有助於提高開發效率和系統可靠性。
  9. 多雲和混合雲策略:企業可以選擇在多個雲端提供商之間分散風險,或者將部分資源保留在私有雲和本地數據中心中。這種多雲和混合雲策略有助於實現更好的業務連續性和數據安全性。
  10. 組件選型:過去架構設計時,常常需要從無到有建立應用程式所需要的不同組件,例如Cache、Queue、Storage...,但雲端技術的出現,透過PaaS可由雲端服務供應商,快速地提供可用的服務,減少傳統架構設計上的技術限制。

雲端技術推動企業向更靈活、可擴展和高效的架構轉變。這些變化使得企業能夠更快地應對市場變化,降低運營成本,並提高競爭力。