软件系统架构的一些常见专业术语

图片

分层架构是逻辑上的,在物理部署上,三层结构可以部署在同一个物理机器上,但是随着网站业务的发展,必然需要对已经分层的模块分离部署,即三层结构分别部署在不同的服务器上,使网站拥有更多的计算资源以应对越来越多的用户访问。

图片

系统架构的分层设计是一种常见的软件架构模式,旨在通过将系统划分为多个独立的层次或层,来提高系统的可维护性、可扩展性和灵活性。这种设计方法有助于实现关注点分离(Separation of Concerns),使得每个层负责处理特定类型的职责,从而简化了开发和维护过程。

表示层(Presentation Layer):这一层是用户与系统交互的界面,负责处理用户输入和展示输出信息。它通常包括图形用户界面(GUI)、网页、命令行接口等。

业务逻辑层(Business Logic Layer):也称为应用服务层,它包含了应用程序的核心业务规则和流程。这一层处理数据的业务处理和计算,确保业务规则得到正确执行。

数据访问层(Data Access Layer):这一层负责与数据库或其他数据存储系统的交互,包括数据的读取、写入、更新和删除操作。它提供了对底层数据存储的抽象,使得上层不需要关心具体的存储细节。

基础设施层(Infrastructure Layer):这一层包含了一些通用的服务和功能,如日志记录、错误处理、事务管理、安全控制等。它为上层提供必要的支持和服务。

领域模型层(Domain Model Layer):专注于定义和实现业务领域的概念模型。

服务层(Service Layer):提供业务逻辑层的封装,对外暴露服务接口。

每层之间的通信通常是通过定义良好的接口进行,以保持各层的解耦和独立性。这种分层架构有助于团队协作,因为不同的团队或开发者可以专注于各自负责的层次,而不会相互干扰。同时,它也有助于系统的测试和维护,因为每一层都可以被单独测试和修改,而不会影响到其他层次的功能。

图片

如果说分层是将软件在横向方面进行切分,那么分割就是在纵向方面对软件进行切分。

系统架构的分割指的是将一个复杂的大系统分解成多个较小的、可管理的、相互独立的部分或子系统的过程。这种分割可以基于多种原则进行,例如功能、业务领域、技术栈、数据流、服务边界等。系统分割的主要目标是提高系统的可维护性、可扩展性、灵活性和性能。

基于功能的分割:将系统按其核心功能或业务领域进行分割,例如将电子商务平台分割为商品管理、订单处理、支付系统、用户账户等子系统。

基于数据的分割:根据数据的类型或业务流程中的数据流来分割系统,例如将数据密集型的操作分离到专门的数据处理子系统。

基于服务的分割:使用微服务架构将系统分割成一系列小型、独立的服务,每个服务负责一个具体的功能,并通过清晰的API与其他服务通信。

基于负载的分割:根据系统负载或资源消耗来分割系统,例如将计算密集型任务和I/O密集型任务分离到不同的服务器或集群。

基于技术栈的分割:如果系统中使用了多种技术栈,可以将使用不同技术的部分分割开,以便于团队专精于特定的技术领域。

基于团队的分割:按照开发团队的能力和责任范围来分割系统,确保每个团队专注于他们最擅长的部分。

分割后的子系统之间应该有明确的接口和通信协议,以保证系统的整体一致性和数据完整性。此外,分割还需要考虑到系统的非功能性需求,例如安全性、性能、可用性和可伸缩性。

图片

对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着可以使用更多的计算机完成同样的功能,计算机越多,CPU、内存、存储资源也就越多,能够处理的并发访问和数据量就越大,进而能够为更多的用户提供服务。

系统架构的分布式设计是指将系统部署在多个物理或虚拟节点上,这些节点通过网络相互通信和协作,共同完成系统的功能。分布式系统架构允许系统跨越多个地理位置,利用多台计算机的计算能力和存储资源,以提高系统的性能、可靠性、可扩展性和容错能力。

分布式系统架构的关键特性包括:

