软件架构
Software Architecture
软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件架构会包括软件组件、组件之间的关系,组件特性以及组件间关系的特性。软件架构可以和建筑物的架构相比拟。软件架构是构建计算机软件,开发系统以及计划进行的基础,可以列出开发团队需要完成的任务。
软件架构是在软件的基础架构上进行决策,一但决定后,再修改的代价很大。软件架构中的决策包括在软件设计时的一些特殊结构性选项,例如要控制太空船登陆艇的系统需要快速而且可靠,因此需要选择适合实时计算的语言,而且为了满足可靠度的需求,程序需要有数个冗余的复本,各复本运作在不同的硬件上,以便比对各程序的结果。
将软件架构文档化有助于和项目关系人之间的沟通,在高层设计时就可以提早进行决策,也可以在各项目之间复用设计组件
架构视图
软件架构的叙述常会整理成视图模型(view model),如同在建筑学中的不同种类的蓝图。每一种视图会着重一些系统的事务,依循其约定的观点(viewpoint),观点是指为了要以特定关系人(stakeholder)及其关注点的角度说明系统架构,因此针对标示、模型、分析技巧的说明方式的规范(ISO/IEC 42010)。观点不但指定框架的关注点,也指定说明的方式、使用的模型、使用的习惯,以及可以和其他视图维持一致性的规则。
以下是一些可能的视图:
- 功能/逻辑视图
- 代码视图
- 开发/结构视图
- 并行/过程/线程视图
- 物理/部署视图
- 用户动作/反馈视图
目前已开发了许多描述软件架构的语言,但是大家对于要用何种的符号集和视图系统,还没有达成共识。一些人相信UML将创建软件架构视图的标准。
Kruchten 的 4+1架构视图
架构模式
架构模式是针对在特定情境下软件架构上的常见问题,通用性,可复用的解决方案。 架构模式也像设计模式一样有对应的文件。
架构模式的概念类似传统的建筑,软件架构风格是有关架构的特定作法,有各自的特征。
架构模式定义:“由许多结构性组织模式形成成的系统家族:其中许多组件以及链接方式的字汇,也有一些彼此组合上的限制。
架构模式是在设计决策及制上上可复用的“包裹”,可以应用在一架构上,以产生想要的特性。
- 黑板
- 主从式架构(二层结构、三层结构、n-tier,云计算会有这类风格)
- 基于组件的软件工程
- 数据库中心
- 事件驱动(或隐式调用)
- 抽象化(或多层架构)
- 微服务
- 单层系统、单体式应用程序
- MVC(Model–view–controller)
- 点对点网络(P2P)
- 管道
- 插件
- 表现层状态转换(REST)
- 规则为基础的系统
- 面向服务的体系结构
- 无共享架构
- 空间为基础的架构
- 单层系统
C4 模型
C4 模型 是软件系统建模的图形表示技巧。C4模型会用到一些现有的建模技巧,例如统一建模语言(UML)及ER模型(ERD),会将系统结构化分解,分解为容器(container)和组件(component)。
C4模型是由软件架构师Simon Brown在2006年至2011年之间创建,以统一建模语言和4+1视景模型的基础上建立。
C4模型用以下的几个视角来叙述软件系统的架构,会说明系统分解为容器和组件的方式、各元素之间的关系,若是适用的话,也可以说明和使用者之间的关系。
C4模型会依其阶层关系来分类:
- 系统上下文图(Context diagrams),第一层的图,说明系统、和其使用者以及其他系统的关系。
- 容器图(Container diagrams),第二层的图,将系统分解为彼此相关的容器(container)。容器可以是应用程序或是资料存储。
- 组件图(Component diagrams),第三层的图,将容器分别为彼此相关的组件,也说明组件和其他组件(或是其他系统)的关系。
- 程式码图(Code diagrams),第四层的图,提供架构元素的设计细节,可以对应到程式码。在此层级的C4模型会用到目前已有的标示方式,例如统一建模语言、ER模型或是集成开发环境产生的示意图。
C4模型的第一层到第三层,用到五种基础的图示元素:人、软件系统、容器、组件和关系。此技术没有规定元素的布局、形状、颜色或是风格。C4模型建议以嵌套框为基础的简单图表,方便互动式的协作绘图。C4模型也鼓励良好的建模实务,例如在每一个图都加上标题以及图例,以及清楚的标示,以方便目标读者的理解。
在敏捷开发社群中,不太希望有制式化的文件方式,以及前期的架构设计,C4模型可以将架构可视化,因此在敏捷社群很受欢迎
C4-PlantUML
C4-PlantUML 结合了 PlantUML 和 C4 模型的优点,提供了一种描述和交流软件架构的简单方法。
IaaS
基础设施即服务(英语:Infrastructure as a Service,简称 IaaS)是提供消费者处理、储存、网络以及各种基础运算资源,以部署与执行操作系统或应用程序等各种软件。
IaaS 是云服务的最底层,主要提供一些基础资源。它与 PaaS 的区别是,用户需要自己控制底层,实现基础设施的使用逻辑。
客户端无须购买服务器、软件等网络设备,即可任意部署和运行处理、存储、网络和其它基本的计算资源,不能控管或控制底层的基础设施,但是可以控制操作系统、储存装置、已部署的应用程序,有时也可以有限度地控制特定的网络元件,像是主机端防火墙。下面这些都属于 IaaS。
- Amazon EC2
- Digital Ocean
- RackSpace Cloud
- OpenStack
PaaS
平台即服务(英语:platform as a service,缩写:PaaS)是一种云计算服务,提供运算平台与解决方案服务。在云计算的典型层级中,PaaS层介于软件即服务与基础设施即服务之间。
PaaS提供用户将云端基础设施部署与创建至客户端,或者借此获得使用编程语言、程序库与服务。用户不需要管理与控制云端基础设施(包含网络、服务器、操作系统或存储),但需要控制上层的应用程序部署与应用托管的环境。[1]
PaaS将软件研发的平台做为一种服务,以软件即服务(SaaS)模式交付给用户。因此,PaaS也是SaaS模式的一种应用。但是,PaaS的出现可以加快SaaS的发展,尤其是加快SaaS应用的开发速度。
PaaS 提供软件部署平台(runtime),抽象掉了硬件和操作系统细节,可以无缝地扩展(scaling)。开发者只需要关注自己的业务逻辑,不需要关注底层。下面这些都属于 PaaS。
- Heroku
- Google App Engine
- OpenShift
- AWS Elastic Beanstalk
SaaS
软件即服务(英语:Software as a Service,缩写:SaaS,发音:/sæs/或/sɑs/),亦可称为“按需即用软件”(即“一经要求,即可使用”),它是一种软件交付模式。在这种交付模式中,软件仅需通过网络,不须经过传统的安装步骤即可使用,软件及其相关的数据集中托管于云端服务。用户通常使用精简客户端,一般即经由网页浏览器来访问、访问软件即服务。SaaS 最大的特色在于软件本身并没有被下载到用户的硬盘,而是存储在提供商的云端或者服务器。相较于传统软件需要花钱购买和下载,软件即服务只需要用户租用软件,在线使用,不但大大减少了用户购买风险, 也无需下载软件本身,无设备要求的限制。
“软件即服务”(SaaS)的术语被认为是云计算的命名法的一部分,还有IaaS、PaaS、桌面即服务(DaaS)都被认为是云计算的学术名称
知名服务提供商
- iCloud
- Google Apps(Google Apps)
- Salesforce.com(Salesforce)
- Office 365(微软)
- Adobe Creative Cloud