架构模式

一般来说,企业应用指的是大型系统

企业应用的特点:

分层架构

批注 2020-06-26 092443

软件架构设计分层模型和构图思考

将系统按照职责拆分和组织,上层依赖于下层定义的各种服务,下层对上层隐藏下下层的细节,最核心的一点就是需要保证各层之间的差异足够清晰,边界足够明显

层次并不能封装所有东西,有时会带来级联修改,过多的层次也会影响性能

为何分层

关注点分离(降低复杂度)

隔离变化/错误

stateDiagram-v2  state 数据接入层 {    外部预警1 --> [*]    外部预警2 --> [*]    外部预警3 --> [*]  }  数据接入层 --> 落库业务层
classDiagram  class 地址查询策略  地址查询策略: +查询(手机号)  class 外部接口查询策略1  外部接口查询策略1: +查询(手机号)  class 外部接口查询策略2  外部接口查询策略2: +查询(手机号)  class 外部接口查询策略3  外部接口查询策略3: +查询(手机号)  地址查询策略 <|-- 外部接口查询策略1  地址查询策略 <|-- 外部接口查询策略2  地址查询策略 <|-- 外部接口查询策略3

扩展性伸缩性

可测试性

分层的问题

分层架构设计

分层架构模型

MVC

随着前后端分离以及后端微服务化的不断发展,传统的MVC已不适合现在的纯后端系统,Controller其实也是API,它代表了服务对外提供的接口,是一种合约

Model1模型

Model2模型

优势

弊端

Model

业务数据模型,Model层是高层策略,是技术无关逻辑的封装

View

当有用户的行为触发操作时,由控制器更新模型,并通知视图进行更新

Controller

主要是接收用户请求,并负责协调Model与View

MVP

2021106132821

MVVM

BFF

事件驱动架构

两种模式

Mediator

2021106152652

Broker

202110615598

两种模式的processor都是单一职责的最小执行单元

微内核架构

2021107221455

系统核心的作用在于资源封装与插件规范定义

插件为在核心提供的接口上实现其单一的功能 插件之间应避免依赖 不能影响核心

优点

缺点

设计关键点

系统核心

核心的功能为MVP 所有核心能实现的接口都要经过核心

开放规范

注册规范

标识、功能、位置、依赖、权限

通信机制

插件装载

生产者消费者模式

平衡问题:数据不堆积、不浪费消费者资源 调度算法

EDA关注的是事件触发、传递整体流程 生产者消费者关注的数据的传递与存储处理具体流程

优点

缺点

生产者

系统运转的动力来源 重点关注发送数据到容器 与消费者彻底解耦

消费者

获取数据-业务逻辑处理 要向容器确认数据被消费

容器

保管数据

数据单元

具备业务含义、传输过程保证数据单元完整性、尽量保证单元之间无依赖

组织领域逻辑

事务脚本

优点

缺点

领域模型

开销来源于使用复杂以及数据源的复杂,还要面对将领域模型映射到数据库的问题

表模块

服务层

映射到关系数据库

架构模式

行为

如何保证对领域对象的修改能及时存储到数据库

读取数据

结构映射模式

关系的映射

继承

classDiagram  class Animal {    +Id    +age  }  class Cat{    +weight  }  class Dog {    +height  }  Animal <|-- Cat  Animal <|-- Dog
CREATE TABLE Animal (  DB_TYPE  id,  age,  weight,  height)
CREATE TABLE Animal (  id,  age)CREATE TABLE Cat (  id,  weight)CREATE TABLE Dog (  id,  height)
CREATE TABLE Animal (  id,  age)CREATE TABLE Cat (  id,  age  weight)CREATE TABLE Dog (  id,  age  height)

建立映射

将数据库设计看做一种持久化对象数据的方法

元数据

数据库连接

web表现层

模板视图

jsp php

转换视图

json

两阶视图

生成一个逻辑视图,再将逻辑视图对应到html

并发

本质问题

执行语境

方案

乐观锁与悲观锁

事务

事务是一个又边界的工作序列,开始和结束都有明确定义

事务资源

横跨多个请求的被称为长事务

锁升级:一个事务锁住了许多行,则直接升级到对整个表的锁

减少事务隔离提高灵活性

可串行化:当并发执行的结果与以某种顺序一致时

系统事务与业务事务

离线并发控制

只有在数据提交失败的时候才能发现

应用服务器并发

使用每会话一个进程的方式来避免处理线程的麻烦

会话状态

存储方法

会话迁移

会话可以在服务器集群之间转移

分布

远程接口与本地接口

进程内的过程调用非常快

何时必须使用分布对象

分布边界

注意远程调用的边界

分布接口

如果系统基于相同的平台构建,最好使用系统自己的远程调用机制