可扩展架构与分层架构

可扩展架构

1 概述

软件系统与硬件/建筑系统最大的区别就是可以迭代升级和扩展,一个硬件生产出来后就不会进行改变,除非拿去售后维修,一个建筑完工后也不会改变其整体的结构,除非被破坏后进行修复和重铸

可以发现如果硬件/建筑不进行改变,能说明其质量很不错,稳定,但软件则完全相反,如果一个系统完工后就不做任何更新,反而说明其没有发展,没有生命力

可拓展好吗?好,让系统能根据技术发展和新需求进行升级,但是如何以最小的代价去扩展系统才是难点。一个新的需求可能就会导致全部地方都要改动,但是如果系统的扩展性强,那么扩展时的出错率就会更低,投入可能也就越少

2 可扩展的基本思想

可扩展性架构设计方法很多,但背后基本思想都可以一个字概括

拆就是讲原本大一统的系统拆分为多个规模小的部分,修改时只需要改动其中一个部分或者几个部分就可以,降低了改动风险,但是怎么去拆则是有不同的思路

  • 面向流程拆分:将整个业务流程拆分为几个阶段,每个阶段作为一部分。
  • 面向服务拆分:将系统提供的服务拆分,每个服务作为一部分。
  • 面向功能拆分:将系统提供的功能拆分,每个功能作为一部分。

以一个学生信息管理系统为例

  • 面向流程拆分:拆为展示层,业务层,数据层,存储层
    • 展示层负责界面设计,不同的业务有不同页面
    • 业务层负责业务逻辑处理
    • 数据层负责数据的访问,例如增删改查数据库
    • 存储层负责存储数据,例如MySQL
  • 面向服务拆分:拆为注册、登录、信息管理、安全设置等服务
  • 面向功能拆分:将每个服务继续拆分,拆为手机号注册、邮箱注册、学号注册、手机号登录、邮箱登录、学号登录、基本信息管理、课程信息管理、成绩信息管理…

可以发现不同的拆分方式,架构图差异很大,但无论使用哪种方式,都可以实现,但是不能随便选择,因为不同的拆分方式,本质上决定了系统的扩展方式

3 可扩展方式

很多时候,即使不拆分系统,只需要在设计和编码时规范编写,也不见得到处修改的问题。但这是大家都遵守这个规则的情况下,团队一般会有各种各样的同事,即使不遵守也只是道德问题,如果合理的拆分了,他能修改的地方就会变小,影响也会降低

不同拆分方式的优势

  • 面向流程:扩展时很多时候只需要修改某一层,少部分情况可能关联两层
  • 面向服务:新增某个服务时,只需要扩展相关服务就可以,如新增一个第三方注册,只需要增加一个第三方注册服务,修改注册服务和登录服务即可,其他服务无须修改
  • 面向功能:扩展和新增功能时,只需要扩展相关功能即可,无须修改所有的服务。如第三方注册,只需要新增一个第三方注册功能,和修改登录功能即可

不同的拆分方式,将得到不同的系统架构,典型如下

  • 面向流程:分层架构
  • 面向服务:SOA,微服务
  • 面向功能:微内核架构

并且不同的拆分方式并不是互斥的,例如微服务架构中一个服务可以拆为分层架构,且某些服务还可以拆为微内核架构

4 总结

  • 软件架构和硬件/建筑系统最大差异在于软件可以扩展和升级
  • 真正有生命力的软件系统都是在不断迭代和发展的
  • 所有可扩展性架构设计,背后基本思想为一个字:拆
  • 拆分软件系统有三种方式:面向流程拆分、面向服务拆分、面向功能拆分
  • 不同的拆分方式将得到不同的系统架构

分层架构

1 分层架构类型

分层架构也被称为N层架构,通常N>=2,例如C/S架构、B/S架构,常见的是3层架构(MVC,MVP)、4层架构、5层架构比较少见,一般像操作系统内核架构才会达到5层。

C/S架构、B/S架构

站在整个业务系统的角度划分,划分维度是用户交互,不管是客户端还是浏览器端都是进行数据呈现的,业务和其他存储的所有能力都在服务端

在这里插入图片描述

MVC架构、MVP架构

站在单个业务子系统的角度划分,划分维度为职责,将不同的职责划分到独立层,但各层的依赖关系比较灵活,两两交互

逻辑分层架构

站在单个业务子系统或者整个业务系统,划分维度为职责,不过和MVC等不同的是,逻辑分层是自顶向下依赖的。

在这里插入图片描述

