架构篇33:传统的可扩展架构模式-分层架构和SOA

文章目录

    • 分层架构
    • SOA
    • 小结

相比于高性能、高可用架构模式在最近几十年的迅猛发展来说,可扩展架构模式的发展可以说是步履蹒跚,最近几年火热的微服务模式算是可扩展模式发展历史中为数不多的亮点,但这也导致了现在谈可扩展的时候必谈微服务,甚至微服务架构都成了架构设计的银弹,高性能也用微服务、高可用也用微服务,很多时候这样的架构设计看起来高大上,实际上是大炮打蚊子,违背了架构设计的“合适原则”和“简单原则”。

为了帮助你在实践中更好的进行可扩展架构设计,将分别介绍几种可扩展架构模式,指出每种架构模式的关键点和优缺点。今天我们先来介绍传统的可扩展模式,包括分层架构和 SOA,后面还会介绍微服务架构。

分层架构

分层架构是很常见的架构模式,它也叫 N 层架构,通常情况下,N 至少是 2 层。例如,C/S 架构、B/S 架构。常见的是 3 层架构(例如,MVC、MVP 架构)、4 层架构,5 层架构的比较少见,一般是比较复杂的系统才会达到或者超过 5 层,比如操作系统内核架构。

按照分层架构进行设计时,根据不同的划分维度和对象,可以得到多种不同的分层架构。

  1. C/S 架构、B/S 架构

划分的对象是整个业务系统,划分的维度是用户交互,即将和用户交互的部分独立为一层,支撑用户交互的后台作为另外一层。例如,下面是 C/S 架构结构图。

img

  1. MVC 架构、MVP 架构

划分的对象是单个业务子系统,划分的维度是职责,将不同的职责划分到独立层,但各层的依赖关系比较灵活。例如,MVC 架构中各层之间是两两交互的:

img

  1. 逻辑分层架构

划分的对象可以是单个业务子系统,也可以是整个业务系统,划分的维度也是职责。虽然都是基于职责划分,但逻辑分层架构和 MVC 架构、MVP 架构的不同点在于,逻辑分层架构中的层是自顶向下依赖的。典型的有操作系统内核架构、TCP/IP 架构。例如,下面是 Android 操作系统架构图。

img

典型的 J2EE 系统架构也是逻辑分层架构,架构图如下:

img

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

img

无论采取何种分层维度,分层架构设计最核心的一点就是需要保证各层之间的差异足够清晰,边界足够明显,让人看到架构图后就能看懂整个架构,这也是分层不能分太多层的原因。否则如果两个层的差异不明显,就会出现程序员小明认为某个功能应该放在 A 层,而程序员老王却认为同样的功能应该放在 B 层,这样会导致分层混乱。如果这样的架构进入实际开发落地,则 A 层和 B 层就会乱成一锅粥,也就失去了分层的意义。

分层架构之所以能够较好地支撑系统扩展,本质在于隔离关注点(separation of concerns),即每个层中的组件只会处理本层的逻辑。比如说,展示层只需要处理展示逻辑,业务层中只需要处理业

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

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

相关文章

JAVA建造者模式详解

建造者模式 1 建造者模式介绍 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式. 定义: 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 **建造者模式要解决的问题 ** 建造者模式可以将部件和其组装过程分开…

Linux 查看系统信息 + 服务信息命令(简记)

概述 作用:Linux 运维工作中常用的命令速查 小步教程 (xiaobuteach.com) Linux 命令大全 | 菜鸟教程 (runoob.com) 文本编辑器vim 本章大纲 | 小步教程 vim 多文件编辑 | 小步教程 常用 ps 查看服务启动命令 Linux ps 命令 | 菜鸟教程 (runoob.com) # 查找…

第七讲:考试介绍与考纲解读

第七讲:考试介绍与考纲解读 考试介绍考试人群考试报名考试环境考纲解读选择题(40分)操作题(60分)小结本讲简介:终于,熬过了略微枯燥的基础课程,我们进入了二级考试训练阶段。在这讲中,我们将对全国计算机等级考试(66)Python 语言程序设计(二级)进行 360全方位无死…

微服务的幂等性

微服务架构设计的中心思想是将服务进行拆分,但是在这个过程中,如果被依赖的服务发生奔溃,就会引起一系列问题。为了解决这个问题,就会引入重试的机制,重试又会引入幂等性的问题,下面我们就分析这个过程&…

Java GC-常见垃圾回收器

目录 前言一、垃圾回收器分类二、垃圾回收器介绍1、Serial 收集器2、ParNew 收集器3、Parallel Scavenge 收集器4、Serial Old 收集器5、Parallel Old 收集器6、CMS 收集器(多线程标记清除算法)7、G1 收集器 三、项目中垃圾收集器选型 前言 Java的垃圾回…

乐意购项目前端开发 #7

