如何设计可扩展架构

news2024/11/25 1:04:13

架构设计复杂度模型

在这里插入图片描述

业务复杂度和质量复杂度是正交的

业务复杂度

业务固有的复杂度,主要体现为难以理解、难以扩展,例如服务数量多、业务流程长、业务之间关系复杂

质量复杂度

高性能、高可用、成本、安全等质量属性的要求

架构复杂度应对之道

复杂度等级业务复杂度质量复杂度架构模式
1框架,如LAMP、SSH
2SOA、DDD、微服务
3集权、缓存、Reactor、分片、副本
4融合所有模式

架构设计环

在这里插入图片描述

可扩展复杂度模型

可扩展(extensibility):系统适应变化的能力,包含可理解和可复用两个部分

可伸缩(scalability):系统通过添加更多资源来提升性能的能力

可扩展复杂度模型

在这里插入图片描述

“拆分”复杂度分析和设计

拆分复杂度模型

在这里插入图片描述

拆分粒度

两个复杂度

内部复杂度

又称为“单体复杂度”,指单个对象内部的复杂度,例如传统的单体系统,所有业务都在一个系统里面

可以用参与的开发人数来衡量单个拆分对象的复杂度(三个火枪手原则)

例如:3个人负责一个子系统/子模块是比较合理的,20个人在同一个子系统上开发,则内部复杂度过高

外部复杂度

又称为“群体复杂度”,指拆分后的多个对象之间的关系复杂度

可以用业务流程涉及对象数量来衡量外部复杂度

例如:1次用户请求需要5个子系统参与是比较合理的,如果需要20个子系统参与,则外部复杂度过高

平衡的艺术

内外平衡原则

内部复杂度和外部复杂度是天平的两端,一方降低,另一方必然升高,关键在于平衡

先粗后细原则

如果你把握不准,那么就先拆少一些,后面发现有问题再继续拆分

“封装”复杂度分析和设计

封装复杂度模型

在这里插入图片描述

预测的艺术

2年原则

只预测2年内的变化,不要试图预测10年后的变化

3次原则

预测没有把握就不要封装,等到需要的时候重构即可

封装的技巧

在这里插入图片描述

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

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

相关文章

MySQL备份与恢复

目录 一.数据备份的重要性 二.数据库备份的分类 2.1 物理备份 2.2 逻辑备份 2.3 完全备份(只适合第一次) 三.常见的备份方法 四.MySQL完全备份 4.1 MySQL完全备份优缺点 4.2 数据库完全备份分类 4.2.1 物理冷备份与恢复 五.完全备份 5.1 MySQ…

YOLO家族再度升级——阿里达摩院DAMO-YOLO重磅来袭

最近看到阿里达摩院发表了他们的最新研究成果,在YOLO系列上推出的新的模型DAMO-YOLO,还没有来得及去仔细了解一下,这里只是简单介绍下,后面有时间的话再详细研究下。 官方项目在这里,首页截图如下所示: 目…

ASEMI整流桥UD4KB100,UD4KB100体积,UD4KB100大小

编辑-Z ASEMI整流桥UD4KB100参数: 型号:UD4KB100 最大重复峰值反向电压(VRRM):1000V 最大平均正向整流输出电流(IF):4A 峰值正向浪涌电流(IFSM)&#xf…

堆(C语言实现)

文章目录:1.堆的概念2.堆的性质3.堆的结构4.接口实现4.1初始化堆4.2销毁堆4.3打印堆内元素4.4向上调整4.5向堆中插入数据4.6向下调整4.7删除堆顶元素4.8查看堆顶元素4.9统计堆内数据个数4.10判断堆是否为空4.11堆的构建1.堆的概念 如果有一个关键码的集合&#xff0…

【Redis】缓存更新策略

1. 缓存更新策略综述 内存淘汰 不用自己维护,利用 Redis 自己的内存淘汰机制 (内存不足时,触发策略,默认开启,可自己配置),其可在一定程度上保持数据一致性 超时剔除 给数据添加 TTL&#x…

【电力运维】浅谈电力通信与泛在电力物联网技术的应用与发展

