架构设计系列之架构文化建设和遵循定律

 

30f421b0cc13512c2ec23ac150cb516e.jpeg

这一部分我们一起来聊聊架构文化建设部分的内容。这里是涉及到对架构师的一些软实力和文化要求的部分,会从组织文化和架构设计中常见定律两部分来逐一讲解。

当我们说到软件架构时,不仅仅是指技术上的设计和决策,更涉及到组织的文化和价值观。构建一个强大而可持续的软件架构需要超越单纯的技术选择,它需要一个健康的架构文化的支持。

架构文化是一个组织内部的共同信仰,是开发团队在设计和构建软件时所遵循的原则和价值观。它涉及到如何做决策、如何处理技术债务、如何平衡创新和稳定性,以及如何与业务目标相一致。在一个强大的架构文化中,每个团队成员都能够理解架构的重要性,并为其贡献力量。

架构遵循定律是我们在设计和演进软件系统时可以借鉴的一系列原则和规律,这些定律包括但不限于康威定律、梅特卡夫定律、布鲁克斯定律等,它们提供了一些建议和准则,帮助我们更好地理解和规划架构的演进。

一、架构文化建设

在架构文化建设的过程中,我们将深入培养架构思维和技能,同时借助一系列有效的组织文化和领域建模实践来确保整个团队在软件架构方面达到最佳水平。

1 、架构思维与技能培训

架构思维的培养

架构思维是一种综合性的思考方式,旨在理解系统的整体架构,权衡不同设计选择,并考虑长期演进。在培养架构思维的时候,需要关注以下方面:

  • 系统思维:帮助团队成员从整体角度看待系统,理解各个部分之间的相互关系,以及它们对系统整体性能和可维护性的影响
  • 风险管理:培养团队在设计和决策时能够识别和评估潜在的技术风险,以及采取措施来降低这些风险的能力
  • 演进性思考:强调系统的演进性,使团队能够做出既能满足当前需求又具备良好演进性的设计和决策

技能培训

  • 领域建模小组
    • 业务理解能力:强调团队对业务领域的深刻理解,使得架构决策更加符合业务需求
    • 业务抽象能力:培养将业务问题抽象为可操作概念的能力,以更好地进行系统设计
    • 业务建模能力:提高建模技能,包括流程图、时序图等,以清晰表达业务过程
  • 架构小组
    • 解决问题:强调团队成员在面对复杂问题时的解决能力,培养快速而准确的决策能力
    • 架构演化:学习如何适应变化,进行系统演化,以满足业务需求的变化
    • 架构前瞻:提升团队对未来技术趋势的洞察力,确保系统架构具备良好的前瞻性

2 、规约/最佳实践

  • 数据库设计以及 SQL 使用规约:强调数据库设计的合理性,以及在使用 SQL 时的最佳实践,包括索引的使用、查询优化等
  • 缓存使用规约:学习在系统中正确合理地使用缓存,包括缓存策略、缓存失效处理等
  • 中间件使用规约:强调使用中间件的最佳实践,确保系统的可扩展性和性能
  • 接口规范:
    • 基于行为的接口而非基于场景:以系统的行为为核心设计接口,而不是过于依赖特定场景
    • 正交化:确保接口的各个部分相互独立,彼此之间不产生冲突或重叠,以及对一部分的修改不应该影响其他部分,这是一种设计原则,一般考虑
      • 功能正交化:指接口的各个方法或功能应该具有清晰、独立的责任。每个方法或功能应该完成一个明确定义的任务,而不是将多个不同的任务混合在一个方法中
      • 错误处理正交化:指错误处理应该独立于正常业务逻辑,每个错误情况应该有清晰的处理方式
      • 状态正交化:指接口的调用不应该依赖于外部状态的维护。接口的行为应该由传入的参数和对象的当前状态确定,而不依赖于外部的状态变化
      • 参数正交化:指接口的输入参数应该相互独立,一个参数的修改不应该影响其他参数。参数之间的关系应该尽量松散,使得接口在不同的场景下都能够灵活地使用
    • 状态码而非异常:使用状态码来处理操作结果,而不是依赖异常处理
    • 包装类型:在接口中使用包装类型,以支持更多的信息传递
  • JAVA/JS/Python 等代码规范:提供各语言的最佳实践,包括代码风格、模块划分、异常处理等
  • 常见业务架构/常见场景架构实践:学习在常见业务场景下的最佳实践,以及如何根据场景特点进行架构设计
  • 隔离关注点防腐:强调隔离不同模块的功能以及如何防止系统间的信息腐化

二、架构遵循定律

1 、康威定律