一、购物车 本地购物车 创建cartStore.js文件 创建cartStore.js文件, 将购物车列表数据存在pinia中 import { ref, computed } from "vue"; import { defineStore } from "pinia"; import { useUserStore } from "./user"; import {insertCart…

PyTorch使用

前言 系统环境:win10 使用Anaconda,Anaconda的安装自行百度。 conda 23.7.4 目录 前言 创建虚拟环境 1、查看当前有哪些虚拟环境 2、创建虚拟环境pytorch 3、激活及关闭pytorch虚拟环境 4、删除pytorch虚拟环境 使用yolov5测试 1、切换至yolo…

飞天使-docker知识点14-docker安装mongodb

文章目录 拉取镜像创建目录配置文件mongo.conf启动命令 拉取镜像 docker pull mongo或你想要下载的版本创建目录 mkdir -p /data/mongo/conf/ mkdir -p /data/mongo/data/ mkdir -p /data/mongo/logs/useradd mongodb -s /usr/sbin/nologin cat /etc/passwd |grep mongodb mo…

Python 调用 OpenAI ChatGPT API

一、安装环境1. 安装python环境 $ pip install openai 2. 验证是否安装成功 方法1,bash命令验证 $ pip show openai 方法2,python脚本验证 import openai print(openai.__version__) 3. 找到你的 OpenAI API Key:进入OpenAI官网&#xff0…

绝对完美解决hdfs datanode数据和磁盘数据分布不均调整(hdfs balancer )——经验总结

Hadoop集群Datanode数据倾斜,个别节点hdfs空间使用率达到95%以上,于是新增加了三个Datenode节点,由于任务还在跑,数据在不断增加中,这几个节点现有的200GB空间估计最多能撑20小时左右,所以必须要进行balance操作。 通过观察磁盘使用情况,发现balance的速度明显跟不上新…

idea 快捷键ctrl+shift+f失效的解决方案

文章目录 搜狗输入法快捷键冲突微软输入法快捷键冲突 idea的快捷键ctrlshiftf按了没反应,理论上是快捷键冲突了,检查搜狗输入法和微软输入法快捷键。 搜狗输入法快捷键冲突 不需要简繁切换的快捷键,可以关闭它,或修改快捷键。 微…

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案 大家好 我是寸铁👊 总结了一篇Error: only one service expected goctl一键转换生成rpc服务错误解决方案的文章✨ 喜欢的小伙伴可以点点关注 💝 问题背景 今天寸铁在…

mysql脑裂原因及解决方法

MySQL这种关系型数据库,在高并发环境下,可能会出现脑裂问题。 一、MySQL脑裂的原因 MySQL脑裂是由于分布式系统中多个MySQL实例之间出现网络分区而导致的。具体来说,当网络分区发生时,不同的MySQL实例可能会在相同的时间内接收到…

IT工单治理野史:由每周最高150+治理到20+ | 京东物流技术团队

背景 相信不少人都值过班当过小秘吧,每天都要在线排查与解答各种各样来自IT或"单聊"的问题,同时还要针对每个问题进行"复盘"分析,在完善系统、提高体验的同时挖掘出其中的雷点,防止某一天突然"爆炸&quo…

飞天使-k8s知识点12-kubernetes散装知识点1-架构有状态

文章目录 k8s架构图有状态和无状态服务 资源和对象对象规约和状态 资源的对象-资源的分类 k8s架构图 有状态和无状态服务 区分有状态和无状态服务有利于维护yaml文件 因为配置不同资源和对象 命令行yaml来定义对象对象规约和状态 规约 spec 描述对象的期望状态状态 status 对…

机器学习基础、数学统计学概念、模型基础技术名词及相关代码个人举例

1.机器学习基础 (1)机器学习概述 机器学习是一种人工智能(AI)的分支,通过使用统计学和计算机科学的技术,使计算机能够从数据中学习并自动改进性能,而无需进行明确的编程。它涉及构建和训练机器…

【Spring】Spring 对 Ioc 的实现

一、Ioc 控制反转 控制反转是一种思想 控制反转是为了降低程序耦合度,提高程序扩展力,达到 OCP 原则,达到 DIP 原则 控制反转,反转的是什么? 将对象的创建权利交出去,交给第三方容器负责 将对象和对象之…

Angular BaseView抽离页面公用属性

前言 如果有一系列的页面布局很类似,为了节省时间,我们可以把这些类似的页面所通用的属性和方法抽离成一个BaseView,让其它页面继承该基础页面,同时将一些经常改变的属性和差异的属性写到配置文件里。例如树容器初始时是否展开、…

什么是前端工程化,请举例说明

前端工程化 前端工程化的定义为什么需要前端工程化前端工程化的核心概念 模块化开发:组件化开发:规范化开发:自动化开发:持续集成 前端工程化的主要工具前端工程化的应用总结: 前端工程化 前端工程化的定义 前端工程…

从资深用户角度谈三款出色数据可视化工具

作为一名数据可视化领域的老用户,我接触过众多数据可视化产品,其中不乏佼佼者。今天,我想为大家介绍三款在我心目中颇具特色的数据可视化产品,它们分别是山海鲸可视化、Tableau和Power BI。 首先,让我们来谈谈山海鲸可…