首页 > 其他分享 >软件架构的定义与分类

软件架构的定义与分类

时间:2023-02-23 23:02:00浏览次数:39  
标签:功能 架构 定义 分类 业务 软件架构 模块 电商 软件系统

软件架构(Software Architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。

通俗地来讲,技术架构就是对软件系统各个维度进行不同模块化的抽象,通过抽象使原本复杂的工程变得易于理解和分工实现。就像泰勒提出的科学管理,通过标准化的作业流程和分工,原本混沌复杂的软件工程被拆分出前端、后端、质量、运维等多个岗位。以后端为例,根据不同的岗位职责,按照康威定律又被拆分出不同的组织,比如订单组、用户组、交易组等,进而使整体的生产力大大提升。因此,架构的本质是抽象分类,进而指导软件系统的实现。

通常好的架构要能够支持高并发、高可用、高扩展。这些都是架构设计中应该关注的特性。除此之外,好的架构还应该关注如下特性。

  • 可用性和可靠性。由于软件系统对于用户的商业经营和管理来说极为重要,因此软件系统必须非常可靠。可用性和可靠性虽然是两个不同的属性,但本质都是为了提升业务连续性,使企业的业务尽可能不中断。
  • 高性能。高性能体现了架构在同样的物理配置下的业务支撑能力,更高的吞吐量、更低的响应时间意味着对用户更快速地响应。
  • 易维护性。软件系统的维护包括两方面,一是排除现有的错误,二是将新的软件需求反映给现有系统。一个易于维护的系统可以有效降低技术支持的费用。
  • 可扩展性。市场和用户总是在不断变化的,为了适应业务的高速迭代,尤其是一些2B企业的个性化需求,架构要求能够在最小的改动成本下满足更多的需求。这要求架构可以根据客户群的不同和市场需求的变化进行调整。
  • 安全性。随着《个人信息保护法》和《数据安全法》的出台,信息安全已经成为架构设计中最重要的因素,安全合规不容小觑。

常听到各种关于架构的名词,比如业务架构、功能架构、应用架构、技术架构、物理架构等,这里简单梳理一下这几个架构的区别。

  1. 业务架构

业务架构一般是指业务的关键流程、组织形式、信息流。以电商为例,业务架构包括选品、采购、仓储、物流、供应商、订单等一系列的业务版块。业务架构体现的主要是业务模式和流程,核心是定义业务痛点,厘清功能需求和非功能性需求。

  1. 功能架构

功能架构一般是指产品具备的细分功能。例如,电商系统的功能架构可细分为用户管理、登录注册、商品管理、仓库管理、订单管理、购物车管理、支付管理等核心模块。功能架构图体现的是一个产品的核心功能模块。

  1. 应用架构

应用架构一般是指根据业务场景设计出应用的层次结构,制定好应用间的调用、交互方式,确保它们能够融合在一起并满足业务需要。比如,电商系统的应用架构可能有用户中心、权限中心、登录系统、商品中心、搜索引擎、推荐体系、订单系统、交易系统等。应用架构体现的是用什么样的微服务去支持功能的实现。

  1. 技术架构

技术架构一般是指实现应用架构的关键技术栈,如Spring Cloud、ZooKeeper、RocketMQ、Redis、MySQL、Elasticsearch等中间件,以及各种核心流程的时序图、状态图等信息。

  1. 物理架构

物理架构一般是指从物理视角来看IDC中的物理拓扑关系,如防火墙、Nginx、网络、应用服务器、数据库间的调用和数据流转关系。物理架构关注的是如何通过硬件配置硬件和网络来配合软件系统达到可靠性、高可用性、性能、安全性等方面的要求。

除了以上大家耳熟能详的架构分类,还有很多与架构相关的名词,如下所示。

  • 框架(Framework):通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,往往是基于一组类库或工具,在特定领域里根据一定的规则组合而成。
  • 组件(Component):一组可以复用的业务功能的集合,包含一些对象及其行为。组件可以直接用作业务系统的组成部分,颗粒度一般小于模块,也是一种功能的聚合形式,比如日志组件、权限组件等。
  • 模块(Module):基于业务数据或一组相关功能按照特定维度的逻辑划分,也可以看作各种功能按照某种分类的聚合。例如,电商系统可以从业务上划分为用户模块、商品模块、订单模块、支付模块、物流模块等。模块使一个复杂的软件变得更加容易管理和维护。
  • 服务(Service):一组对外提供业务处理能力的功能,服务需要使用明确的接口方式(比如Web Service、RESTful等)。服务描述里应该包括约束和策略(比如参数、返回值、通信协议、数据格式等)。
  • 平台(Platform):一般来说,是一个领域或方向上的生态系统,是很多解决方案的集大成者,提供了很多服务、接口、规范、标准、功能、工具等。

标签:功能,架构,定义,分类,业务,软件架构,模块,电商,软件系统
From: https://blog.51cto.com/key3feng/6082016

相关文章

  • 49.接口的定义
    1.抽象基类和纯虚函数在设计时,常常希望基类仅仅作为其派生类的一个接口。这就是说,仅想对基类进行向上类型转换,使用它的接口,而不希望用户实际的创建一个基类的对象。同......
  • Nano SIM 卡引脚定义//京鸿通信科技(深圳)有限公司 www.kyohoon.com 15507589165
    前言想做个接口板,将第三方的4G模块接进来.先查了下SIM卡的引脚定义,这样就可以将硬件接口先定下来,板子可以分开作。  作为接口板,只需要引出以下引脚:电源接口VCC/GN......
  • 多分类问题
    多分类问题我们已经学习过二分类的问题,但是在生活中有很多场景,目标输出并不仅仅只有两种。例如手写数字的识别,数字不只有0和1两种,还有2、3、4、5、6、7、8、9,那我们就需要......
  • Nginx生成自定义证书
    1、创建存放证书的目录,此目录可自定义cd/usr/local/nginx/conf/cretmkdirkeycdkey先安装依赖包yum-yinstallporc-develzlib-develpopt-developenssl-developen......
  • 自定义属性访问
    什么是属性?下面的例子a和b是属性吗?不是,他们是全局变量,属性(attribute)是类中的成员变量,也可以理解为属性就是类变量。pythona=11234b='python'PYTHON复制全屏类中......
  • 人脉资源划分标准和分类方法
    人脉资源有很多种不同的划分标准和分类方法。下面介绍比较常见的几种。人脉资源按照其形成的过程可以分为:血缘人脉、地缘人脉、学缘人脉、事缘人脉、客缘人脉、......
  • Vue3自定义指令
    Vue3自定义指令自定义指令的定义:自定义指令是用来操作DOM的,尽管vue推崇数据驱动视图的理念,但并非所有情况都适合数据驱动。自定义指令就是一种有效的补充和拓展,不仅仅......
  • fusion app自定义事件源码介绍(下)
    安装apk安装APK(filePath)lua源码function安装APK(filePath)localintent=Intent(Intent.ACTION_VIEW);intent.addCategory("android.intent.category.DEFAU......
  • 利用SpringBoot自动装配原理自定义starter
    在使用SpringBoot时候我们经常会碰到引入很多的starter的自动化配置,有了这些starter以后我们就可以很轻松的完成一个企业级的开发项目,很多小朋友就会对于starter很神奇,其实......
  • css的分类
    资料来源于:B站尚硅谷JavaWeb教程(全新技术栈,全程实战),本人才疏学浅,记录其笔记以供他日回顾视频链接本文总结<!--1.为什么需要CSS2.CSS的最基本的分类:标签样式......