摘要:随着我国社会经济的快速发展,我国科技实力得到了巨大的提升,当前互联网通信技术在社会中得到了广泛的应用。随着电力通信技术的快速发展与更新,泛在电力物联网建设成为电力通讯发展的重要方向。本文已泛在电力物联网系统为核…

Docker使用

xshell和xftp软件下载 链接:https://pan.baidu.com/s/1G7DIw14UvOmTwU9SwtYILg 提取码:he18 --来自百度网盘超级会员V6的分享 docker相关资料: 链接:https://pan.baidu.com/s/1VcxvuJvBIKNKnUUHPlM3MA 提取码:6w5e …

一些常见的项目管理 KPI

本文将介绍一些常见的项目管理kpi,让大家更深刻的了解其作用及所存在的问题。 一、关键绩效指标的作用 在 GPS 和其他现代导航方法出现之前,水手和探险家们只能通过星星找到正确的方向。特别是在北半球,他们利用北极星找出真正的北方方位。…

[附源码]SSM计算机毕业设计医学季节性疾病筛查系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Mysql高频面试题(一)

文章目录1. Mysql如何实现的索引机制?2. InnoDB索引与MyISAM索引实现的区别是什么?3. 一个表中如果没有创建索引,那么还会创建B树吗?4. B树索引实现原理(数据结构)5. 聚簇索引与非聚簇索引的B树实现有什么区…

Vector源码分析

Vector源码分析 1 Vector基本介绍与类图 Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的: Vector 是同步访问的。Vector 包含了许多传统的方法,这些方法不属于集合框架。Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的…

pytest + yaml 框架 - 1.我们发布上线了!

前言 基于 httprunner 框架的用例结构,我自己开发了一个pytest yaml 的框架,那么是不是重复造轮子呢? 不可否认 httprunner 框架设计非常优秀,但是也有缺点,httprunner3.x的版本虽然也是基于pytest框架设计&#xff…

Spring中JDK与Cglib动态代理的区别

靠Spring吃饭的小伙伴一定经常听说动态代理这个词,没错,Aop就是靠它来实现的。Spring提供了两种代理模式:JDK动态代理、Cglib动态代理,供我们选择,那他们有啥区别呢?Sping为啥不自己从中挑选一个作为代理模…

IB物理的费曼图怎么考?

费曼图是用来描述基本粒子间相互作用的图形化表示,由诺贝尔物理学奖得主、著名物理学家理查德费曼(Richard Feynman)提出,十分清晰直观。虽然真正的费曼图可以用来做更深奥的数学计算,但是在IB物理中,考纲要…

那些惊艳一时的 CSS 属性

1.position: sticky 不知道大家平时业务开发中有没有碰到像上图一样的吸顶的需求:标题在滚动的时候,会一直贴着最顶上。 这种场景实际上很多:比如表格的标题栏、网站的导航栏、手机通讯录的人名首字母标题等等。如果让大家自己动手做的话&…

flink学习

Flink学习之路(一)Flink简介 - 走看看 Flink(一)-基本概念 - 知乎 Flink架构: Flink整个系统包含三个部分: 1、Client: 给用户提供向Flink系统提交用户任务(流式作业)的能力。用户提交一个F…

大型商场借力泛微,实现内外协同招商,合同、铺位、费用统一管理

对即将开业或是面临调整改造的购物中心来说,用什么样的方式才能快速地达成招商目的,实现资产价值的保值和增值,成为商业操盘手们共同面临的难题…… 行业需求 • 建立充足的品牌资源储备,拓宽招商渠道和线索,提高成交…

ElasticSearch-全文检索和分析引擎学习Day01

前言 学习谷粒商城基础片完结后便开启了高级部分的学习,高级部分的第一章节 Elasticsearch 搜索和分析引擎。文档地址:elasticsearch中文文档地址 一、Elasticsearch 简介 1.1 Elasticsearch 是什么? Elasticsearch 是一个分布式的免费开…

入门力扣自学笔记208 C++ (题目编号:895)

895. 最大频率栈​​​​​​ 题目: 设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。 实现 FreqStack 类: FreqStack() 构造一个空的堆栈。 void push(int val) 将一个整数 val 压入栈顶。 int pop() 删除…

Leetcode 85.最大矩形(困难)

一、题目 1、题目描述 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例1: 输入:matrix [["1","0","1","0","0&qu…