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

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

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

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

一、架构文化建设

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

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 、算法设计领域定理:没有免费的午餐定理

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