分布式计算:计算任务可以在多台机器上并行处理,提高了处理速度和效率;负载均衡,通过分配任务到多个节点,避免单个节点过载。

分布式存储:数据存储在多个节点上,可以实现数据的冗余,增强数据的持久性和容灾能力;支持大规模数据的存储和快速检索,如使用分布式文件系统和数据库。

服务化:微服务架构,将系统分解为一组松耦合的小服务,每个服务实现一个特定的功能;服务间通过网络进行通信,通常使用HTTP/HTTPS、gRPC或其他远程过程调用(RPC)协议。

容错性:分布式系统需要处理节点故障、网络分区等问题,具备一定的自我恢复和容错机制;实现数据复制和冗余,确保即使部分节点失效,系统仍能继续运行。

一致性与可用性权衡:CAP理论指出,在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)三者不可兼得,通常需要在其中做出权衡。

通信和协调:节点间的通信需要设计有效的消息传递机制,如使用消息队列、事件总线或分布式共识算法;协调节点状态,确保数据的一致性,可能需要使用两阶段提交、Paxos、Raft等协议。

扩展性:分布式系统设计应该易于水平扩展,即通过增加更多节点来提升系统性能和容量。

安全性和隐私:分布式系统需要考虑数据的安全传输、访问控制和隐私保护。

监控和运维:需要强大的监控系统来检测系统的健康状况和性能指标,及时发现和解决问题;自动化运维,包括自动部署、滚动更新、自动故障恢复等。

设计分布式系统架构时,还需要考虑网络延迟、带宽限制、数据同步策略、事务处理机制等因素。此外,由于分布式系统架构的复杂性,往往需要采用先进的中间件和技术栈,如Kubernetes、Docker、Apache Kafka、ZooKeeper、Cassandra、Hadoop等,来管理和优化系统。

图片

使用分布式虽然已经将分层和分割后的模块独立部署,但是对于用户访问集中的模块(比如网站的首页),还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。

系统架构中的集群(Cluster)设计是一种通过将多台计算机(节点)组合在一起,作为一个统一的系统来提供服务的方法。集群架构旨在提高系统的性能、可靠性和可扩展性,通过负载均衡、故障切换和资源共享等机制,使得系统能够处理更大的负载,并在部分组件出现故障时依然保持服务的连续性。

集群架构适应的场景:

高性能计算集群(High Performance Computing Cluster, HPC):用于科学计算、大数据分析等领域,强调计算能力。

负载均衡集群:通过负载均衡器分发请求,提高Web服务器、数据库服务器等的处理能力。

高可用性集群(High Availability Cluster, HA):重点在于提供不间断的服务,通过心跳监测和故障切换保证系统可用性。

分布式存储集群:如分布式文件系统(如HDFS)、分布式数据库(如Cassandra、MongoDB),用于处理大规模数据存储和访问。

图片

缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段,现代CPU越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。

CDN:即内容分发网络,部署在距离终端用户最近的网络服务商,用户的网络请求总是先到达他的网络服务商那里,在这里缓存网站的一些静态资源(较少变化的数据),可以就近以最快速度返回给用户,如视频网站和门户网站会将用户访问量大的热点内容缓存在CDN。

反向代理:反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,最先访问到的就是反向代理服务器,这里缓存网站的静态资源,无需将请求继续转发给应用服务器就能返回给用户。

本地缓存:在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库。

分布式缓存:大型网站的数据量非常庞大,即使只缓存一小部分,需要的内存空间也不是单机能承受的,所以除了本地缓存,还需要分布式缓存,将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据。

图片

计算机软件发展的一个重要目标和驱动力是降低软件耦合性。事物之间直接关系越少,就越少被彼此影响,越可以独立发展。大型网站架构中,系统解耦合的手段除了前面提到的分层、分割、分布等,还有一个重要手段是异步,业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。

图片

