借用一篇文章http://tutorials.jenkov.com/software-architecture/index.html引入,下面是翻译转自:
软件架构和软件设计是一个话题的两个不同方面,它们都是关于如何构造软件来完成任务的,通常软件架构是指软件系统中较大的结构,而软件设计指较小的结构。
因为系统架构影响着软件设计,所以很难准确定义软件架构和软件设计的边界。较大结构的设计影响着较小结构的设计。为了使本教程更有意义(即包含哪些内容),我通过进程来做区分,软件设计考虑单个软件进程的内部设计,而软件架构考虑如何设计多个软件进程合作完成它们的任务。
我对软件架构的定义是如何适用于分布式系统,依我来看,软件架构提供了可以运行各种分布式算法的基本结构。虽然软件架构和分布式系统之间存在一定的重叠,但是各种不同的分布式算法都可以在相同的基础架构之上运行。
整个系统(软件+硬件)的硬件架构也影响着软件架构。你可能需要根据不同的硬件设计不同的软件架构。或者根据不同的软件架构选择不同的硬件。
常用软件架构
软件架构有很多种,有些比较常用,下面列举一些常用的软件架构模型:
- 单进程
- 客户端/服务器(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有时间时,再来处理这条消息。
同步和异步通信各有优点和用处。你可以使用异步通信来实现同步通信,也可以使用同步通信来实现异步通信。
同步和异步通信模式如下图所示: