1.架构设计系列:什么是架构设计

概要

在这里插入图片描述

背景

  • 业务千变万化,技术不断涌现,我们很难找到一套通用的架构模式适用于所有系统。
  • 那么,在面对"不确定性"时,我们应如何进行架构设计,以实现系统的稳定性和可靠性呢?
  • 本文基于个人实践经验和业界专家分享,概括了一些关于架构设计的简明理解。
  • 如果有不妥之处,请随时指出,我将及时进行修正。

架构设计是什么?

架构设计,就是对系统结构进行设计。

那么,系统结构是什么呢?它包括子系统、模块、组件,以及他们之间的协作关系。

架构设计是经过系统性地思考,权衡利弊之后,在现有资源约束下的最合理决策。

架构设计为开发团队提供了一个指导框架,确保系统在不断变化的环境中,能够保持稳定和可靠。


为什么要做架构设计?

我们先来回答一个问题:如果一个系统或业务足够简单,有必要做架构设计吗?

答案很显然:没有必要。

我们再来回答一个问题:什么情况下需要做架构设计呢?

基于上一个问题,我很容易得出答案:一定的复杂性。

复杂性的表现形式有哪些?

  • 变更放大: 看似简单的变更需要在许多不同地方进行代码修改。
  • 认知负荷: 开发人员需要多少知识才能完成一项任务。一个复杂系统,如果部署简单,架构清晰,其实都是降低完成任务所需的成本。
  • 未知的未知: 开发人员必须获得哪些信息才能成功地执行任务。你不知道改动的这行代码是否能让程序正常运转,也不知道这行代码的改动是否又会引发新的问题,这时“未知的未知”就出现了。这也是复杂性中最糟糕的一个表现形式。

复杂性具体体现在哪里?
一般来说,复杂体现在两个方面:业务复杂度和技术复杂度

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

技术复杂度,指技术固有的复杂度,主要体现为编码难度大技术能力要求高需运用大量技巧去实现
例如,高性能、高可用、高可扩展、安全,以及与成本之间的平衡,等等。

如何应对架构复杂度?

复杂度等级业务复杂度技术复杂度架构模式
1框架,如 LAMP、SpringBoot、SpringCloud等
2DDD、SOA、微服务等
3集群、缓存、分片、副本等
4融合所有模式

一个复杂系统,随着迭代会逐渐腐化,我们可以通过架构设计让系统变得相对简洁和清晰,从而更容易被理解和扩展。

那么,复杂度它会消失吗?

并不会,因为复杂度无法消除,它只能被转移。它还是存在于某个地方。

因此,我们可以得出结论:架构设计的真正目的,是为了解决系统复杂度带来的问题

简而言之,架构设计本质上就是控制复杂度


架构设计的核心要素是什么?

《大型网站技术架构》一书中,提出系统设计的五要素。

其实,在架构设计的过程中,还有一个要素需要考虑,那就是成本。这样就形成了架构设计的六要素。

  • 性能
  • 可用性
  • 扩展性
  • 伸缩性
  • 安全性
  • 成本

一个好的架构设计,要在实现高性能、高可用的同时,满足低成本的目标。

而低成本不是目标,低成本是实现高性能、高可用的一个约束。

这里需要对扩展性和伸缩性做一下说明,因为很多人会把他们当做一回事,但其实他们的侧重点是不同的。

  • 扩展性,核心在于系统适应变化的能力,包含可理解和可复用两个部分。
  • 伸缩性,核心在于系统通过添加更多资源来提升性能的能力。

架构设计的常见场景有哪些?

在日常工作中,这三种场景可以覆盖80%的架构设计场景。

  • 可扩展架构
  • 高性能架构
  • 高可用架构

本系列后续的章节,将重点围绕这三个架构设计场景进行介绍。


常见的架构类型有哪些?

一般有如下几种常见的架构类型。

业务架构

  • 业务架构是战略。
  • 核心逻辑是,通过拆解业务战略,进行领域模型设计,把现实的业务转化为抽象的对象,来解决功能性需求。
  • 包括当前能力,未来能力,业务模块,业务流程等。上接公司战略,下接技术实施。

应用架构

  • 应用架构是战术。
  • 核心逻辑是,通过分层和模块划分,确定系统的边界、交互和关系,平衡业务和技术复杂性,确保业务架构落地。
  • 包括定义子系统或模块,以及系统之间的交互等。

数据架构

  • 数据架构是粮草。
  • 核心逻辑是,通过制定数据标准,建立数据模型,管理数据分布等方式,为应用架构提供支撑。
  • 包括表结构设计(ER图),表到实体模型的转换设计,以及技术架构中的数据库选型,和部署架构中的数据存储设计(灾备,主从等)。

技术架构

  • 技术架构是装备。
  • 核心逻辑是,通过选择和组合各种软件和硬件,再结合应用代码,来解决非功能性需求。
  • 包括IT基础设施、中间件、网络、部署到硬件的策略等。
  • 技术架构是架构设计工作中最难的部分。

物理架构

  • 物理架构是战场。
  • 核心逻辑是,通过选择合适的硬件,定义硬件的分布,定义软件到硬件的映射,定义数据如何在硬件上保存和传递的,以及考虑软件和硬件的相互影响,为业务、应用、数据、技术这4种架构提供支撑。
  • 包括物理机器,网络,存储,硬件设施等。
  • 物理架构分为拓扑架构和部署架构。
  • 拓扑架构主要指网络拓扑图,主要关注对象是运维。
  • 部署架构主要指系统或模块在不同的物理设备上是如何分布的。

架构设计系列文章

  1. 架构设计系列:什么是架构设计
  2. 架构设计系列:几个常用的架构设计原则
  3. 架构设计系列:高并发系统的设计目标
  4. 架构设计系列:如何设计可扩展架构
  5. 架构设计系列:如何设计高性能架构
  6. 架构设计系列:如何设计高可用架构
  7. 架构设计系列:如何应对软件变化
  8. 架构设计系列:常用设计模式的实践

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot是一个用于构建独立的、生产级别的Java应用程序的框架。它基于Spring框架,简化了Spring应用程序的配置和部署过程,提供了一种快速开发的方式。 Spring Boot的系统架构设计主要包括以下几个关键组件: 1. 核心容器:Spring Boot的核心容器是基于Spring框架的IoC(控制反转)和DI(依赖注入)机制实现的。它负责管理和组织应用程序中的各个组件,包括控制器、服务、数据访问对象等。 2. 自动配置:Spring Boot通过自动配置机制,根据应用程序的依赖和配置信息,自动配置各个组件的行为。这样可以大大减少开发人员的配置工作,提高开发效率。 3. 起步依赖:Spring Boot提供了一系列预定义的起步依赖,可以方便地引入常用的功能模块,如数据库访问、Web开发、安全认证等。开发人员只需引入相应的起步依赖,即可快速集成相关功能。 4. 嵌入式Web服务器:Spring Boot内置了多种嵌入式Web服务器,如Tomcat、Jetty等。开发人员无需手动配置和部署外部Web服务器,可以直接使用内置的Web服务器进行开发和测试。 5. 外部化配置:Spring Boot支持将应用程序的配置信息外部化,可以通过属性文件、YAML文件、环境变量等方式进行配置。这样可以使应用程序的配置更加灵活,便于在不同环境中进行部署和管理。 6. 监控和管理:Spring Boot提供了丰富的监控和管理功能,如健康检查、指标收集、日志管理等。这些功能可以帮助开发人员更好地了解应用程序的运行状态,并进行故障排查和性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白云coy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值