从零学架构-基础部分

news2024/11/25 6:45:20

一、架构的基础

将学习的架构设计知识总结出来,分享给大家。

1.1什么是架构

  • 架构和框架是什么关系?有什么区别?

  • Linux有架构,MySQL有架构,JVM也有架构,应该关注哪个架构?

  • 金融有架构,支付有架构,反洗钱也有架构,到底什么是架构?

先熟悉几个概念:系统和子系统,模块和组件,框架和架构。

  • 概念1

系统:泛指一群有关联的个体组成,根据某种规则,能完成某类工作的群体。

子系统:也是由一群有关联的个体组成,是更大系统中的一部分。

例如:支付系统---交易子系统、账户子系统、结算子系统、网关子系统。

  • 概念2

模块:是一套一致且互相有紧密关联的软件组织,包含程序和数据结构两部分。

组件:自包含的、可编程的、可重用的、与语言无关的软件单元,可以被容易的组装应用程序,例如COM组件,JavaBean组件。

区别:模块是从逻辑的角度上来拆分系统的,目的是职责分离,例如登录模块、注册、交易监测模块;组件是从物理角度上拆分系统的,例如安全加密组件、审核组件,目的是单元复用。

  • 概念3

框架:实现了某种软件规范的、能提供基础功能的产品,例如Spring MVC,MyBatis。

架构:软件架构是指软件系统的顶层结构。架构需要明确系统包含哪些“个体”,架构需要明确个体运作和协作规则,架构要能区分系统和子系统间的层次关系。

1.2架构设计的目的

架构设计的主要目的是为了解决复杂度带来的问题。

随着软件规模的增加,当系统有很多部分组成的时候,整个系统的组织协调会导致一系列新的设计问题的产生。

例如:

  • 系统规模庞大,内部耦合严重,开发效率低。

  • 系统耦合严重,牵一发而动全身,后续修改和扩展困难。

  • 系统逻辑复杂,容易出问题,问题难排查。

1.3复杂度来源

  • 高性能单机复杂度--多进程,多线程,多任务。集群复杂度--任务分配、任务分解

  • 高可用

计算高可用、存储高可用--主备、主从、主主、集群等物理结构的设计保证可用,存在一致性如何解决的问题。

系统高可用方案五花八门,但万变不离其宗,本质上都是通过“冗余”来实现高可用。

  • 可扩展正确预测变化,完美封装变化,但是要做到这两点很困难。

  • 低成本

往往只有“创新”才能达成低成本目标,“创新”包括引进新技术或者创造新技术。

  • 安全

功能安全---XSS攻击,CSRF攻击,SQL注入,Windows漏洞,密码破解。

架构安全---DDoS攻击,目前有效手段是多层防火墙,但是功能强大、性能一般,不太适合互联网系统,在互联网系统的架构安全目前没有太好的设计手段。

  • 规模功能越多,导致系统的复杂度指数级上升,最糟糕的现象是多个功能节点之间形成网状依赖。数据越多,系统的复杂度会发生质变,主要表现在大数据成了一门独立的技术领域。

二、架构设计三原则

2.1合适原则

合适优于业界领先

三个负面因素:

  1. 没那么多人,却想干那么多活;

  1. 没那么多积累,却想一步登天;

  1. 没那么多卓越的业务场景,却幻想灵光一闪成为天才。

所以,优秀的架构都是在企业当前人力、条件、业务等各种因素的约束下设计出来的,能够合理整合资源,发挥最大功效,并且能快速落地。

2.2简单原则

简单优于复杂

软件领域的复杂性体现在结构复杂性和逻辑复杂性两方面。

结构复杂性,会导致系统的组件越来越多,系统内部关系越来越复杂,在升级修改、排查问题的时候会增大难度。

逻辑复杂性,假设支付系统的所有功能都集中到一个系统中,上百人在维护几十万行代码,会不停的出现各种冲突。

所以,架构设计时如果简单方案和复杂方案都能满足需求,优先选择简单方案。

2.3演化原则

演化优于一步到位

软件架构需要根据业务的发展不断变化。

误区:试图一步到位的设计一个软件架构,期望不管业务怎么变化,架构都是稳定的。

变化是永恒的,架构也是随着业务的变化不断演变,不断完善的。

所以,架构的设计首先是满足当前的业务需要,然后是在不断的实际应用过程中迭代。

三、架构设计流程

架构设计也是有套路的,按照套路去做,也能做出基本可行的架构。

3.1有的放矢-识别复杂度

架构设计的目的是解决系统的复杂性,只有正确的分析出了系统的复杂性,架构设计才能不会偏离方向。

评估一个项目的复杂度可以从八大要素来衡量



