- 實用軟件架構:從系統環境到軟件部署
- (印)蒂拉克·米特拉
- 3088字
- 2019-09-02 17:48:33
前言
軟件架構這個學科已經有半個世紀的歷史了。此概念于20世紀60年代引入,它的靈感來源于建筑物的架構,其中涉及在開始蓋樓之前擬定的一些藍圖,這些藍圖描述了建筑師對建筑物的結構所制定的設計方案與規格說明。建筑物的藍圖給出了建筑物在功能方面的設計方案,也就是樓層的空間布局示意圖,以及每個建筑工件(例如門、窗、房間、浴室、樓梯等)的尺寸。在使建筑物得以運作的那些方面,藍圖也提供了詳細的設計方案,例如承載建筑結構的地基、電線、水管和輸氣管道的設計,以及下水道系統等,要想使建筑物的功能全面運轉并發揮效用,這些方面都是不可缺少的。
信息技術(information technology,IT)中的軟件架構,其真正靈感來源于建筑架構學中的土木工程(civil engineering)這一學科。據此,我們可以把軟件架構大致分成功能架構(functional architecture)和操作架構(operational architecture)兩大類。軟件架構在20世紀70年代開始得到大規模實踐,到了20世紀90年代,它已經成為IT界的主流,此時各種架構模式也相繼涌現。這些模式會隨著工作中反復出現的一些用法而演化,所謂反復出現(recurrence),是指這些用法會一直重復地出現在日常應用中。我們之所以能從軟件架構中提煉出架構模式,是因為有一個先決條件已經得到了滿足。這個條件就是軟件架構已經得到了充分的實踐,從而成為業界的主流做法,并且已經作為一門正式的研究與實踐學科,得到了業界的認可。
IT系統的復雜度越來越高,因此各種IT項目都會頻繁而且廣泛地運用軟件架構技術。軟件架構的方式也隨著運用面的擴大而變得豐富起來,并且還涌現出了很多流派,它們采用不同的觀點來看待軟件的架構,并根據其在開發軟件系統時所取得的實際經驗來總結并推廣各自的觀點。軟件架構的流派和觀點變得越來越多,這使很多IT工作者都不知道應該采信哪個流派的觀點。大家不妨回想一下,看看自己有沒有對下面這些問題表示過困惑?
我讀過很多架構方面的書籍,也看過很多期刊和雜志,但是我究竟應該怎樣把這些互不相同的架構流派匯整起來呢?
這些流派中有哪些方面是我比較喜歡的?
這些方面是否可以互補?
如果我是一名架構師,面對著一個時間和預算都受限制的復雜軟件系統,那么應該從哪里開始實現它呢?
我是否能成為一名成功的軟件架構師?
筆者也曾陷入這樣的困惑中。軟件架構師所要面對的一項艱難挑戰,就是尋找一種最佳的方式,來確定系統或應用程序的架構,并對其進行設計。對軟件架構的要義進行把握,既是一種科學,又是一種藝術。我們要用適當的描述語言來定義系統的軟件架構,并對其加以分析和理解,從這個層面來看它是科學。同時,我們還要用清晰、明確并且簡潔的方式把這個架構描繪出來,以便與不同的利益相關者就系統的解決方案架構進行有效的溝通,從這個層面來看它又是藝術。軟件架構師怎樣才能抓住關鍵的架構工件(architecture artifact),從而清晰地描述出整個解決方案呢?這正是難點所在。過度的設計和過多的文檔,會拖慢項目的進度,并給項目的交付帶來風險,而對軟件架構所做的不恰當處理,則會使開發者無法領悟這套架構,這是個很關鍵的問題。如果開發者不能很好地理解軟件的架構,那么他們就無法恰當地遵循技術方面的規范和限制,也無法恰當地使用這套架構來設計并開發系統中的各個部件。在軟件開發的整個生命周期中,這個問題只會越來越嚴重。
2008年,筆者在IBM developerWorks網站上寫了一系列專門談論軟件架構的文章。在連續發布4部分之后,由于某些個人原因,沒有再往下寫。接下來的幾年,筆者看到了一些網友提出的問題,也收到了一些稱贊,然而除此之外,還有另一類信息促使我進行更多的思考。比如,下面這兩個問題:
“先生您好。我正在參考您的系列文章來撰寫碩士論文。請問下一部分的文章什么時候發布?”
“Mitra先生,我們采用您所說的框架做了IT項目,但是項目暫停了,因為您的下一篇文章還沒出來。求助。”
某一天早晨,我忽然感覺讀者確實需要一本架構方面的書籍,它必須寫得簡單、明確、易于理解、便于描述,而且最為重要的是,它必須足夠實用,能夠執行。這本實用的書籍要能夠給IT工作者和軟件工程專業的學生帶來較大的幫助,使他們明白怎樣對軟件系統進行架構。過了一段時間之后,我終于決定開始寫書了。本書代表著軟件架構領域中的集體智慧、經驗、學問和知識,這些內容是筆者根據自己從業18年來的經歷收集而成的。本書面對的讀者有很多,其中包括:
軟件架構師。書中會給出一些實用而且可以反復運用的指導原則,以幫助軟件架構師來研發軟件的架構。
項目經理。本書將會幫助讀者理解并領會系統架構中的關鍵元素,它們是良好的架構所必備的元素,本書還會解釋怎樣才能在進行項目規劃時把架構活動控制得恰到好處。
高校學生。本書將會幫助大家理解怎樣把軟件架構中的理論轉述成實際的問題,并對其加以實現。無論技術如何發展,本書都可以當作長期的參考資料。
教師。通過本書,教師可以幫助學生把軟件架構中的各種理論與實際工作聯系起來,使學生變成能夠應對實際項目的軟件架構師。
首席管理者(C-level executive)
或高層管理人員。本書將會幫助他們意識到研發良好的系統架構所必備的要素,對于IT界的任何一種創新活動來說,這種意識都會給公司帶來間接的好處,使他們可以更好地領悟IT架構在整個公司中的基礎地位。
筆者想把這本書寫成一本實用的教程,使讀者可以按照里面所說的方法,通過多個階段的演進來迭代式地構建出軟件的架構。書中會指出各種架構工件的運用方式,使大家可以把這些清晰、簡明、精準而且易懂的工件,恰到好處地運用在實際的應用場景中。在整本書中,筆者會以較為隨意的方式來使用“軟件”(software)“系統”(system)和“解決方案”(solution)這三個詞,由于它們在本書中指的都是架構(architecture),因此這三者之間是可以互換的。筆者之所以要采用這種不拘于字面意思的交替指稱方式,是為了使大家明白:在IT界,這三個詞之間的界限其實是相當模糊的。
從哲學角度來看,東方哲學和西方哲學之間的區別,在于它們對直覺和理性這兩種感知形式的接受程度有所不同,前者更強調直覺,而后者更強調理性。西方世界普遍相信,并且主要依賴于理性的、科學的和演繹式的推理。而東方世界則更加看重憑直覺所獲取的知識,他們認為,更高形式的意識(在這里指的是知識)是通過觀察(也包括反思自己的內心世界)得來的,而不是僅僅通過實驗式的歸納得來的。筆者生長于印度加爾各答一個文化較為多元的孟加拉家庭中,十分認同東方式的信仰和知識觀念,我認為自覺的意識最終需要通過自覺的自由意志來獲得,知識的奧義也要通過直覺和歸納式的推理來領悟。后來,筆者在西方世界生活了將近20年,在這段時間里,我開始看重科學和理性的知識形式。我認為,一個普通人要想在這個殘酷競爭的世界中生存,就必須掌握由理性與科學手段所得到的知識,對于科學、技術和IT領域來說更是如此。等到自己的工作穩定下來之后,可以去深入探索直覺感知力和歸納式推理,這種探索雖然未必會帶來回報,但或許會幫助我們從人生的存在中求得解脫。
在這本書中,筆者試著用一種解說的辦法,通過歸納式的理性推理來幫助讀者掌握實用的軟件架構方式。等到掌握了這種理性的知識之后,讀者可以把注意力放在歸納式的推理上,以探求更為玄妙的直覺知識。如果把解決最困難的架構問題比喻成尋求圣杯(Holy Grail),那么用直覺來感知軟件的架構就相當于層次更高的開悟了,這種境界,我想應該是大家夢寐以求的吧。
等到看完本書并掌握了它的要義之后,希望你能煥然一新,變成一位務實的軟件架構師。軟件架構是個有趣的學科,其中的理性知識,我想讀完這本書之后,大家應該就可以了解到。而憑直覺才能獲得的那一部分知識,則需要以理性知識為基礎,繼續去探索。在這一方面,連筆者也只是剛剛入門而已。
另外再說一句,每章開頭的那些格言,其實都是筆者自己編的。
- Oracle Exadata性能優化
- 零起步玩轉掌控板與Mind+
- Scratch真好玩:教小孩學編程
- QGIS By Example
- Getting Started with Laravel 4
- OpenResty完全開發指南:構建百萬級別并發的Web應用
- 精通MySQL 8(視頻教學版)
- Arduino機器人系統設計及開發
- Visual Basic程序設計實驗指導及考試指南
- Instant GLEW
- FusionCharts Beginner’s Guide:The Official Guide for FusionCharts Suite
- 網絡綜合布線與組網實戰指南
- Python人工智能項目實戰
- JavaScript程序設計實例教程(第2版)
- 計算機視覺實戰:基于TensorFlow 2