网站需要7X24小时连续运行,但是服务器随时可能出现故障,特别是服务器规模比较大时,出现某台服务器宕机是必然事件。要想保证在服务器宕机的情况下网站依然可以继续服务,不丢失数据,就需要一定程度的服务器冗余运行,数据冗余备份,这样当某台服务器宕机时,可以将其上的服务和数据访问转移到其他机器上。

图片

发布对网站都是头等大事,许多网站故障出在发布环节,网站工程师经常加班也是因为发布不顺利。通过减少人为干预,使发布过程自动化 可有效减少故障。发布过程包括诸多环节。自动化代码管理 ,代码版本控制、代码分支创建合并等过程自动化,开发工程师只要提交自己参与开发的产品代号,系统就会自动为其创建开发分支,后期会自动进行代码合并;自动化测试 ,代码开发完成,提交测试后,系统自动将代码部署到测试环境,启动自动化测试用例进行测试,向相关人员发送测试报告,向系统反馈测试结果;自动化安全检测 ,安全检测工具通过对代码进行静态安全扫描及部署到安全测试环境进行安全攻击测试,评估其安全性;最后进行自动化部署 ,将工程代码自动部署到线上生产环境。

图片

互联网的开放特性使得其从诞生起就面对巨大的安全挑战,网站在安全架构方面也积累了许多模式:通过密码和手机校验码 进行身份认证;登录、交易等操作需要对网络通信进行加密 ,网站服务器上存储的敏感数据如用户信息等也进行加密处理;为了防止机器人程序滥用网络资源攻击网站,网站使用验证码 进行识别;对于常见的用于攻击网站的XSS攻击、SQL注入、进行编码转换等相应处理;对于垃圾信息、敏感信息进行过滤 ;对交易转账等重要操作根据交易模式和交易信息进行风险控制。

图片

系统框架是指在构建复杂软件系统时所采用的一组标准化、模块化的设计原则和架构模式。它定义了系统各组件之间的关系、交互方式以及系统的整体结构。系统框架为开发者提供了一个高层次的蓝图或模板,以指导如何组织代码、管理数据、处理请求以及实现系统的各项功能。

