《軟件架構》總覽

原文鏈接 譯者:xiaohua 校對:方騰飛

注意:本教程仍在更新,它將被一點點完善,但是現在你仍可以從中學到一些東西。

軟件架構和軟件設計是一個話題的兩個不同方面,它們都是關於如何構造軟件來完成任務的,通常軟件架構是指軟件系統中較大的結構,而軟件設計指較小的結構。

因爲系統架構影響着軟件設計,所以很難準確定義軟件架構和軟件設計的邊界。較大結構的設計影響着較小結構的設計。爲了使本教程更有意義(即包含哪些內容),我通過進程來做區分,軟件設計考慮單個軟件進程的內部設計,而軟件架構考慮如何設計多個軟件進程合作完成它們的任務。

圖1

我對軟件架構的定義是如何適用於分佈式系統,依我來看,軟件架構提供了可以運行各種分佈式算法的基本結構。雖然軟件架構和分佈式系統之間存在一定的重疊,但是各種不同的分佈式算法都可以在相同的基礎架構之上運行。

整個系統(軟件+硬件)的硬件架構也影響着軟件架構。你可能需要根據不同的硬件設計不同的軟件架構。或者根據不同的軟件架構選擇不同的硬件。

常用軟件架構

軟件架構有很多種,有些比較常用,下面列舉一些常用的軟件架構模型:

  • 單進程
  • 客戶端/服務器(2個進程交互)
  • 3層系統(3個進程串行交互)
  • N層系統(N個進程串行交互)
  • 面向服務的系統(大量進程交互)
  • 混合架構(上面這些架構的組合)
  • 對等架構(有中央服務器的情況下,大量進程交互)

下面是這些架構的簡單說明。

圖2

進程通訊渠道

進程通常有三種通信媒體。他們是:

  • 網絡
  • 磁盤
  • 管道

進程間可以通過電腦網絡進行通信。通過網絡,只要運行着進程的兩臺電腦通過網絡連接,那麼一個進程可以和運行在同一臺電腦上的進程通信,也可以和運行在不同電腦上的進程通信。

運行在同一臺電腦上的進程也可以通過電腦硬盤進行通信(或其他磁盤,例如USB磁盤等。)進程A可以將由進程B處理的文件寫入磁盤。進程B也可以發送一個磁盤中的文件作爲回覆,之後線程A讀取該答覆。

進程也可以通過網絡存儲進行通信,網絡存儲本質上是連接到計算機網絡的硬盤。這樣,進程也可以通過網絡和磁盤通信的組合與運行在不同計算機上的進程進行通信。

依靠運行着進程的操作系統,運行在相同機器上的進程可以通過管道通信。管道是操作系統爲進程提供的通信渠道。通過管道的通信就像網絡通信一樣,但是交換的消息保留在計算機內部的RAM中。管道比網絡通信更快,因爲當通信進程在同一臺計算機上運行時,可以避免許多網絡協議開銷。

進程也可以通過RAM磁盤進行通信,RAM磁盤是分配在計算機RAM中的虛擬硬盤。對於進程來說,RAM磁盤就像磁盤一樣,但它比磁盤快得多,因爲數據僅存儲在RAM中。

進程通信模式

進程通信有兩種模式:

  • 同步模式
  • 異步模式

當進程A與進程B同步通信時,表示進程A向進程B發送消息並等待B答覆。進程A在收到進程B的答覆之前不會做任何事情。

當兩個進程異步通信時,這兩個進程相互發送消息,而無需等待答覆。進程A可以給進程B發送一條消息後繼續去做其他工作。在某個時候,進程B回覆進程A一條消息,當進程A有時間時,再來處理這條消息。

同步和異步通信各有優點和用處。你可以使用異步通信來實現同步通信,也可以使用同步通信來實現異步通信。

同步和異步通信模式如下圖所示:

圖3

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

FavoriteLoading添加本文到我的收藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章