序号

要素

说明

评分规则

加权因子

1

子系统/功能点数量

一般来说,一个系统越复杂,其按照功能域划分的子系统越多,其最终分解出来的具体功能点越多。子系统和功能点的增加与工作量的增加不是简单的线性增长关系,从只包含一个子系统到包含多个子系统,随着人员投入数量增多和组织的细分,其复杂度会因为组织间沟通和分工协作的难度而大大增加。在这一点来说,可以认为子系统的数量是划分简单项目和复杂项目的一个重要维度。

0-低、5-中、10-高。技术复杂度因素较难量化,只能根据技术要求定性分为低、中、高。

2

2

外围接口数量

一般的IT系统都不是系统孤岛,是和外围系统紧密相连的。与外围系统的接口数量越多,代表着进行系统间集成的复杂度越高,难度越大。这里的复杂度影响主要来自于几个方面:一个是不同系统架构间形成统一接口协议的复杂度,这需要弥合系统间差异,体现系统间关系的工作;另一个是在完全无关的两个项目组织间协调实施的复杂度,包括设计开发、联调测试等协同工作,这是比项目组内部不同子系统间的协调更为复杂的协同工作。

0-需求稳定成熟 ,5-需求较新,但相对稳定,10-需求变动频繁

1.5

3

承载的业务数量

在当前的IT系统架构中,往往一套体系架构上,运转着多种业务和产品。因此,一套IT系统中承载的业务和产品数量,将直接影响系统开发、配置、测试、联调工作的复杂度。

0--简单(1-5个业务),5—中等复杂(6-10个业务),10—复杂(>10个业务)

1

4

业务数据量

大型企业的IT系统中,很多关键系统是伴随着大量的业务数据存在着的。IT系统处理数据量的大小,直接影响到IT系统的架构设计模式。一个业务处理数据量大的系统,不仅要求从硬件规模和部署上进行复杂深入的考虑,而且在应用架构设计上要充分考虑系统的并行处理、负载均衡等要求。很多在小数据量系统中可以通过人工进行的操作,在大数据量系统中则需要通过开发系统功能来实现,如数据的审核、出错回退、数据同步等。从IT系统的特点来说,可以采用最终用户数(Subscriber)来衡量业务数据量的大小。

0--小型(<1000000的用户),5--中型(1000000至5000000个用户),10—大型(>5000000个用户)

1

5

技术复杂度

技术复杂度来自于系统建设中对功能上的复杂技术要求,典型的场景包括最新技术架构、较高的安全要求、套装软件的集成等。目前各种IT系统建设已经从原来的烟囱式的一种业务一套处理程序,向生产线式的多种业务一套处理程序的架构转变。这种模式更多地需要搭建系统架构时,建立统一的数据模型,对业务进行充分的抽象,通过构建基础架构公共组件实现多种业务的支撑。

0-低、5-中、10-高。技术复杂度因素较难量化,只能根据技术要求定性分为低、中、高。

1

6

需求的成熟度

需求的成熟度是影响IT系统建设成本的重要因素。如省BOSS的高复杂度系统,因为需求比较成熟,有完善的规范来指导设计和开发,因此,其实施成本可以通过多省实施来实现架构复制,实现了成本摊平。

而很多新的业务领域,存在着业务模式频繁变化,需求不断变动的特点,此类IT系统建设,不仅要求开发商具有丰富的系统实施经验,还要具有深入的咨询能力,对人员素质要求和系统的灵活性及扩展性都有较高的要求。

0-需求稳定成熟 ,5-需求较新,但相对稳定,10-需求变动频繁

1

7

系统的关键程度

系统的关键程度实际上体现的是对系统的质量要求。这种质量要求体现在系统高可用性要求(如联机交易要求7*24小时的高可用性)、系统处理正确性要求(如计费帐务的正确性处理要求)、系统处理的及时性要求(如实时计费处理的时效性要求)等。系统的关键程度越高,越要在架构设计中考虑冗余处理、正确性验证、并发处理等各种手段,确保系统运行的稳定、准确、高效。

0-非关键系统、5-中等关键系统、10-重要关键系统。

1.5

8

数据迁移的复杂程度

IT系统的建设过程中,除了设计开发之外,更为艰巨的工作是测试和迁移。很多IT系统需要把原有系统中的数据完整地迁移到新系统中,尤其对于数据量大的系统,数据迁移需要开发很多程序和脚本,并通过充分的测试和模拟,才能实现正确和及时的数据迁移。很多原有系统还存在较多的错误数据,这些数据的清理也是一个很大的工作。

0-简单少量迁移,5-中等复杂迁移,10-高度复杂迁移

1

