软件架构快速知识笔记

B/S 架构(Browser/Server,浏览器 / 服务器架构)

1. 核心组成

  • 浏览器:作为客户端,负责呈现精美的用户界面,接收用户输入的各种指令,如点击、输入文本等操作,并将这些请求通过 HTTP/HTTPS 协议发送给服务器。它无需用户在本地安装复杂的客户端软件,只要有浏览器,就可以使用相关应用,具有极强的便捷性。
  • 服务器:承担着处理浏览器发送请求的重任,执行复杂的业务逻辑,如数据计算、用户身份验证、订单处理等操作,并将处理后的结果返回给浏览器。服务器可以是 Web 服务器(如 Apache、Nginx)、应用服务器(如 Tomcat、WebLogic)等,根据不同的业务需求进行配置和部署。
  • 数据库:用于存储应用所需的各类数据,包括用户信息、业务数据、配置信息等。常见的数据库有关系型数据库(如 MySQL、Oracle)和非关系型数据库(如 MongoDB、Redis),数据库通过 SQL 或其他数据操作语言与服务器进行交互,为服务器提供数据支持和存储服务。

2. 特点

优势

  • 跨平台性:只要设备具备浏览器和网络连接,无论是 Windows、Mac、Linux 操作系统,还是手机、平板等移动设备,用户都能够使用应用,极大地扩大了应用的覆盖范围和使用场景。
  • 维护方便:所有的应用逻辑和更新都集中在服务器端进行,当需要对应用进行功能更新、修复漏洞或优化性能时,只需要在服务器上进行操作,用户无需手动升级客户端,大大降低了维护成本和难度。

⚠️ 局限

  • 依赖网络安全:由于数据传输依赖网络,若网络环境不安全,可能存在数据泄露、被篡改或遭受网络攻击的风险。例如,黑客可能通过网络监听获取用户的敏感信息。
  • 复杂功能性能受限:部分复杂功能,如图形渲染、本地资源访问等,其性能可能受限于浏览器的能力。一些对图形处理要求较高的应用,在浏览器中运行可能无法达到理想的效果。

其他常见架构

1. C/S 架构(Client/Server,客户端 / 服务器架构)

  • 模式:用户需要在本地计算机上安装专门的客户端软件,客户端负责处理部分业务逻辑,如数据验证、界面渲染等,并与服务器进行通信。服务器则处理核心业务逻辑和管理数据存储。客户端和服务器之间通过特定的协议(如 TCP/IP)进行数据交互。
  • 典型场景
  • 游戏:例如《英雄联盟》,客户端负责游戏画面的渲染、玩家操作的响应等,服务器则处理游戏逻辑、玩家匹配、数据存储等功能。通过这种架构,能够实现流畅的游戏体验和实时的玩家交互。
  • 专业设计软件:如 AutoCAD,客户端提供强大的图形绘制和编辑功能,服务器可以用于存储设计图纸、管理用户权限等。专业软件通常需要强大的本地计算能力,C/S 架构能够充分发挥本地计算机的性能优势。

2. P2P 架构(Peer-to-Peer,点对点架构)

  • 核心:采用去中心化的设计理念,网络中的每个节点(设备)既是客户端也是服务器,节点之间可以直接进行通信和资源共享,无需依赖中央服务器。节点之间通过分布式哈希表(DHT)等技术进行资源定位和数据传输。
  • 应用
  • 文件共享:BitTorrent 是典型的 P2P 文件共享应用,用户在下载文件时,同时也作为上传节点为其他用户提供文件片段,这种方式大大提高了文件传输的效率,减轻了服务器的压力。
  • 区块链网络:如比特币网络,每个节点都保存着完整的区块链账本,通过共识算法(如工作量证明)实现节点之间的数据一致性和安全性。区块链的去中心化特性使得其具有防篡改、可追溯等优势。

3. 微服务架构

  • 设计:将大型复杂的应用拆分为多个小型、独立的服务,每个服务都专注于单一的功能,如用户管理、订单处理、支付服务等。这些服务可以独立进行开发、测试、部署和扩展,服务之间通过轻量级的通信机制(如 RESTful API、gRPC)进行交互。
  • 优势
  • 技术栈灵活:不同的服务可以根据自身需求选择最适合的技术栈进行开发,例如,用户管理服务可以使用 Java 语言和 Spring Boot 框架,而支付服务可以使用 Python 语言和 Django 框架,提高了开发效率和技术的多样性。
  • 迭代速度快:由于每个服务相对独立,当需要对某个功能进行更新或添加新功能时,只需要对相关的服务进行修改和部署,不会影响其他服务的正常运行,加快了产品的迭代速度,能够更好地满足市场需求。