架构设计第一定律

源自《人月神话》,强调组织的沟通方式会在系统设计中得以表达。具体说,沟通方式的选择将在系统的边界、护城河以及整体结构上留下痕迹。因此,团队间的沟通方式直接影响到架构的形成。

时间再多一件事情也不可能做的完美

康威定律强调在给定的时间内,不可能完美地完成所有任务。这对于采用敏捷开发方法的团队尤为重要,鼓励团队专注于最关键的任务,迭代开发,并在业务发展中演化系统。

线型系统和线型组织的异质同态特性

康威定律认为组织和系统结构之间存在异质同态特性,即组织的沟通结构会在系统结构中得以映射,这意味着构建系统时,要考虑到团队的组织结构,以避免不必要的复杂性。

大的系统组织总是比小系统更倾向于分解

随着系统规模的增大,康威定律暗示系统组织的倾向是分解成多个模块或团队,这也强调了在大型组织中实施架构时需要关注政治和组织结构的因素。

2 、墨菲定律

Anything that can go wrong will go wrong!

墨菲定律强调了在任何情况下,一切可能出错的事情最终都会出错。这为系统设计者提供了一种思维方式,即预测和准备可能的问题,以便更好地处理和修复。

四句话谨记:

  • 任何事情都没有表面看起来那么简单
  • 所有的事情都会比你预计的时间长
  • 会出错的事情总会出错
  • 如果你担心某种情况发生那么它就更有可能发生

这四句话强调了对于出现问题的常见认知,提醒我们在设计和执行中保持谨慎和预见。

3 、Amdahl 阿姆达尔定律

并行计算领域著名定律

Amdahl 阿姆达尔定律描述了在并行计算中,系统的加速受制于可并行化部分的比例。即使系统中只有很小一部分是串行的,其影响也会在整体性能上产生明显的限制。

对计算机系统的某一部分加速的时候,Amdahl 阿姆达尔定律提醒我们,当优化系统中的某一部分时,应该关注那些对整体性能有明显影响的部分。只有对影响最大的部分进行优化,才能更有效地提高系统的整体性能。

4 、Gustafson 古斯塔夫森定律

系统在规定时间内,可以完成的计算量

Gustafson 定律为系统设计者提供了一种思考方式,即通过增加计算资源来提高系统的计算量。这对于需要处理大规模计算的领域(如机器学习、大数据)具有指导意义。

5 、算法设计领域定理:丑小鸭定理

丑小鸭定理表明一个看似不够优秀的算法在适当的情境下,可能会比看似更好的算法表现更好。这提醒我们在选择算法时,要结合具体场景和需求,不仅仅追求理论上的最优解。

6 、算法设计领域定理:没有免费的午餐定理

这个定理强调了在算法设计中,没有一种算法能够在所有问题上表现最优。选择最适当的算法需要考虑到问题的特征和约束条件,避免生搬硬套。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

带你了解OpenCV4工业缺陷检测的六种方法

文章目录 OpenCV4工业缺陷检测的六种方法机器视觉缺陷检测1. 工业上常见缺陷检测方法方法一:基于简单二值图像分析实现划痕提取,效果如下:方法二:复杂背景下的图像缺陷分析,基于频域增强的方法实现缺陷检测&#xff0c…

vscode使用remote ssh到server上 - Node进程吃满CPU

起因:Node进程吃满CPU 分析 我发现每次使用vscode的remote插件登陆到server后,就会出现node进程,不太清楚干什么用的,但是绝对和它有关。 查找原因 首先找到了这篇文章,解决了rg进程的问题: https://blo…

docker 与 ffmpeg

创建容器 docker run -it -v /mnt/f/ffmpeg:/mnt/f/ffmpeg --name ffmpeg 49a981f2b85f /bin/bash 在 Linux 上编译 FFmpeg: 安装依赖库: sudo apt-get update sudo apt-get install build-essential yasm cmake libtool libc6 libc6-dev unzip wget下…

JVM日常故障排查小结

前置知识 jstack简介 jstack是JVM自带的工具,用于追踪Java进程线程id的堆栈信息、锁信息,或者打印core file,远程调试Java堆栈信息等。 而我们常用的指令则是下面这条: # 打印对应java进程的堆栈信息 jstack [ option ] pid option常见选…

计算智能 | 粒子群算法

一、寻找非线性函数的最大值 这里我们使用python来求解《MATLAB智能算法30个案例分析》种第13章的内容。 我们使用基本粒子群算法寻找非线性函数 的最大值。 在Python程序中,我们规定粒子数为20,每个粒子的维数为2,算法迭代进化次数为300&…