常见的框架类型:

  • Web应用框架:如Spring Boot(Java)、Django(Python)、Express(Node.js)等,用于构建Web应用程序。

  • 移动应用框架:如React Native(跨平台)、Flutter(跨平台)、iOS的UIKit和Android的AndroidX等,用于构建移动应用程序。

  • 游戏开发框架:如Unity(C#)、Unreal Engine(C++)等,为游戏开发者提供丰富的工具和资源。

  • 大数据处理框架:如Hadoop、Spark等,用于处理和分析大规模数据集。

  • 微服务框架:如Spring Cloud(Java)、Dubbo(Java)等,支持构建松耦合的分布式系统。

系统框架的作用:

  • 提高开发效率:通过提供现成的组件和架构模式,减少重复工作,使开发者能更专注于业务逻辑的实现。

  • 增强系统可维护性:标准化的结构和清晰的组件划分使得系统更易于理解和维护。

  • 促进团队协作:统一的开发标准和架构规范有助于团队成员之间的沟通和协作。

  • 提高系统可扩展性:良好的系统框架设计能够支持新功能的快速添加和现有功能的修改,而不影响系统其他部分。

  • 保证系统质量:通过遵循最佳实践和行业标准,减少错误和缺陷的发生,提高系统的稳定性和可靠性。

    图片

在软件工程和系统设计领域指的是在软件架构中定义的、具有特定功能和责任的可复用部分。它们是软件架构设计的基本单元,通常用来实现软件系统的某一特定方面或功能,同时与其他组件协同工作以完成整个系统的目标。

  • 业务架构(Business Architecture, BA):主要指企业的管理模式,包括企业的组织架构、流程架构、治理模式等。

  • 流程架构(Process Architecture, PA):是流程框架、流程清单及流程间关系的总称,是指导流程设计与演进的基本原则。

  • IT架构(IT Architecture, ITA):是业务架构与IT应用构建之间的桥梁,是IT建设的综合框架和蓝图,指导IT规划、选型、建设的决策。IT架构由数据架构、应用架构和技术架构组成。

  • 数据架构(Data Architecture, DA):定义数据项、数据属性和相互关系标准,指导对数据资产的整合和控制,使数据投资与业务战略相匹配。

  • 应用架构(Application Architecture, AA):指企业IT应用系统的组成、功能及相互关系。

  • 技术架构(Technology Architecture, TA):指实现数据架构和应用架构运行的技术环境,包括硬件、软件和网络等基础设施。

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

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

相关文章

前端Web开发HTML5+CSS3+移动web视频教程 Day4 CSS 第2天

P44 - P 四个知识点: 复合选择器 CSS特性 背景属性 显示模式 复合选择器 复合选择器仍然是选择器,只要是选择器,作用就是找标签。复合选择器就是把基础选择器进行组合使用。组合了之后就可以在大量的标签里面更快更精准地找标签了。找…

[附源码]基于Flask的演唱会购票系统

摘要 随着互联网技术的普及和发展,传统购票方式因其效率低下、流程繁琐等问题已难以满足现代社会的需求。本文设计并实现了一个基于Flask框架的演唱会购票系统,该系统集成了用户管理、演唱会信息管理、票务管理以及数据统计与分析等功能模块&#xff0c…

项目实战--Spring Boot + Minio文件切片上传下载

1.搭建环境 引入项目依赖 <!-- 操作minio的java客户端--> <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.2</version> </dependency> <!-- jwt鉴权相应依赖--> &…

Python + OpenCV 开启图片、写入储存图片

这篇教学会介绍OpenCV 里imread()、imshow()、waitKey() 方法&#xff0c;透过这些方法&#xff0c;在电脑中使用不同的色彩模式开启图片并显示图片。 imread() 开启图片 使用imread() 方法&#xff0c;可以开启图片&#xff0c;imread() 有两个参数&#xff0c;第一个参数为档…

[c++] 可变参数模版

前言 可变参数模板是C11及之后才开始使用,学校的老古董编译器不一定能用 相信大家在刚入门c/c时都接触过printf函数 int printf ( const char * format, ... ); printf用于将数据格式化输出到屏幕上,它的参数非常有意思,可以支持任意数量,任意类型的多参数.而如果我们想实现类…

陶建辉当选 GDOS 全球数据库及开源峰会荣誉顾问

近日&#xff0c;第二十三届 GOPS 全球运维大会暨 XOps 技术创新峰会在北京正式召开。本次会议重点议题方向包括开源数据库落地思考、金融数据库自主可控、云原生时代下数据库、数据库智能运维、数据库安全与隐私、开源数据库与治理。大会深入探讨这些方向&#xff0c;促进了数…

方法引用详解

什么是方法引用&#xff1f;&#xff1a;针对于函数式接口中的抽象方法 为什么用方法引用&#xff1f;&#xff1a;避免代码的重复&#xff0c;简便书写&#xff0c;提高效率 在使用Lambda表达式的时候&#xff0c;我们实际上传递进去的代码就是一种解决方案&#xff1a;拿参数…

服务器数据恢复—raid5阵列硬盘出现大量坏道的数据恢复案例

服务器存储数据恢复环境&故障&#xff1a; 一台DELL EqualLogic PS 4000存储中有一组由12块磁盘组建的raid5阵列&#xff0c;存储空间划分3个同等大小的卷&#xff0c;采用的VMFS文件系统。 两块硬盘指示灯亮黄色&#xff0c;raid5阵列崩溃&#xff0c;存储变得不可用。 服…

代码随想录——划分字母区间(Leetcode763)

题目链接 贪心 class Solution {public List<Integer> partitionLabels(String s) {int[] count new int[27];Arrays.fill(count,0);// 统计元素最后一次出现的位置for(int i 0; i < s.length(); i){count[s.charAt(i) - a] i;}List<Integer> res new Ar…

mac怎么压缩pdf文件大小,mac压缩pdf文件大小不改变清晰度

在数字化时代&#xff0c;pdf格式因其良好的兼容性和稳定性&#xff0c;成为了文档分享和传输的首选。然而&#xff0c;随着文件内容的丰富&#xff0c;pdf文件的体积也越来越大&#xff0c;给存储和传输带来了不小的困扰。本文将揭秘几种简单有效的pdf文件压缩方法&#xff0c…

多粒度封锁-封锁粒度、多粒度封锁模式

一、引言 1、若采用封锁技术实现并发控制&#xff0c;事务在访问数据库对象前要在数据库对象上加锁&#xff0c;为提高事务的并发程度&#xff0c;商用DBMS会采用一种多粒度封锁方法 2、事务可访问的数据库对象可以是逻辑单元&#xff0c;包括关系、关系中的元组、关系的属性…

【C++】map和set详解

目录 1. 关联式容器 2. 键值对pair 3. 树形结构的关联式容器 4. set 4.1 set的介绍 4.2 set的构造 4.3 set的迭代器 4.4 set的容量 4.5 set的常用函数 5. multiset 6. map 6.1 map的介绍 6.2 map的构造 6.3 map的迭代器 6.4 map的容量 6.5 map的operator[] 6.6…

Python入门 2024/7/6

目录 元组的定义和操作 字符串的定义和操作 字符串 字符串的替换 字符串的分割 字符串的规整操作&#xff08;去除前后空格&#xff09; 字符串的规整操作&#xff08;去掉前后指定字符串&#xff09; 操作 字符串的替换 字符串的分割 字符串的规整操作 统计字符串的…

ESP32——物联网小项目汇总

商品级ESP32智能手表 [文章链接] 用ESP32&#xff0c;做了个siri&#xff1f;&#xff01;开源了&#xff01; [文章链接]

JSP WEB开发(一) JSP语言基础

目录 JSP JSP简介&#xff1a; JSP页面 JSP运行原理 JSP脚本元素 JAVA程序片 局部变量 全局变量和方法的声明 全局变量 方法的声明 程序片执行特点 synchronized关键字 表达式 JSP指令标记 page指令 include指令 JSP动作标记 JSP动作元素include和include指令的…

测试环境:使用OpenSSL生成证书并配置Https

文章目录 需求1、安装OpenSSL1.1、安装包下载1.2、安装&#xff08;以window 64位为例&#xff09;1.3、配置环境变量&#xff08;非必须&#xff09; 2、生成证书2.1、新建文件夹2.2、生成根证书2.2.1、生成私钥2.2.2、生成根证书&#xff0c;并且自签名 2.3、服务端证书生成2…

前端根据目录生成模块化路由routes

根据约定大于配置的逻辑&#xff0c;如果目录结构约定俗成&#xff0c;前端是可以根据目录结构动态生成路由所需要的 route 结构的&#xff0c;这个过程是要在编译时 进行&#xff0c;生成需要的代码&#xff0c;保证运行时的代码正确即可 主流的打包工具都有对应的方法读取文…

设计模式之状态机模式

一、状态机模式介绍 状态机模式&#xff08;State Machine Pattern&#xff09;是一种用于描述对象行为的软件设计模式&#xff0c;属于行为型设计模式。在状态机模式中&#xff0c;对象的行为取决于其内部状态&#xff0c;并且在不同的状态下&#xff0c;对象可能会有不同的行…

Java信号量semaphore的原理与使用方法

Semaphore的基本概念 在Java中&#xff0c;Semaphore是位于java.util.concurrent包下的一个类。它的核心就是维护了一个许可集。简单来说&#xff0c;就是有一定数量的许可&#xff0c;线程需要先获取到许可&#xff0c;才能执行&#xff0c;执行完毕后再释放许可。 那么&…

Unity 简单载具路线 Waypoint 导航

前言 在游戏开发和导航系统中&#xff0c;"waypoint" 是指路径中的一个特定位置或点。它通常用于定义一个物体或角色在场景中移动的目标位置或路径的一部分。通过一系列的 waypoints&#xff0c;可以指定复杂的移动路径和行为。以下是一些 waypoint 的具体用途&…