4. 分布式架构

  • 特性:将系统功能分散到多个物理节点上,这些节点通过网络进行协同工作,共同完成任务。分布式架构具有资源共享、可扩展性强和容错性好等特点。通过增加节点可以提升系统的处理能力和存储容量,当部分节点出现故障时,任务可以自动迁移到其他正常节点上,保证系统的持续运行。
  • 场景
  • 大数据处理:Hadoop 是一个典型的分布式大数据处理框架,它将数据分散存储在多个节点上,并通过分布式计算模型(如 MapReduce)对数据进行并行处理,能够高效地处理海量数据。
  • 云计算平台:如 AWS、阿里云等,通过分布式架构将计算资源、存储资源和网络资源进行整合和管理,为用户提供弹性的云计算服务,用户可以根据自己的需求动态地申请和释放资源。

5. 混合架构

  • 定义:结合多种架构的优势,根据业务需求灵活组合。例如,部分企业应用采用 “B/S 架构 + 本地客户端” 的混合模式,既通过浏览器提供通用的功能,方便用户在不同设备上访问,又通过本地客户端实现高性能的本地处理,如文件加密、离线操作等功能,充分发挥了不同架构的长处。

进一步拓展架构类型

1. MVC 架构(Model-View-Controller,模型 - 视图 - 控制器)

  • 架构原理:MVC 将软件应用分为三个核心部分。模型(Model)负责管理数据与业务逻辑,独立于用户界面;视图(View)用于展示数据,将模型中的数据以特定形式呈现给用户;控制器(Controller)则作为桥梁,接收用户输入,根据输入调用模型进行处理,并决定使用哪个视图展示结果 。
  • 应用场景:广泛应用于 Web 开发和桌面应用开发。例如,在 Java Web 开发中,Spring MVC 框架基于 MVC 模式,能高效实现业务逻辑与页面展示的分离;在 iOS 开发中,许多应用也采用 MVC 架构进行代码组织。
  • 优势与局限:优势在于实现了代码的高度解耦,便于团队分工协作,提高开发效率;可复用性强,同一模型能被多个视图使用。局限在于,随着项目复杂度增加,控制器可能变得臃肿,导致代码维护难度上升;数据流向相对复杂,调试时定位问题可能较困难。

2. MVVM 架构(Model-View-ViewModel,模型 - 视图 - 视图模型)

  • 架构原理:MVVM 在 MVC 基础上发展而来,引入了视图模型(ViewModel)。视图模型是连接视图和模型的桥梁,它通过数据绑定和命令绑定机制,自动将模型数据同步到视图,同时将视图的操作转化为对模型的操作。视图与视图模型之间的交互是双向的,大大简化了视图和模型之间的通信。
  • 应用场景:在前端开发中应用较多,如 Vue.js、Knockout.js 等框架都基于 MVVM 模式。以 Vue.js 开发的单页应用为例,开发者可以专注于数据和逻辑处理,框架会自动更新视图,提升开发效率。
  • 优势与局限:优势在于降低了视图和模型的耦合度,提高了代码的可维护性和可测试性;数据驱动视图的方式使得页面更新更加便捷。局限在于,对于简单应用,使用 MVVM 可能会增加代码复杂度;理解和掌握双向数据绑定等概念对初学者有一定难度。

3. SOA 架构(Service-Oriented Architecture,面向服务架构)

  • 架构原理:SOA 将应用程序功能拆分为独立的服务,这些服务通过标准的接口(如 Web Service)进行通信,服务之间具有松耦合性。每个服务可以独立开发、部署和维护,服务提供者和服务消费者通过网络进行交互。
  • 应用场景:常用于大型企业级应用集成。例如,企业内部多个不同部门的系统(如财务系统、人力资源系统)可以通过 SOA 架构进行整合,实现数据共享和业务协同。
  • 优势与局限:优势在于提高了系统的灵活性和可扩展性,便于新服务的添加和现有服务的修改;增强了系统的复用性,一个服务可以被多个应用调用。局限在于,服务接口的设计和管理较为复杂;分布式环境下的服务调用可能存在性能损耗和可靠性问题。

