软件架构的概念
架构的本质
1、软件架构为软件系统提供了一个结构、行为和属性的高级抽象
2、软件架构风格是特定应用领域的惯用模式,架构定义一个词汇表和一组约束
架构的作用
1、软件架构是项目干系人进行交流的手段
2、软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量
3、软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础
架构4+1视图和UML4+1视图
五大架构风格
数据流风格
批处理、管道-过滤器
调用/返回风格
主程序/子程序、面向对象、层次结构
独立构件风格
进程通信、事件驱动系统
虚拟机风格
解释器、规则系统
仓库风格
数据库系统、黑板系统、超文本系统
基于服务的架构(SOA)
SOA层次和特点
服务是标准化程度更高的构件
REST(表述性状态转移)
五个原则:
- 网络上的所有事物都被抽象为资源
- 每个资源对应一个唯一资源标识
- 通过通用的连接件接口对资源进行操作
- 对资源的各种操作不会改变资源标识
- 所有的操作都是无状态的
SOA的实现方式-服务注册表
- 服务注册:应用开发者(服务提供者)向著车标公布服务的功能
- 服务位置:服务使用者(服务应用开发者),帮助他们查询注册服务,寻找符合自身要求的服务
- 服务绑定:服务使用者利用检索到的服务接口来编写代码,所编写的代码将与注册的服务绑定、调用注册的服务,以及与他们实现互动
微服务和SOA对比
ADL
ADL三个基本元素
- 构件:计算或数据存储单元
- 连接件:用于构件之间交互建模的体系结构构造块,及其支配这些交互的规则
- 架构配置:描述体系结构的构件与连接件的连接图
基于架构的软件设计(ABSD)
ABSD很好的支持软件重用
ABSD方法是架构驱动,强调由业务、质量和功能需求的组合架构设计
开发过程
架构文档化主要输出结果架构规格说明和测试架构需求的质量设计说明书这两个文档
关于文档三大注意事项
- 从使用者角度编写
- 分发给所有开发人员
- 必须保证开发者手中是最新的
架构设计重点关注点
- 性能:需要多久能对时间相应或者某时间内能处理的个数
- 可靠性:在意外下还能云效
- 可用性:正常运行时间比例
- 安全性:阻止非授权用户使用
- 可修改性:快速对系统进行变更
- 功能性:能完成所期望功能
- 可变性:经扩充或变更成为新体系机构
- 互操作性:和其他系统的交互性能
- 易用性:对用户来说完成任务的容器成都
- 可测试性:通过测试揭示缺陷的容易成都
软件架构评估方法
相关概念
- 风险点:系统架构风险是指架构设计中潜在的,存在问题的架构决策所带来的隐患
- 非风险点:指不会带来隐患,一般要求以“xxx要求是可以实现的”方法表示
- 敏感点:为了实现某种特定的质量属性,一个或多个构建所具有的特性
- 权衡点:影响多个质量属性的特性,是多个质量属性的敏感点
- 场景:用例描述功能需求,场景描述非功能需求
构件
构件的三个特性:
- 软件构件是一种组装单元,他具有规范的接口规约和显示的语境依赖。软件构件可以被独立的部署并由第三方任意组装
- 构件是系统中有价值的、几乎独立的并可替换的一个部分,他在良好定义的体系结构与境内满足某清晰的功能
- 构件是一个独立发布的功能部分,可以通过接口访问他的服务
构件、对象、模块对比
检索与提取构建
- 基于关键字的检索:在用户界面上将构件库的关键字以树形结构展现给客户
- 刻面检索法:由三步构成,构造查询、检索构件、对构件排序
- 超文本检索法:在构件说明书里精确或模糊匹配
组装构件
- 基于功能组装:采用子程序调用和和参数传递方式
- 基于数据组装:先设计个框架,然后根据框架中节点需要对构件进行适应性修改后分派到适当位置
- 面向对象组装:如果基类能直接用就直接用,不能直接用就继承子类
中间件优点
- 简化结构
- 屏蔽差异
- 利于复用
重量级和轻量级区别
- 重量级:占用资源过多,在开发过程中效率低。大部分时间花在配置、运行的过程上,修改复制,单元测试也麻烦
- 轻量级:提高了开发速度,立即看到结果。单元测试也非常简单,大量现成可参考的开源代码
WEB设计
负载均衡
HTTP重定向
定义应该了然于胸了,不再赘述了。
特点是:实现简单,但是性能较差
反向代理
也比较常用,不赘述了
特点:部署简单,但是代理服务器可能变成性能瓶颈
DNS域名解析负载均衡
获取域名对应ip地址时,DNS服务器直接给出负载均衡后的服务器
特点:效率比HTTP重定向高,减少维护成本。但是应用服务器故障不能及时通知DNS,并且DNS控制权在服务商,网站无法管理
NAT的负载均衡
基于NAT的负载均衡将一个外部ip地址映射为多个ip地址,对每次连接请求动态地转化为一个内部节点的地址。
特点:技术较为成熟,一般在网关位置,可通过硬件实现。四层交换机一般采用这种技术