针对整个业务系统进行逻辑分层的架构图

在这里插入图片描述

2 分层架构详解

无论采取哪种分层维度,最核心的就是要保证各层之间的差异和边界明显,这也是分层不能分太多层的原因。

分层能支撑系统扩展能力的本质在于:隔离关注点(即每层都只处理本层的逻辑),比如展示层只需处理展示逻辑,业务层只需要处理业务逻辑,这样即使有逻辑变动也不会影响其他层,只需要在业务层做修改即可。
如果要做到扩展稳定,会涉及到抽象概念,比如一个接口下有多个实现,且我们不需要关心不同的实现拿到的结果后需要做什么处理,因为这个在接口中已经抽象了,拿到的结果都是一样的。

分层结构另一个特点就是层层传递,也就是说一旦分层确定,业务流程就按照层级进行传递,不能跨层操作(即使现在看起来很方便)

跨层操作

  • 分层本来就是约束两两依赖,降低后续扩展时的影响范围
  • 如果跨层操作,在后续扩展时就会牵一发动全身,无法快速扩展

分层架构的典型缺点就是性能,因为每次业务请求都会穿越所有层,有些事情可能是多余的,会造成性能浪费,但在现在硬件和网络有了质的飞跃,也就是洒洒水啦

3 总结

  • 分层架构是常见架构,也叫N层架构,一般2<=N<=5
  • C/S、B/S架构划分维度是用户交互
  • MVC、MVP架构划分维度是职责
  • 逻辑分层架构划分对象可以是单个业务子系统,也可以是整个业务系统,划分维度也是职责
  • 无论采取何种分层维度,分层架构核心就是保证各层间差异和边界足够明显
  • 分层架构之所以能很好支撑扩展,本质在于隔离关注点
  • 分层架构特点是层层传递,缺点是层层传递带来的性能消耗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis从入门到进阶

目录 MyBatis入门1、创建项目、数据准备2、数据库配置3、编写持久层代码单元测试打印日志 基本操作查询数据插入数据删除数据更新数据 MyBatis - xml插入数据更新数据删除数据查询数据#{}与${}SQL注入排序like查询 MyBatis进阶if标签trim标签where标签set标签foreach标签sql标签…

TensorFlow 2.0 环境配置

官方文档&#xff1a;CUDA Installation Guide for Windows 官方文档有坑&#xff0c;windows的安装指南直接复制了linux的指南内容&#xff1a;忽略这些离谱的信息即可。 可以从官方文档知悉&#xff0c;cuda依赖特定版本的C编译器。但是我懒得为了一个编译器就下载整个visua…

浅谈:基于三维场景的视频融合方法

视频融合技术的出现可以追溯到 1996 年 , Paul Debevec等 提出了与视点相关的纹理混合方法 。 也就是说 &#xff0c; 现实的漫游效果不是从摄像机的角度来看 &#xff0c; 但其仍然存在很多困难 。基于三维场景的视频融合 &#xff0c; 因其直观等特效在视频监控等相关领域有着…

亚马逊评论爬虫+数据分析

爬取评论 做分析首先得有数据&#xff0c;数据是核心&#xff0c;而且要准确&#xff01; 1、爬虫必要步骤&#xff0c;选好框架 2、开发所需数据 3、最后测试流程 这里我所选框架是seleniumrequest&#xff0c;很多人觉得selenium慢&#xff0c;确实不快&#xff0c;仅针对此…

RK3588 C++ 多线程运行

RK3588 C 多线程 实际运行解决OpenCV问题&#xff1a; 1. OpenCV 安装 sudo apt-get update sudo apt-get install libopencv-dev2. 检查 OpenCV 安装路径 find / -name OpenCVConfig.cmake3. 设置 OpenCV_DIR 环境变量 export OpenCV_DIR/usr/lib/aarch64-linux-gnu/cmake/op…

【已解决】Parameter index out of range (14 > number of parameters, which is 13).

解决思路&#xff1a; 字面意思就是sql传参数量对不上&#xff0c;但我检查几遍代码都感觉没问题&#xff0c;sql单独拿到mysql里运行也没问题。看了其他的报错&#xff1a;Error setting non null for parameter #2 with JdbcType null&#xff0c;看起来也是跟参数有关的&am…

MDBook 使用指南

MDBook 是一个灵感来自 Gitbook 的强大工具&#xff0c;专门用于创建电子书和文档。它能够将 Markdown 编写的内容编译成静态网站&#xff0c;非常适合项目文档、教程和书籍的发布。 个人实践过许多文档方案&#xff0c;如 hexo、hugo、WordPress、docsify 和 mdbook 等&#…

