首页 > 其他分享 >[读书笔记]架构设计原则

[读书笔记]架构设计原则

时间:2023-09-01 14:12:35浏览次数:36  
标签:架构设计 架构 原则 读书笔记 业务 选择 组件

架构设计面向的是不确定性,需要面对多种可能性时进行选择。

选择的前提是知识和经验,知识是指有哪些技术、可用组件、实现思路等,这个决定了可选的范围。经验是对当前的业务、情形进行分析,能识别对当前的工作最有效的要素,能从选择空间里做出选择。

多学习:扩大可选择的空间和范围
多实践、思考:做出选择的依据和原则。

做选择的原则:合适原则、简单原则、演化原则

合适原则

合适优于业界领先

有多少人做多少事

结合自己团队的规模和能力,评估哪些事自己做,哪些事复用已有的工具。评估过程可以保守一点,即更多的复用,更少的自己做,以确保目标的达成。

涉及的选择:能做多少事?要做哪些事?要做的事情怎么做?要复用的工具复用哪些?
在选择的时候要结合自己的业务,不是因为哪个更先进而选择哪个,而是因为它合适而选择它。

优秀的系统是逐渐演进的

优秀的系统不是一次做出来,而是随着业务发展、踩坑、复盘、优化逐渐演进的,妄想一步登天的做法,且不说开发周期更长,项目复杂度和风险更高,还会有更多的无效投资。即 基于对未来的预期而做出的额外投入,却因为预期本身是不成立的,导致这部分投入是无法获益的。演进的思路,则是在每个关键点能更有把握的看到不远的未来,进行针对性的优化提升,有更大概率的兑现。

业务场景是架构的土壤

不同的业务场景适合不同的系统,优秀的系统都源自对应的业务场景和需求。业务的发展倒逼架构的演进,没有对应的业务和规模,妄想创建超越当前业务根基的系统,是会水土不服的。

简单原则

简单优于复杂

在软件领域,复杂代表的是“问题”。

软件领域的复杂性体现在结构的复杂性逻辑的复杂性

结构的复杂性是指组成系统的组件数量比较多,组件之间有复杂的相互关系。

结构复杂的问题是:

  • 组件越多,越有可能出现系统故障(假设每个组件的故障概率一致)
  • 某个组件的改动,会影响到相关的组件,需要协调各方进行方案评估、资源协调、上线配合,影响系统开发效率
  • 问题的定位更加难

逻辑的复杂性,如一个组件承担了太多的功能,导致这个组件很难被理解和维护,牵一发而动全身。组件过于庞大、臃肿,编译时间太长,影响调试、上线的效率。

再如采用了复杂的算法,导致难以理解、难以实现、难以修改,出了问题难以快速解决。比如ZooKeeper采用了ZAB协议,比采用Raft协议的etcd更加复杂。

《UNIX编程艺术》总结的KISS:Keep It Simple, Stupid!

演化原则

演化优于一步到位。

对于建筑来说,永恒是主题;对于软件来说,变化才是主题!

  • 古埃及的吉萨大金字塔,4000多年前完成的,到现在还是当初的架构
  • 中国的明长城,600多年前完成的,现在保存下来的长城还是当年的结构

作为对比:

windows从1985年1.0版本,92年推出3.1版本,95年推出95版本,2001年推出xp版本,2006年推出Vista版本,09年推出win7,12年推出win8。

软件架构,要根据业务发展不断变化。

妄想一步到位的设计一个架构,会投入巨大的成本到不确定的事情上,落地遥遥无期,且很多预测因为没有兑现,导致没有价值的投入。

天气预报也不能预测未来几年的天气;能快速落地,灵活演进的架构才有生存的空间,每一次落地都可以在业务中见证投入的价值兑现。

软件架构设计类似于生物进化:

  • 首先,生物要适应当时的环境
  • 其次,生物需要不断地迭代繁衍,将有利的基因传递下去,将不利的基因剔除或修复
  • 最后,当环境变化时,生物要能快速适应变化,否则被淘汰;新生物会保留一部分原来的基因

软件架构有类似的过程:

  • 首先,架构要满足当前的业务需要
  • 其次,架构要不断在应用过程中迭代,保留优秀的设计,修复有缺陷的设计,去掉无用的设计,使得架构逐渐完善
  • 最后,当业务发生变化,架构要扩展甚至重构,但是有价值的经验、教训、逻辑、设计等在新架构中延续

