沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 设计须知

    • 命名规范
    • 聊聊什么是耦合度
    • 幂等性问题分析
    • LocalDateTime和DateTime
    • 聊聊软件架构设计
      • 一、核心定义
      • 二、核心区别
      • 三、核心联系
      • 四、适用场景对比
      • 五、典型问题与挑战
      • 总结
    • 说说war和jar的区别
    • 那些关于管理系统的知识
    • 唯一索引和逻辑删除冲突解决方法
    • 日志记录相关
  • UML画图

  • 权限校验

  • 设计模式

  • 系统设计
  • 设计须知
沉梦听雨
2025-05-29
目录

聊聊软件架构设计

# 聊聊软件架构设计

单体架构、微服务架构和分布式系统是软件开发中常见的架构模式,三者在设计理念、应用场景和实现方式上有显著区别,但也存在紧密联系。

以下从定义、区别、联系和适用场景进行解析:

# 一、核心定义

  1. 单体架构(Monolithic)

    • 定义:将所有功能模块(如用户管理、订单处理、支付等)集中在一个代码库中,统一部署为一个独立进程。
    • 特点:简单直接,开发、测试和部署成本低,适合小型项目或初期原型开发。
    • 示例:传统的 Java Web 应用(Spring MVC + MySQL),所有代码打包成一个 WAR 文件部署在 Tomcat 中。(这是传统的情况,基本废弃)
  2. 微服务架构(Microservices)

    • 定义:将单一应用拆分为多个小型服务,每个服务独立开发、部署和运行,通过轻量级通信(如HTTP/gRPC)协作。
    • 特点:高内聚、低耦合,支持技术异构性,适合复杂业务和快速迭代需求。
    • 示例:电商平台拆分为订单服务、用户服务、库存服务等,每个服务独立运行。
  3. 分布式系统(Distributed System)

    • 定义:多个物理或虚拟节点通过网络协作完成任务,对外表现为单一整体。服务/组件可跨节点部署。
    • 特点:高可用性、横向扩展能力强,需解决网络延迟、数据一致性等问题。
    • 示例:微服务集群部署在多个服务器上,或使用 Kubernetes 进行容器编排。

# 二、核心区别

维度 单体架构 微服务架构 分布式系统
部署方式 单一进程/服务 多个独立服务 多节点协同(服务/数据分散)
通信机制 内部函数调用 HTTP/gRPC/消息队列(跨服务) 节点间网络通信(可能跨地域)
复杂度 低 高(需治理服务依赖) 极高(需处理网络分区、一致性)
扩展性 纵向扩展(升级硬件) 按服务独立扩展 横向扩展(弹性扩容)
容错性 单点故障影响全局 故障隔离,局部影响 容错设计复杂(如副本机制)
开发效率 初期快,后期维护难 团队可并行开发 依赖基础设施(如CI/CD、监控)

# 三、核心联系

  1. 微服务与分布式的关系:

    • 微服务是分布式系统的一种实现形式,但并非所有分布式系统都是微服务。
    • 微服务强调服务拆分和独立性,而分布式更侧重节点间的协作和数据分布。
    • 示例:微服务集群部署在多个服务器(分布式);传统单体应用通过负载均衡集群部署(分布式但非微服务)。
  2. 单体与微服务/分布式的演进:

    • 单体架构是起点,随着业务复杂度增加,可能演进为微服务,最终形成分布式系统。
    • 演进路径:单体 → 模块化单体 → 微服务(进程级拆分) → 分布式集群。
  3. 技术依赖:

    • 微服务常用分布式技术(如服务发现、配置中心),但分布式系统可能不涉及服务拆分(如 Hadoop 大数据集群)。

# 四、适用场景对比

场景 推荐架构 原因
初创项目或小型系统 单体架构 快速开发、低成本,避免过度设计
中大型复杂业务系统 微服务架构 按业务解耦,支持独立迭代,适应快速变化
高并发、高可用需求 分布式系统 横向扩展、容灾备份(如全球部署的电商、社交平台)
大数据处理 分布式系统(非微服务) Hadoop/Spark 等框架通过分布式计算处理海量数据

# 五、典型问题与挑战

  • 单体架构:代码臃肿、技术栈固化、扩展受限。
  • 微服务架构:服务治理(如注册发现、熔断)、数据一致性(分布式事务)、调试复杂。
  • 分布式系统:CAP 权衡(一致性/可用性/分区容忍)、网络延迟、运维成本。

CAP 理论是分布式系统设计中的一个基础概念,它指出任何分布式系统最多只能同时满足以下三个特性中的两个:

  1. 一致性(Consistency):每个读操作都能获取到最新写入的数据。换句话说,在分布式系统中进行数据读取时,所有节点上获取到的数据都是最新的、一致的。
  2. 可用性(Availability):系统服务一直保持可用状态,对于用户的每一个操作请求,系统总能在有限时间内返回结果。即使部分节点失效,系统仍然能够处理客户端的请求。
  3. 分区容忍性(Partition Tolerance):即使网络分区发生(即系统被分割成多个无法互相通信的部分),系统仍能继续运行。这意味着系统能够在网络故障或延迟的情况下继续提供服务。

CAP 理论表明,在设计分布式系统时,必须在这三个属性之间做出权衡,因为不可能同时完全满足这三者。例如:

  • 如果一个系统选择了保证一致性和可用性,那么在网络分区发生时,可能无法确保系统的正常运作。
  • 如果选择了一致性和分区容忍性,则在网络分区情况下,为了保证数据的一致性,系统可能需要牺牲某些节点的可用性。
  • 若选择了可用性和分区容忍性,系统可以在网络分区时继续运行并处理请求,但可能无法保证所有节点上的数据是一致的,直到网络恢复并且数据同步完成。

# 总结

  • 单体是基础,适合简单场景;微服务是解耦利器,但需承担复杂度;分布式是规模化手段,需解决分布式难题。
  • 实际中三者常融合:例如微服务通过分布式集群部署实现高可用,单体应用通过分布式缓存提升性能。

选择架构需结合业务规模、团队能力和技术目标,避免盲目追求“先进架构”。

上次更新: 2025/5/30 17:49:49
LocalDateTime和DateTime
说说war和jar的区别

← LocalDateTime和DateTime 说说war和jar的区别→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式