4. 事件驱动架构(Event-Driven Architecture,EDA)

  • 架构原理:基于事件进行系统设计,系统由事件生产者、事件消费者和事件代理(如消息队列)组成。当某个事件发生时,事件生产者发布事件到事件代理,事件消费者订阅感兴趣的事件,并在接收到事件后进行相应的处理。
  • 应用场景:适用于需要实时响应和异步处理的场景,如金融交易系统、物联网(IoT)应用。例如,在股票交易系统中,当股票价格变动、交易完成等事件发生时,系统能迅速做出响应并通知相关用户。
  • 优势与局限:优势在于具有良好的异步性和实时性,能够提高系统的响应速度和吞吐量;可扩展性强,方便添加新的事件处理逻辑。局限在于,事件的管理和监控较为复杂;事件顺序的控制和一致性保证存在一定挑战。

5. 云原生架构

  • 架构原理:基于云计算平台的特性进行设计,充分利用容器(如 Docker)、容器编排(如 Kubernetes)、微服务、服务网格等技术。容器技术实现了应用的标准化封装和快速部署,Kubernetes 用于自动化容器的部署、扩展和管理;微服务架构则将应用拆分为多个小型服务,服务网格用于管理服务之间的通信。
  • 应用场景:是现代互联网应用和企业数字化转型的主流架构。例如,许多互联网公司的在线业务都采用云原生架构,实现快速迭代和弹性伸缩,以应对不同时段的用户流量变化。
  • 优势与局限:优势在于能够充分利用云计算的弹性和资源利用率,提高应用的可扩展性和容错性;便于实现自动化运维和持续交付。局限在于,技术栈复杂,对开发和运维团队的要求较高;云服务的稳定性和安全性依赖于云提供商。

传统三层架构

1. 逻辑分层

  1. 表示层:负责与用户进行交互,呈现用户界面,接收用户输入,并将用户的操作请求传递给业务逻辑层。在 B/S 架构中,它对应浏览器端的网页界面;在 C/S 架构中,它对应本地客户端的图形界面。表示层注重用户体验和界面设计,使用 HTML、CSS、JavaScript 等技术实现美观、易用的用户界面。
  2. 业务逻辑层:是系统的核心层,处理具体的业务规则和逻辑判断,如订单处理流程、用户权限验证、数据计算等。它从表示层接收请求,调用数据访问层获取数据,进行业务处理后,将结果返回给表示层。业务逻辑层通常使用 Java、Python、C# 等编程语言和相关的框架进行开发。
  3. 数据访问层:主要负责与数据库进行交互,执行数据的增删改查操作。它为业务逻辑层提供统一的数据访问接口,隐藏了数据库的具体实现细节,使得业务逻辑层无需关心数据存储的具体方式。数据访问层可以使用 JDBC、ADO.NET等技术实现与数据库的连接和操作。

2. 特点

优势

  • 模块解耦:将系统按逻辑功能划分为三个独立层次,各层之间职责明确,降低了模块间的依赖关系。当某一层的实现发生变化时,只要接口保持不变,不会影响其他层的正常运行,提高了系统的稳定性和可维护性。
  • 可维护性高:由于各层独立开发和维护,开发人员可以专注于某一层的功能实现和优化。当系统出现问题时,也更容易定位和解决问题,例如,如果数据查询出现异常,可以直接检查数据访问层的代码。
  • 逻辑复用性强:业务逻辑层的功能可以被多个表示层复用,例如,一个电商系统的订单处理逻辑可以同时被 Web 端、App 端和小程序端使用,减少了重复开发,提高了开发效率。

⚠️ 局限

  • 单体应用扩展性差:在大型系统中,传统三层架构通常构建为单体应用,随着业务的不断增长和功能的不断增加,单体应用会变得越来越臃肿,部署和扩展变得困难。例如,当需要对某个功能进行扩展时,可能需要对整个应用进行重新部署,影响系统的可用性。
  • 层间交互影响性能:各层之间通过接口进行通信,若设计不当,可能会导致多次跨层的数据调用,增加系统的开销,影响响应速度。例如,业务逻辑层频繁调用数据访问层获取数据,会造成性能瓶颈。

架构对比总结

分类维度代表架构核心关注点典型应用
部署交互模式B/S、C/S、P2P客户端与服务器通信方式网页应用、桌面游戏
逻辑功能分层三层架构、MVC/MVVM软件模块职责划分Java EE 系统、Web 开发框架
系统架构模式微服务、分布式、混合系统物理拆分与协同电商平台、大数据计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值