如何深度理解整体架构设计?

2023-11-04

一. 什么是架构和架构本质

       在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论架构的概念定义,概念是人认识这个世界的基础,并用来沟通的手段,如果对架构概念理解不一样,那沟通起来自然不顺畅。
       Linux有架构,MySQL有架构,JVM也有架构,使用Java开发、MySQL存储、跑在Linux上的业务系统也有架构,应该关注哪一个?想要清楚以上问题需要梳理几个有关系又相似的概念:系统与子系统、模块与组建、框架与架构。

1.1. 系统与子系统

       系统:泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能独立完成的工作能力的群体。
       子系统:也是由一群关联的个体组成的系统,多半是在更大的系统中的一部分。

1.2. 模块与组件

       都是系统的组成部分,从不同角度拆分系统而已。模块是逻辑单元,组件是物理单元。
       模块就是从逻辑上将系统分解, 即分而治之, 将复杂问题简单化。模块的粒度可大可小, 可以是系统,几个子系统、某个服务,函数, 类,方 法、 功能块等等。
       组件可以包括应用服务、数据库、网络、物理机、还可以包括MQ、容器、Nginx等技术组件。

1.3. 框架与架构

       框架是组件实现的规范,例如:MVC、MVP、MVVM等,是提供基础功能的产品,例如开源框架:Ruby on Rails、Spring、Laravel、Django等,这是可以拿来直接使用或者在此基础上二次开发。
       框架是规范,架构是结构。我在这重新定义架构:软件架构指软件系统的顶层结构。
       架构是经过系统性地思考, 权衡利弊之后在现有资源约束下的最合理决策, 最终明确的系统骨架: 包括子系统, 模块, 组件. 以及他们之间协作关系, 约束规范, 指导原则.并由它来指导团队中的每个人思想层面上的一致。涉及四方面:

  • 系统性思考的合理决策:比如技术选型、解决方案等。
  • 明确的系统骨架:明确系统有哪些部分组成。
  • 系统协作关系:各个组成部分如何协作来实现业务请求。
  • 约束规范和指导原则:保证系统有序,高效、稳定运行。

       因此架构师具备能力:理解业务,全局把控,选择合适技术,解决关键问题、指导研发落地实施。架构的本质就是对系统进行有序化地重构以致符合当前业务的发展,并可以快速扩展。
       那什么样的系统要考虑做架构设计 技术不会平白无故的出和自驱动发展起来,而架构的发展和需求是基于业务的驱动。架构设计完全是为了业务:

  • 需求相对复杂
  • 非功能性需求在整个系统占据重要位置.
  • 系统生命周期长,有扩展性需求.
  • 系统基于组件或者集成的需要.
  • 业务流程再造的需要.

二. 架构分层和分类

       架构分类可细分为业务架构、应用架构、技术架构, 代码架构, 部署架构。
在这里插入图片描述
       业务架构是战略,应用架构是战术,技术架构是装备。其中应用架构承上启下,一方面承接业务架构的落地,另一方面影响技术选型。
       熟悉业务,形成业务架构,根据业务架构,做出相应的应用架构,最后技术架构落地实施。
       如何针对当前需求,选择合适的应用架构,如何面向未来,保证架构平滑过渡,这个是软件开发者,特别是架构师,都需要深入思考的问题。

2.1. 业务架构(俯视架构)

       包括业务规划,业务模块、业务流程,对整个系统的业务进行拆分,对领域模型进行设计,把现实的业务转化成抽象对象。
       没有最优的架构,只有最合适的架构,一切系统设计原则都要以解决业务问题为最终目标,脱离实际业务的技术情怀架构往往会给系统带入大坑,任何不基于业务做异想天开的架构都是耍流氓。
       所有问题的前提要搞清楚我们今天面临的业务量有多大,增长走势是什么样,而且解决高并发的过程,一定是一个循序渐进逐步的过程。合理的架构能够提前预见业务发展1~2年为宜。这样可以付出较为合理的代价换来真正达到技术引领业务成长的效果。
       看看京东业务架构(网上分享图)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何深度理解整体架构设计? 的相关文章