0-40分:小型项目;41—70分:中型项目;71—100分:大型项目

架构的复杂性主要来源于“高性能”“高可用”“可扩展”等几个方面,可以从这几个方向上将复杂的问题列出来,排除优先级,依次解决。当问题间有冲突的时候要选择一定的妥协。

序号

问题

分类

优先级

解决办法



软件系统的可塑性和易变性是很强的,方案可以有多个,总能挑出性价比比较高的方案。

引进新技术是解决复杂度的一个好方法。

3.2按图索骥-设计备选方案

架构师需要设计多个备选方案,备选方案设计时考虑一下几个方面:

备选阶段关注的是技术选型,不是技术细节,技术选型的差异要明显,经过评审选定最终方案,后续再进行细化。

3.3深思熟虑-评估和选择方案

选择方案还是比较有挑战的,主要体现在一下几个方面:





在实际操作中也会碰到一些习惯性的做法:





如何较客观的选择方案呢?答案:360评,根据方案质量属性点综合度环挑选适合当时情况的最有方案。



质量属性

分值

方案A

方案B

方案C

评分

性能

5、3、1

A-3,B-5,C-1

可用性

7、5、3

硬件成本

项目投入

复杂度

安全性

可扩展性



根据项目对高性能、高可用、可扩展方面的要求,可以有所侧重,质量属性也可以增减。

3.4精雕细琢-详细方案设计

备选方案是不关注技术细节的,备选方案确定后,需要把方案中涉及到的关键技术的细节确定下来,例如ES副本的数量,MySQL分库分表的方案,是用dubbo还是用thrift,负载均衡策略是什么等。





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

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

相关文章

【排序算法】数据结构排序详解

前言&#xff1a; 今天我们将讲解我们数据结构初阶的最后一部分知识的学习&#xff0c;也是最为“炸裂”的知识---------排序算法的讲解&#xff01;&#xff01;&#xff01;&#xff01; 目录1.排序的概念及其运用1.1排序的概念1.2排序运用2.常见排序算法的实现2.1 插入排序2…

Java 基础面试题——集合

目录1.Java 有哪些常用容器&#xff08;集合&#xff09;&#xff1f;2.Collection 和 Collections 有什么区别&#xff1f;3.List、Set、Map 之间的区别是什么&#xff1f;4.HashMap 的长度为什么是 2 的 N 次方&#xff1f;源码中是如何保证的&#xff1f;5.HashMap 和 Hasht…

ChatGPT 下一步,分配对象脱单有望

ChatGPT 火了&#xff0c;上一次这么热闹还是上一次……那时最紧俏的概念叫元宇宙。 混沌时期&#xff0c;鱼龙混杂。资本市场靠新故事造梦&#xff0c;科技巨头争相加入竞赛&#xff0c;也有脑子活泛的已经利用它的巨大热度搞上了小钱钱——活跃在某宝某鱼上&#xff0c;贩卖…

2023版Java面试汇总!全面对标阿里P7,学完,化身offer收割机

最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;本文主要是为了帮大家快速回顾Java中知识点&#xff0c;这套&#xff08;详细笔记/面试题&#xff09;它几乎涵盖了所有的Java技术栈面试题和答案&#xff0c;相信可以帮助大家在金三银四&#xff0c;最短的时间内用作学习和面…

基于微信小程序的优选驾考小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器…

SpringBoot查询接口传入参数为List,XML的写法

✉️ 查询业务 ➿ 目前互联网项目的诸多业务中数查询业务居多&#xff0c;而查询业务中又数展示类接口、报表类接口是我们接触最多的查询类接口。在实际项目中&#xff0c;不是全局查询数据就做完了业务&#xff0c;这样的需求也没有意义。条件查询因此作为最普遍的查询业务&am…

软件测试之优秀的产品质量评估模型的特征

产品质量评估中的几个场景&#xff1a; 场景1&#xff1a;项目计划的时间到了&#xff0c;就发布产品。 场景2&#xff1a;将缺陷修复率作为产品的质量目标。产品必须达到一定的缺陷修复率&#xff0c;才能发布。 场景3&#xff1a;我们为产品建立了很多指标来作为质量目标&…

报表开发工具FastReport .Net 如何在移动端生成Web报表应用?

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案&#xff0c;使用FastReport .NET可以创建独立于应用程序的.NET报表&#xff0c;同时FastReport .Net支持中文、英语等14种语言&#xff0c;可以让你的产品保证真正的国际性。专业版和企业版包括Fast…

软件测试1-测试就是找茬游戏