《从零开始学架构》第2章 架构设计原则

标签:架构设计,架构,原则,读书笔记,业务,选择,组件
From: https://www.cnblogs.com/ywjy/p/17642122.html

相关文章

  • 趣解开闭原则之《我发誓!再也不买一体机了》
    〇、小故事小王大学毕业后,找了一份像样的工作,早八晚五轻松自在,并且收入也不错。自从大学毕业后,家里用的电脑还是他上大学的时候用了四年的电脑,配置性能早已跟不上现在的时代了。他决定用自己赚的工资买一台家用电脑。他咨询了他的好朋友,好多人都建议他买一台苹果的一体机,所有硬件......
  • 读书笔记
    记录一些好的句子,一些自己的感想。《金蔷薇》珍贵的尘土老文学家在他的札记中深有感触地写道:“每一分钟,每一个在无意中说出来的字眼,每一个无心的流盼,每一个深刻的或者戏谑的想法,人的心脏的每一次察觉不到的搏动,一如杨树的飞絮或者夜间映在水洼中的星光—......
  • 开闭原则
    开闭原则基本介绍1.开闭原则(OpenClosePrinciple)是编程中最基础,也最重要的原则。2.一个软件实体如类,模块,和函数应该对扩展(增加)开放,对修改关闭。用抽象扩展结构,用实现扩展细节。3.当软件需求变化时,尽量通过扩展软件实体的方式来实现需求,而不是通过修改已有的代码开实现新......
  • 使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(12)
    现在到了使用ApacheIoTDB进行IoT相关开发的架构设计与功能实现的最后一个环境,在本文中我将向大家介绍IoTDB的查询语言。IoTDB为咱们广大开发者提供了类似SQL的查询语言,用于与IoTDB进行交互,查询语言可以分为4个主要部分:架构语句:本节中列出了有关架构管理的语句。数据管理语句:本节中......
  • 设计原则
    一、单一职责原则(SRP)二、开闭原则(OCP)对扩展开放,对修改关闭三、里氏替换原则(LSP)父类的属性和方法必须完全可以被继承,不会出现父类方法被子类使用出现不符合的情况四、依赖倒置原则(DIP)通过抽象接口来定义模块之间的依赖关系五、接口隔离原则(ISP)  拆接口,避免继承类重复实现接口......
  • Spring Cloud与Docker高并发微服务架构设计实施---微服务监控中心
    在众多正在运行的微服务中,我们必须做到随时掌握每一个服务的运行情况及其健康状态,才能保证整个平台的稳定性和可靠性。使用Hystrix断路器仪表盘功能就可以创建一个监控中心,实现在线监控微服务的运行状态。(此处代码有待完善)首先,在项目的配置管理中心中增加依赖配置<dependencies......
  • 里氏替换原则
    里氏替换原则OOP(ObjectOrientedProgramming)面向对象编程OO中的继承性的思考1.继承包含这样一层含义,父类中凡是已经写好的方法,实际上就是设定规范。虽然不强制要求所有子类必须遵守规范(不重写方法),但是如果子类对这些方法,任意修改就会对继承体系造成破坏。2.继承在程序......
  • 使用Apache IoTDB进行IoT相关开发的架构设计与功能实现(11)
    账户管理报表IoTDB可以为用户提供账号权限管理操作,保障数据安全。接下来我将通过以下具体示例向朋友们展示基本的用户权限管理操作,介绍详细的SQL语法和用法详细信息。基本概念用户用户是数据库的合法用户。用户对应于唯一的用户名,并具有密码作为身份验证方式。在使用数据库之前,一......
  • 数据结构与算法之美读书笔记
    读书笔记链接 时间复杂度分析只关注执行次数最多的一段代码加法法则:总复杂度等于量级最大的那段代码的复杂度乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积 最好、最坏、平均时间复杂度 数组内存中一块连续的存储空间,有效使用CPU的缓存机制,可以很方便......
  • 依赖倒转原则详解
    依赖倒转原则基本介绍依赖倒转原则(DependenceInversionPrinciple):1.高层模块,不要依赖底层模块,二者都应该依赖其抽象。2.抽象不应该依赖细节,细节应该依赖抽象。3.依赖倒转的核心思想是面向接口编程。4.依赖倒转原则基于这样的设计理念:相对于细节的多变,抽象的东西就稳定......