一文看懂什么是架构?

文摘   2025-01-01 19:56   浙江  
欢迎点击下方👇🏻关注记得星标哟~
文末有惊喜~

大家好,我是汤师爷~

什么是架构?

要成为一名优秀的架构师,深入理解架构概念至关重要。这不仅需要表面认知,更需要全面、精准的把握。

如果对架构的理解模糊或有偏差,在设计和实施架构方案时就可能出现诸多问题,如系统性能差、可扩展性受限、维护困难等。从长远来看,这不仅会影响项目成功,还会阻碍个人职业发展,比如晋升受阻、面试表现不佳,以及在团队领导时难以有效指导和决策。

因此,建立对架构清晰、准确、全面的认知,既是成为优秀架构师的基石,也是推动项目成功和个人发展的关键。

我们先看下维基百科关于架构的定义:

软件架构是对系统结构的抽象描述,以及构建这些结构所遵循的原则。这些结构包含软件元素、元素间的关系及其属性。

从这个定义中,我们可以提炼出几个关键词:系统、元素、关系和原则。

  • • 系统:由多个部分组成的整体。这些部分通过精心设计的交互方式,共同完成特定的功能或任务。理解系统的组成结构是设计高效、可扩展、易维护软件系统的基础。

  • • 元素:构成软件系统架构的基本单元,如子系统、模块、组件等。

  • • 关系:系统中各个元素之间的连接和交互方式,定义了元素如何协作以实现系统功能。

  • • 原则:指导架构设计和实施的基本准则,确保系统设计符合最佳实践,满足业务需求,并保持长期的可维护性和可扩展性。

让我们通过一个零售系统的具体案例,来深入理解这些重要概念。通过分析其架构设计,我们能清楚地看到这些核心要素在实际应用中的体现:

  • • 零售系统包含多个核心子系统:基础数据、商品管理、库存管理、线上商城、POS收银、订单履约、仓储管理、配送管理、客户运营、采购和客服。

  • • 以订单履约系统为例,它可进一步细分为履约服务表达、订单派单、订单管理、拣货管理、发货管理和逆向履约模块。

  • • 这些子系统、模块和组件通过协作完成系统功能。比如,线上商城子系统需要调用商品子系统的服务能力,来展示商品信息。

  • • 在架构原则方面,整体架构应遵循简单、合适和演进原则。同时,代码开发需要遵循一系列设计原则:单一职责、开闭、里氏替换、最少知识、接口隔离和依赖倒置原则。

架构设计的目的

架构设计的误区

对于架构设计,许多人存在误解。

有人认为架构很重要,因此每个项目都必须进行架构设计。然而,事实是许多创业公司的初期产品,即使没有精心设计的架构也能正常运行。过分强调架构设计可能会增加大量的研发成本,却无法带来相应的回报。

另一个误解是认为架构设计必定能提高研发效率。实际上,简单的设计往往更加高效。架构设计需要投入大量时间和资源,这些资源如果用于直接开发,项目反而会更快完成。

第三个误区是盲目效仿大厂,认为既然大厂的项目都会做架构设计,考虑高并发、高性能、高可用等场景,那我们也应该这样做。

由于大厂的成功,许多公司高薪聘请大厂的技术专家。在做架构设计时,最常听到的论据就是"阿里是这么做的"、"腾讯是这么做的"。

虽然大公司的经验和成功模式值得借鉴,但照搬大厂架构可能会使系统过于复杂,不仅难以实施和维护,还会影响团队协作效率和系统稳定性。

不做架构设计,会有什么问题?

如果不需要做架构设计,可能意味着你的系统还不够复杂。

随着业务增长,系统通常会从单体应用演变为分布式应用。系统日益复杂,技术团队也会分化为多个专职的团队,各自负责和维护一部分系统应用。

如果缺乏架构设计,系统会迅速陷入混乱,出现以下问题:

  • • 应用边界模糊:开发人员可能会随意拆分应用,而不是基于实际业务需求。由于缺乏明确的拆分原则和规范,应用数量会疯狂增加,系统会陷入无序状态,严重降低开发效率。

  • • 缺乏模块化设计:所有功能代码混杂在一起,没有清晰的模块划分。即使是小改动也会牵一发动全身,产生意外bug,后续修改和扩展变得极其困难。

  • • 团队协作效率低:没有明确的架构设计,团队成员无法快速理解各自的工作边界和依赖关系,导致大量频繁无效的沟通成本,影响开发进度和项目交付。

  • • 技术标准失控:由于缺乏架构标准和原则,开发人员可能盲目追求新技术,却未能深入理解。这不仅导致问题难以快速定位和修复,还会让团队疲于应对。同时,不同开发团队使用不同技术组件,造成公司技术栈混乱,无法形成高效的最佳实践经验。

架构设计的目的是什么?

架构设计的目的是解决系统复杂度带来的挑战。

通过合理的架构设计,我们可以有序地重构系统,降低系统的"熵值",推动系统持续演进,从而提升软件质量和研发效率。

虽然这个结论很简单,但理解了架构设计的核心目的后,我们就能准确判断什么时候需要进行架构设计。我们可以将核心目标归纳为以下四点:

1、需求相对复杂

在需求复杂的场景下,系统通常涉及多个业务领域的功能和数据处理。架构设计帮助我们理清各业务领域的核心元素和相互关系,明确各部分职责,从而确保系统具有良好的扩展性和可维护性。

2、满足非功能性需求

系统不仅要满足业务需求,还需要考虑多项非功能性需求,如性能、安全性、可用性和可伸缩性等。以大型电商系统为例,为了确保系统在访问高峰期能够高效运行,在架构设计方面,通常会采用负载均衡、缓存和读写分离等架构方案。

3、系统生命周期长

对于长期运行和发展的系统,随着时间推移容易累积大量功能,这会导致代码臃肿且难以扩展。新功能的迭代效率也会逐渐降低。因此,架构设计时需要充分考虑未来的变化,包括功能迭代效率和业务增长带来的技术挑战等因素。

4、业务变革的需要

重大的业务变革往往会直接影响系统整体架构。例如,某SaaS产品从电商业务扩展到零售业务时,通常需要整合线下门店业务、调整业务流程并更新产品功能。架构设计必须确保这些新功能能够无缝集成到现有系统中,同时保持系统的稳定性和扩展性。

对了,基于我10多年的架构经验,精心整理了一套 超全的架构学习路线求职面试、职场晋升都能用到。
需要的同学,加我微信,备注【架构资料】,免费获取!

··············  END  ··············

你好,我是汤师爷,南京大学硕士,曾就职于华为、阿里,创业公司CTO,现大厂资深架构师,Qcon/IAS/A2M大会特邀讲师。日常分享AI工具,架构干货,高质量资料,欢迎围观。


近期文章精选:

一文搞懂SaaS业务架构:价值流、业务能力、业务流程、业务对象、组织架构
一文搞懂SaaS应用架构:应用服务、应用结构、应用交互设计
吊打面试官!全网最全多租户系统设计方案
权限系统:一文搞懂功能权限、数据权限

欢迎把文章分享至朋友圈
点赞、在看是对我最大的支持
↘↘↘

架构师汤师爷
南京大学硕士,曾就职于华为、阿里,创业公司CTO,现大厂资深架构师,Qcon/IAS/A2M大会特邀讲师。日常分享AI编程、系统架构、AI工具。
 最新文章