《软件架构基础》常用的软件架构设计
- 可见度。各个子系统只能与同一层及其下一层的子系统存在依赖关系。
- 易变性
- 最上层放置随用户需求的改变而改变的元素
- 最底层放置随实施平台的改变而改变的元素
- 中间层放置广泛适用于各种系统和实施环境的元素
- 层数。小型3层,原则不超过10层
常见的分层模型
- 客户端-服务器模型
- 三层模型:用户表示层、业务逻辑层、数据层
- 网络系统常用的三层结构:核心层、汇聚层和接入层
分层架构的优点
- 结构简单,容易理解和开发
- 不同技能的程序员可以分工,负责不同的层,天然适合大多数软件公司的组织架构
- 每一层都可以独立测试,其它层的接口通过模拟解决
缺点
- 组件发生变化,需要代码调整或增加功能的时候,通常比较麻烦
- 部署麻烦,即使修改一个小地方,往往需要整改软件,重新部署,不易做持续发布
- 污水池反模式(层次之间的穿透)
事件驱动架构
- 主流的异步分发架构
- 高度可扩展
- 高度解耦
- 两种拓扑结构
- 中介拓扑
- 由中介者控制流程分发事件
- 中介者不参与具体业务,但控制整个流程
- 代理拓扑
- 中介拓扑
微内核架构
- 插件化架构,如eclipse
- 通过插件添加额外功能
- 扩展性良好
- 系统核心和功能分离
常用的架构设计(下)
MVC架构
- View层它提供给用户的操作界面
- Model负责程序操作数据或信息
- Controller负责将用户的输入映射到Model
MVP架构
- MVP是MVC的一个变种
- Presenter对视图和模型进行了解耦,他们彼此都对对方无所知
- controller只起到控制作用,presenter把控全局
微服务
- 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注与完成一件任务并很好的完成该任务。在所有情况下,每个微服务代表着一个小的业务能力。
- 消息队列
- 去中心数据
微服务特点
- 围绕业务进行组织划分
- 基于resource的API
- 去中心化管理、数据
- 应用各自独立
- 基础设施自动化
- 构建自动化,测试自动化,部署自动化,监控自动化
- 演进式设计
- 可选择最适合自己的技术方案,容易替换和升级
微服务Restful设计
- 尽量在一个专有域名下
- 版本放在域名中
- 资源为视角 ,行为在子资源处理
HTTP方法
- GET(SELECT):从服务器取出资源
- POST(CREATE):在服务器新建一个资源
- PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)
- 比如有一个User,有5个属性,使用PUT更新,必须有这5个属性
- PATCH(UPDATE):在服务器更新资源(客户端提供改变后的属性)
- 比如有一个User,有5个属性,使用PATCH更新,则部分更新
- DELET(DELETE): 从服务器删除资源
常用状态码
- 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
- 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
- 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
- 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
- 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
- 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
返回结果的约定
- GET /collection:返回资源对象的列表(数组)
- GET /collection/resource:返回单个资源对象
- POST /collection:返回新生成的资源对象
- PUT /collection/resource:返回完整的资源对象
- PATCH /collection/resource:返回完整的资源对象
- DELETE /collection/resource:返回一个空文档
Hypermedia API
在返回结果中提供链接,使用户明白下一步应该做什么
{"link": { "rel": "collection https://www.example.com/zoos",
"href": "https://api.example.com/zoos",
"title": "List of zoos",
"type": "application/vnd.yourformat+json"
}}
ESB
定义系统服务
- 有趣
- 可重用
- 原子性
以上是 《软件架构基础》常用的软件架构设计 的全部内容, 来源链接: utcz.com/z/513091.html