- 高可用可伸縮微服務架構:基于Dubbo、Spring Cloud和Service Mesh
- 程超 梁桂釗 秦金衛 方志斌 張逸等
- 1897字
- 2019-07-26 18:50:56
1.1 什么是架構
計算機科學和程序設計的飛速發展,使得軟件設計應用在從航空航天到日常生活的方方面面。個人開發一段小程序的做法早就過時,大范圍協作的工程化時代隨即到來。隨著大范圍協作帶來的效率問題和軟件復雜度的爆炸式增長,管理和技術方面的各種不確定性也爆發性增加,導致軟件開發的質量無法得到有效保證,開發周期和成本無法得到有效控制。人們一直在尋求這些問題的解決方法。然而Fred Brooks在1975年出版的軟件工程圣經《人月神話》中寫道,沒有(能解決所有問題的)銀彈(There is no silver bullet)。自此,人們發展了項目研發過程管理來控制管理活動的不確定性,同時發展了軟件架構設計方法來控制技術方面的不確定性,進而在實踐中不斷地總結和改進,用于有效指導軟件的開發過程,最大程度地保障軟件的質量、開發周期和成本。
自軟件工程產生以來,架構設計和過程管理一直是軟件領域DNA的雙螺旋。前者從科學技術領域出發來解決軟件創造中的工程技術問題,后者從人類的管理活動出發發展了軟件工程的組織管理方式。兩者都是為了解決大規模軟件開發過程中的各種問題而出現的。
架構的定義
架構(Architecture)一詞源于建筑領域,其本身就是建筑的意思,也有體系結構的意思。維基百科英文版里對Architecture的解釋是:規劃、設計和建造建筑物的過程及產物。鑒于軟件工程與建筑工程一樣是一項系統的工程性工作,在引入計算機領域后,軟件架構就成為描述軟件規劃設計技術的專有名詞。特別地,軟件架構師一詞在英文里和建筑師也是同一個詞(Architect)。
1972年圖靈獎獲得者、荷蘭計算機科學家Edsger Wybe Dijkstra(就是大名鼎鼎的Dijkstra最短路徑算法的發明者)早在二十世紀六十年代就已經涉及軟件架構這個概念了。到了二十世紀九十年代,Rational Software Corporation和Microsoft、卡內基梅隆大學和加州大學埃爾文分校在這個領域做了很多研究和實踐,提出了軟件架構中的很多概念。
維基百科里對軟件架構的定義:
軟件架構是有關軟件整體結構與組件的抽象描述,用于指導大型軟件系統各個方面的設計。軟件架構師定義和設計軟件的模塊化、模塊之間的交互、用戶界面風格、對外接口方法、創新的設計特性,以及高層事物的對象操作、邏輯和流程。軟件架構是一個系統的草圖。軟件架構描述的對象是直接構成系統的抽象組件。各個組件之間的連接則明確和相對細致地描述組件之間的通信。在實現階段,這些抽象組件被細化為實際的組件,比如具體某個類或對象。在面向對象領域中,組件之間的連接通常用接口來實現。
Kruchten認為:
架構是對軟件系統組織、結構部分和系統包含接口的選擇,滿足功能和性能需求的一系列架構元素的集合。軟件架構設計與軟件高層次結構的實現能夠抽象、分解、組合等。
Bass等人認為:
系統或計算系統的軟件架構是包含軟件部分、外部可見特性部分,以及它們之間關系的系統結構。
McGovern則認為:
軟件架構或系統由組成系統的結構的相互作用和軟件結構的重要設計決定組成。設計決定應成功實現所期望支持的質量。設計決定為系統開發、支持和維護提供概念上的基礎。
比較公認的軟件架構定義是在2000年的ANSI/IEEE 1471標準《軟件增強系統的體系結構描述推薦實施規程(Recommended Practice for Architectural Description for Software-Intensive Systems Description)》、2011年的ISO/IEC/IEEE 42010標準《系統和軟件工程——架構描述(Systems and software engineering — Architecture description)》中定義的。
(1)架構過程:在系統整個生命周期中構思、定義、表達、記錄、交流,驗證合適實現,維護和改進架構的過程,也就是設計過程。
(2)架構:一個系統體現在其環境中的元素、關系的基本概念或屬性,以及其設計和進化原則。
(3)架構描述:表達一個架構的工作產出物(通常指的是各種架構圖和設計文檔)。
(4)架構視圖:通過系統的某些關注點的視角,表達一個系統的工作產出物(例如部署視圖、開發視圖等)。
(5)系統:包含一個或多個進程,硬件、軟件、工具與可以滿足需求的人的集合。
(6)環境:決定開發、操作、策略和其他影響系統的設置和條件。
在UML中,架構被認為是系統的組織結構和相關行為。一個系統的架構可看作通過接口互聯部分的關系,以及它們之間的相互作用。通過接口相互作用的部分包括類、組件和子系統。這樣就可以通過UML的各種架構圖來描述這些對象和關系,從而清楚表達一個系統的架構。
總結:軟件架構是一個用于指導系統實現的草圖。這個草圖越詳細,對系統實現的指導意義就越重要,且貫穿于軟件的整個生命周期。在建筑領域,大樓尚未建造前,就已經存在于建筑師的腦海里。同樣地,開始編寫第一行代碼之前,系統就已經存在于軟件架構師的心里。那么怎樣把架構草圖表達出來呢?我們一般都是采用架構圖和設計文檔的形式。如果我們進一步追問,使用哪些方面的架構圖和設計文檔就能把架構草圖表達清楚呢?草圖里包含哪些具體的要素和對象呢?圍繞著不同的具體操作手段,就產生了不同的架構方法論,本章后續的內容會逐步介紹。
- Java程序設計(慕課版)
- Web交互界面設計與制作(微課版)
- Flask Web開發入門、進階與實戰
- Banana Pi Cookbook
- SQL基礎教程(視頻教學版)
- SAP BusinessObjects Dashboards 4.1 Cookbook
- 青少年Python編程入門
- D3.js 4.x Data Visualization(Third Edition)
- Illustrator CS6設計與應用任務教程
- Flink技術內幕:架構設計與實現原理
- Java EE架構設計與開發實踐
- Xamarin Cross-Platform Development Cookbook
- Java高級程序設計
- Getting Started with JUCE
- Java EE程序設計與開發實踐教程