随机推荐

  • JavaScript代码是怎么执行的?

    前言 众所周知 JavaScript是单线程语言 所以JavaScript是按顺序执行的 先编译再执行 变量提升 请看下面的例子 console log cat catName Chloe var cat Chloe function ca
  • 高级程序员解决问题的思维模式和普通程序员的区别在哪里?

    作者主页 士别三日wyx 先给你出一道题 看你会如何思考 假设你是一个程序员 常年保持自学和超长工作时长的状态 承受着不为人知的压力和痛苦 面对同行程序员的攀比和压力 在公司title 年薪 房子之间深陷 35岁大限越来越近 头顶日愈清凉
  • 2022年同济大学计算机考研复试分数线

    同济大学属于34所自划线院校之一 考研复试分数线分国家线和院校自划线 院校自划线公布时间一般早于国家线 报考同济大学计算机研究生的考生 复试分数线请以院校官网公布的分数线为准 2021年同济大学计算机考研复试分数线公布日期在3月13日 预计
  • ubuntu 22 安装elasticsearch

    安装说明 在 Ubuntu 上安装 Elasticsearch DEB 文件的过程与上面提到的大致相同 你可以按照以下步骤进行操作 1 首先 打开终端 并进入包含 Elasticsearch DEB 文件的目录 cd home userna
  • Unity Color Space

    这一周都在看Unity的Color Space相关的内容 看明白了 写下来给自己和他们参考 有不对的地方欢迎指正 显示器所能显示的颜色很有限 于是业界出了sRGB颜色空间 Photo Shop默认的颜色空间就是这个 照相机不用这个 用别的
  • MySQL索引常见面试题(2022版)

    目录 为什么要建立索引 哪些情况适合建立索引 哪些情况下不适合建索引 为什么索引是使用B 树 重点 索引分为那几类 什么是聚簇索引 重点 使用聚簇索引的优缺点 知道 为什么推荐使用自增主键作为索引 知道 什么叫回表 重点 什么叫索引覆盖 重
  • ElasticSearch6.x 之映射参数

    本文转载至https blog csdn net chengyuqiang article details 79059958 映射参数概述 ElasticSearch提供了丰富的映射参数 官网地址 https www elastic co
  • CP340/CP341基于ASCII驱动协议的多站点轮询

    西门子SIMATIC S7系列串行通信模块 包括CP340 CP341 CP440 1 CP441 1 2 CPU313C 314C 2PtP以及ET200S的1SI 3964 ASCII等 都支持ASCII驱动协议的通信 可以广泛地用于与
  • Windows 10 如何添加开机启动项

    1 按下win R调出运行窗口 并输入 shell startup 即可进入开机启动文件夹 2 开机启动文件夹如图所示 此时文件夹中内容为空 3 如果想要添加启动项 可以将软件快捷方式移入开机启动文件夹中 4 我们可以在任务管理器中查看是否
  • Ubuntu 设置开机直接进入桌面

    使用autologin user 在 usr share lightdm lightdm conf d 60 lightdm gtk greeter conf 文件中添加一行指定您的用户名 例如 SeatDefaults greeter s
  • DTW 笔记: Dynamic Time Warping 动态时间规整 (&DTW的python实现) 【DDTW,WDTW】

    0 总述 DTW可以计算两个时间序列的相似度 尤其适用于不同长度 不同节奏的时间序列 比如不同的人读同一个词的音频序列 DTW将自动扭曲 warping 时间序列 即在时间轴上进行局部的缩放 使得两个序列的形态尽可能的一致 得到最大可能的相
  • rxjs angular_Angular和RxJS:添加REST API后端

    rxjs angular 本文是SitePoint Angular 2 教程的第3部分 该教程介绍如何使用Angular CLI创建CRUD应用程序 在本文中 我们将更新我们的应用程序以与REST API后端进行通信 更喜欢使用分步视频课程
  • Java 线程的生命周期(对应七大状态)

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 线程的生命周期 线程状态的转换 通过代码输出线程的状态 代码如下 public class ThreadState public sta
  • win10c语言安装未响应,电脑卡死程序未响应的解决方法步骤详解

    我们使用电脑的时候不可避免的会出现应用程序无响应 电脑和死机了差不多 应用程序不可以正常工作 那么电脑卡死出现应用程序未响应不可以正常工作该怎么办呢 下面学习啦小编就为大家介绍一下程序未响应具体的解决方法吧 欢迎大家参考和学习 电脑卡死程序
  • leetcode【62】----不同路径【Python】【动态规划】

    题目描述 一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 Start 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 在下图中标记为 Finish 问总共有多少条不同的路径 代码实现 动态规划解法 自顶向
  • 常见的【内存泄漏】姿势

    关注公众号 高性能架构探索 第一时间获取干货 回复 pdf 免费获取计算机经典书籍 本文节选自文章 内存泄漏 原因 避免以及定位 本文总结常见内存泄漏的几种方式 留意到这几点 可以避免95 以上的内存泄漏 未释放 这种是很常见的 比如下面的
  • UE5 AddYawInput踩坑

    在UE5内使用AddYawInput蓝图节点 发现我输入的值和旋转的值完全不匹配 总是扩大了2 5倍 无奈去看源码 发现并不是你输入多少值就旋转多少值 如果项目设置里EnableLegacyInputScales为真 那么还会乘以一个Yaw
  • centos安装 TA-Lib

    奇葩问题 问题一 gcc 编译器未安装 问题二 command gcc failed with exit status 1 问题三 Traceback most recent call last File run1 py line 3 in
  • 【代码随想录】数组——二分查找相关题目

    int middle left right left 2 防止溢出 等同于 left right 2 35 搜索插入位置 如果目标值不存在于数组中 返回它将会被按顺序插入的位置 这个要求自己没法实现 自己实现的会溢出 当考虑left不行时
  • 如何深度理解整体架构设计?

    一 什么是架构和架构本质 在软件行业 对于什么是架构 都有很多的争论 每个人都有自己的理解 此君说的架构和彼君理解的架构未必是一回事 因此我们在讨论架构之前 我们先讨论架构的概念定义 概念是人认识这个世界的基础 并用来沟通的手段 如果对架构