软件测试是找茬游戏以前有一个很火的游戏叫《大家来找茬》&#xff0c;我玩这个游戏很厉害&#xff0c;在这个游戏中&#xff0c;两幅图中有几个不一样的地方&#xff0c;有些地方很明显&#xff0c;一眼就能看到&#xff0c;有的地方隐藏得比较深&#xff0c;要仔细看才能看清…

2PC(两阶段提交)方案

XA方案2PC的传统方案是在数据库层面实现的&#xff0c;如Oracle、MySQL都支持2PC协议&#xff0c;为了统一标准减少行业内不必要的对接成本&#xff0c;需要制定标准化的处理模型及接口标准&#xff0c;国际开放标准组织Open Group定义了分布式事务处理模型DTP&#xff08;Dist…

“遥感+”蓝碳储量估算、红树林信息提取

大气温室气体浓度不断增加&#xff0c;导致气候变暖加剧&#xff0c;随之会引发一系列气象、生态和环境灾害。如何降低温室气体浓度和应对气候变化已成为全球关注的焦点。海洋是地球上最大的“碳库”,“蓝碳”即海洋活动以及海洋生物&#xff08;特别是红树林、盐沼和海草&…

Fluent Python 笔记 第 13 章 正确重载运算符

运算符重载的作用是让用户定义的对象使用中缀运算符(如 和 |)或一元运算符(如 - 和 ~)。说得宽泛一些&#xff0c;在 Python 中&#xff0c;函数调用(())、属性访问(.)和元素访问 / 切片 ([])也是运算符&#xff0c;不过本章只讨论一元运算符和中缀运算符。 13.1 运算符重载基…

Tomcat安装、IDEA发布web项目及通过浏览器访问servlet程序

tomcat安装 在官网上下载tomcat安装包&#xff0c;推荐下载8.5版本 解压安装到任意磁盘&#xff0c;记住安装时的目录 在系统里找到高级系统设置——高级——环境变量——系统变量里的path——编辑——新建&#xff0c;内容填写tomcat中的bin路径的绝对路径。 在bin文件夹找…

【3D目标检测】Pseudo-Stereo for Monocular 3D Object Detection in Autonomous Driving

目录概述细节背景与整体流程图像级别生成特征级别生成损失函数学习深度感知的特征概述 本文是基于单目图像的3D目标检测方法。 【2021】【MonoDLE】 研究的问题: 能否借助立体图像检测算法提高单目图像检测的效果如何实现右侧图像的生成 解决的方法&#xff1a; 受启发于伪…

java基于springboot+vue微信小程序的学生健康管理

任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于Java语言、微信小程序技术设计并实现了学生健康管理小程序。系统主要包括系统首页、个人中心、学生管理、健康档案管理、体检报告管理、健康评估管…

案例分享 | 某券商利用AI技术进行告警关联分析(上)

本内容来自公众号“布博士”------&#xff08;擎创科技资深产品专家&#xff09;背景&#xff1a;作为大型券商企业之一&#xff0c;某券商对深入数字化转型&#xff0c;以及对应用、网络、主机、操作系统、中间件、用户使用体验等的全面可观测性要求越来越强烈。由于可观测性…

机器学习在预测脊髓型颈椎病中的应用:一项28名参与者的事后初步研究

机器学习在预测脊髓型颈椎病中的应用:一项28名参与者的事后初步研究 Machine Learning for the Prediction of Cervical Spondylotic Myelopathy: A Post Hoc Pilot Study of 28 Participants 简单说&#xff1a;训练了两个模型&#xff1a;1)预测脊髓型颈椎病诊断&#xff0…

音乐 APP 用户争夺战,火山引擎 VeDI 助力用户体验升级!

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;并进入官方交流群 国内数字音乐市场正在保持稳定增长。 根据华经产业研究院数据报告显示&#xff0c;2020 年数字音乐市场规模为 357.3 亿元&#xff0c;到 2022 年市场规模已增长至 482.7 …

2月编程语言排行榜新鲜出炉,谁又摘得桂冠?

近日&#xff0c;TIOBE公布了2023年2月编程语言排行榜&#xff0c;本月各个语言表现如何&#xff1f;谁又摘得桂冠&#xff1f;一起来看看吧&#xff01; TIOBE 2月Top15编程语言&#xff1a; 详细榜单查看TIOBE官网 https://www.tiobe.com/tiobe-index/ 关注IT行业的小伙伴…

LabVIEW中的软件定时应用可以达到怎样的精度

LabVIEW中的软件定时应用可以达到怎样的精度有一个基于软件定时的数据采集应用。采集任务在一个循环结构中完成&#xff0c;使用LabVIEW的定时函数。每次循环间的间隔应该是一个常量&#xff0c;但没有得到优于1ms的定时分辨率。解答:LabVIEW 或LabWindows/CVI定时函数使用的是…