一文带你了解Pytest..

在之前的文章里我们已经学习了Python自带测试框架UnitTest,但是UnitTest具有一定的局限性 这篇文章里我们来学习第三方框架pytest,它在保留了UnitTest框架语法的基础上有着更多的优化处理 下面我们将从以下角度来介绍Pytest: Pytest基本介绍…

Typora+Picgo(正常) 却上传图片失败问题解决思路和办法

报错信息 在typora中粘贴图片时报错,显示上传图片失败,有点奇怪,而我确定我的picgo正常且通过了测试,那我们就去看日志,跟踪排查问题在哪里 我的picgo日志文件路径在 D:\user\username\Application Data\picgo\picg…

Linux下Netty实现高性能UDP服务

前言 近期笔者基于Netty接收UDP报文进行业务数据统计的功能,因为Netty默认情况下处理UDP收包只能由一个线程负责,无法像TCP协议那种基于主从reactor模型实现多线程监听端口,所以笔者查阅网上资料查看是否有什么方式可以接收UDP收包的性能瓶颈…

如何实现公网访问本地内网搭建的WBO白板远程协作办公【内网穿透】

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cp…

Python的代码c语言可以用吗,python代码大全和用法

本篇文章给大家谈谈Python的代码c语言可以用吗,以及python代码大全和用法,希望对各位有所帮助,不要忘了收藏本站喔。 深度学习的图片等比resize后,再把图片反向resize回来,验证通过 import cv2 import numpy as npdef …

python识别增强静脉清晰度 opencv-python图像处理案例

一.任务说明 用python实现静脉清晰度提升。 二.代码实现 import cv2 import numpy as npdef enhance_blood_vessels(image):# 调整图像对比度和亮度enhanced_image cv2.convertScaleAbs(image, alpha0.5, beta40)# 应用CLAHE(对比度受限的自适应直方图均衡化&…

Java序列化、反序列化-为什么要使用序列化?Serializable接口的作用?

什么是序列化和反序列化? 把对象转换成字节序列把字节序列恢复成对象 结合OSI七层协议模型,序列化和反序列化是在那一层做的? 在OSI七层模型中,序列化工作的层级是表示层。这一层的主要功能包括把应用层的对象转换成一段连续的二进…

vue中用v-html根据后端返回结果设置样式

一、问题 1》今日遇到一个需求,是一个表格列返回状态status,并拥有多种不同颜色。 2》平日里见到的基本都是返回01234......前端用插槽放进去,根据数字去判断显示字段以及设置不同样式,今天看到的是后端直接返回一个字符串&#…

如何搭建企业管理系统Odoo并远程访问管理界面【内网穿透】

文章目录 前言1. 下载安装Odoo:2. 实现公网访问Odoo本地系统:3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件,是一个一站式全功能ERP及电商平台。 开源性质:Odoo是一个开源的ERP软件,这意味着企…

【贪心算法】【中位贪心】LeetCode:100123.执行操作使频率分数最大

涉及知识点 双指针 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 贪心算法 题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 你可以对数组执行 至多 k 次操作: 从数组中选择一个下标 i ,将 nums[i] …

STL技术概述与入门

STL技术概述与入门 STL介绍STL六大组件初识容器算法迭代器1. vector存放内置数据类型2. Vector存放自定义数据类型3. Vector容器的嵌套 ✨ 总结 参考博文1:STL技术——STL概述和入门 参考博文2:<C>初识STL —— 标准模板库 STL介…

SpringBoot配置mysql加密之Druid方式

一、导入Druid依赖 <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.22</version> </dependency>二、生成密文 方式1. 找到存放druid jar包的目录 1-1、在目录…

【Proteus仿真】【Arduino单片机】电子称重秤

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使LCD1602液晶&#xff0c;矩阵按键、蜂鸣器、HX711称重模块等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示HX711称重模块检测重量…

人工智能与自动驾驶:智能出行时代的未来之路

一、前言 首先&#xff0c;我们先来说下什么是人工智能&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一门研究如何使计算机系统能够模拟、仿真人类智能的技术和科学领域。它涉及构建智能代理&#xff0c;使其能够感知环境、理解和…

怎么检测DC-DC电源模块稳定性?电源测试系统测试有什么优势?

DC-DC电源模块稳定性测试 稳定性是衡量DC电源模块的重要指标&#xff0c;电源模块的稳定性直接影响着电源产品和设备的工作稳定性。DC-DC电源模块的稳定性&#xff0c;可以通过检测输出电压、输出电流、负载、波形、效率等参数来评估。 1. 静态测试方法 静态测试是通过直流电压…