《软件架构基础》常用的软件架构设计

编程

  • 可见度。各个子系统只能与同一层及其下一层的子系统存在依赖关系。
  • 易变性

    • 最上层放置随用户需求的改变而改变的元素
    • 最底层放置随实施平台的改变而改变的元素
    • 中间层放置广泛适用于各种系统和实施环境的元素

  • 层数。小型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

回到顶部