vue计算属性 初步使用案例

<template><div><h1>购物车</h1><div v-for"item in filteredItems" :key"item.id"><p>{{ item.name }} - {{ item.price }} 元</p><input type"number" v-model.number"item.quantity"…

C++编程技巧与规范-类和对象

类和对象 1. 静态对象的探讨与全局对象的构造顺序 静态对象的探讨 类中的静态成员变量(类类型静态成员) 类中静态变量的声明与定义&#xff08;类中声明类外定义&#xff09; #include<iostream> using namespace std;namespace _nmspl {class A{public:A():m_i(5){…

如何在 Ubuntu 上安装 RStudio IDE(R语言集成开发环境) ?

RStudio 是一个功能强大的 R 语言集成开发环境(IDE)&#xff0c;R 是一种主要用于统计计算和数据分析的编程语言。任何从事数据科学项目或任何其他涉及 R 的类似任务的人&#xff0c;RStudio 都可以使您的工作更轻松。 本指南将引导您完成在 Ubuntu 系统上安装 RStudio 的过程…

高中数学:概率-相关运算性质

文章目录 一、概率定义二、运算性质三、事件相互独立四、频率与概率五、练习 一、概率定义 二、运算性质 基本性质 互斥事件的性质 对立事件性质 包含事件的性质 有交集但不包含的事件性质 三、事件相互独立 注意&#xff1a; 四、频率与概率 五、练习

VM安装Ubuntu详细配置

1、第一步修改阿里源&#xff1a;打开软件 与更新&#xff0c;更改下载自为&#xff1a;http://mirrors.aliyun.co/ubuntu 2、安装open-vm-tools: 安装两个文件&#xff1a;sudo api install open-vm-tools open-vm-tools-desktop 3、安装搜狗输入法&#xff1a;点击下载 a、…

乒乓球筐(多组输入模板)

乒乓球筐 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNext()) {int[] hash new i…

AI 写作(五)核心技术之文本摘要:分类与应用(5/10)

一、文本摘要&#xff1a;AI 写作的关键技术 文本摘要在 AI 写作中扮演着至关重要的角色。在当今信息爆炸的时代&#xff0c;人们每天都被大量的文本信息所包围&#xff0c;如何快速有效地获取关键信息成为了一个迫切的需求。文本摘要技术正是为了解决这个问题而诞生的&#x…

TCP 三次握手意义及为什么是三次握手

✨✨✨励志成为超级技术宅 ✨✨✨ TCP的三次握手在笔试和面试中经常考察&#xff0c;非常重要&#xff0c;那么大家有没有思考过为什么是三次握手&#xff0c;俩次握手行不行呢&#xff1f;四次握手行不行呢&#xff1f;如果大家有疑问或者不是很理解&#xff0c;那么这篇博客…

初识算法 · 位运算(2)

目录 前言&#xff1a; 判定字符是否唯一 丢失的数字 比特位计数 只出现一次的数字III 前言&#xff1a; ​本文的主题是位运算&#xff0c;通过四道题目讲解&#xff0c;一道是判断字符是否唯一&#xff0c;一道是只出现一次的数字III&#xff0c;一道是比特位计数&…

Unity Assembly Definition Assembly Definition Reference

文章目录 1.Unity 预定义程序集2.Assembly definition3. Assembly definitions相关实验 1.Unity 预定义程序集 Unity 有4个预定义程序集&#xff1a; 阶段程序集名脚本文件1Assembly-CSharp-firstpassStandard Assets, Pro Standard Assets和Plugins文件夹下面的运行时脚本2A…

【征稿倒计时!华南理工大学主办 | IEEE出版 | EI检索稳定】2024智能机器人与自动控制国际学术会议 (IRAC 2024)

#华南理工大学主办&#xff01;#IEEE出版&#xff01;EI稳定检索&#xff01;#组委阵容强大&#xff01;IEEE Fellow、国家杰青等学术大咖领衔出席&#xff01;#会议设置“优秀论文”“优秀青年学者报告”“优秀海报”等评优奖项 2024智能机器人与自动控制国际学术会议 &#…

[CKS] Create/Read/Mount a Secret in K8S

最近准备花一周的时间准备CKS考试&#xff0c;在准备考试中发现有一个题目关于读取、创建以及挂载secret的题目。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[C…

5个非LLM软件趋势

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…