注意:本教程仍在更新,它將被一點點完善,可是如今你仍能夠從中學到一些東西。java
軟件架構和軟件設計是一個話題的兩個不一樣方面,它們都是關於如何構造軟件來完成任務的,一般軟件架構是指軟件系統中較大的結構,而軟件設計指較小的結構。算法
由於系統架構影響着軟件設計,因此很難準肯定義軟件架構和軟件設計的邊界。較大結構的設計影響着較小結構的設計。爲了使本教程更有意義(即包含哪些內容),我經過進程來作區分,軟件設計考慮單個軟件進程的內部設計,而軟件架構考慮如何設計多個軟件進程合做完成它們的任務。sql

我對軟件架構的定義是如何適用於分佈式系統,依我來看,軟件架構提供了能夠運行各類分佈式算法的基本結構。雖然軟件架構和分佈式系統之間存在必定的重疊,可是各類不一樣的分佈式算法均可以在相同的基礎架構之上運行。編程
整個系統(軟件+硬件)的硬件架構也影響着軟件架構。你可能須要根據不一樣的硬件設計不一樣的軟件架構。或者根據不一樣的軟件架構選擇不一樣的硬件。服務器
經常使用軟件架構網絡
軟件架構有不少種,有些比較經常使用,下面列舉一些經常使用的軟件架構模型: 架構
- 單進程
- 客戶端/服務器(2個進程交互)
- 3層系統(3個進程串行交互)
- N層系統(N個進程串行交互)
- 面向服務的系統(大量進程交互)
- 混合架構(上面這些架構的組合)
- 對等架構(有中央服務器的狀況下,大量進程交互)
下面是這些架構的簡單說明。併發

進程通信渠道異步
進程一般有三種通訊媒體。他們是:
- 網絡
- 磁盤
- 管道
進程間能夠經過電腦網絡進行通訊。經過網絡,只要運行着進程的兩臺電腦經過網絡鏈接,那麼一個進程能夠和運行在同一臺電腦上的進程通訊,也能夠和運行在不一樣電腦上的進程通訊。
運行在同一臺電腦上的進程也能夠經過電腦硬盤進行通訊(或其餘磁盤,例如USB磁盤等。)進程A能夠將由進程B處理的文件寫入磁盤。進程B也能夠發送一個磁盤中的文件做爲回覆,以後線程A讀取該答覆。
進程也能夠經過網絡存儲進行通訊,網絡存儲本質上是鏈接到計算機網絡的硬盤。這樣,進程也能夠經過網絡和磁盤通訊的組合與運行在不一樣計算機上的進程進行通訊。
依靠運行着進程的操做系統,運行在相同機器上的進程能夠經過管道通訊。管道是操做系統爲進程提供的通訊渠道。經過管道的通訊就像網絡通訊同樣,可是交換的消息保留在計算機內部的RAM中。管道比網絡通訊更快,由於當通訊進程在同一臺計算機上運行時,能夠避免許多網絡協議開銷。
進程也能夠經過RAM磁盤進行通訊,RAM磁盤是分配在計算機RAM中的虛擬硬盤。對於進程來講,RAM磁盤就像磁盤同樣,但它比磁盤快得多,由於數據僅存儲在RAM中。
進程通訊模式
進程通訊有兩種模式:
- 同步模式
- 異步模式
當進程A與進程B同步通訊時,表示進程A向進程B發送消息並等待B答覆。進程A在收到進程B的答覆以前不會作任何事情。
當兩個進程異步通訊時,這兩個進程相互發送消息,而無需等待答覆。進程A能夠給進程B發送一條消息後繼續去作其餘工做。在某個時候,進程B回覆進程A一條消息,當進程A有時間時,再來處理這條消息。
同步和異步通訊各有優勢和用處。你可使用異步通訊來實現同步通訊,也可使用同步通訊來實現異步通訊。
同步和異步通訊模式以下圖所示:

原創文章,轉載請註明: 轉載自併發編程網 – ifeve.com本文連接地址: 《軟件架構》總覽

