从零开始学架构

01 | 架构到底是指什么?

系统与子系统

系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或”联盟“。
关键词: 关联、规则、能力。

子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分。

模块与组件

模块和组件都是系统的组成部分,只是从不同的角度拆分系统而已。

从逻辑的角度来拆分系统后,得到的单元就是“模块”;从物理的角度来拆分系统后,得到的单元就是“组件”。

框架与架构

框架关注的是“规范”,架构关注的是“结构”。框架的英文是 Framework,架构的英文是 Archiecture。

image.png

02 | 架构设计的历史背景

软件开发进化史

机器语言 -> 汇编语言 -> 高级语言

第一次软件危机与结构化程序设计(20 世纪 60 年代~20世纪70年代)

结构化程序设计的主要特点是抛弃 goto 语句,采取“自顶向下、逐步细化、模块化”的指导思想。
虽然“软件工程”提出之后也曾被视为软件领域的银弹,但后来事实证明,软件工程同样无法根除软件危机,只能在一定程度上缓解软件危机。

第二次软件危机与面向对象(20 世纪 80 年代)

根本原因还是在于软件生产力远远跟不上硬件和业务的发展。
第一次软件危机的根源在于软件的“逻辑”变得非常复杂,而第二次主要体现在软件的“扩展”变得非常复杂。
虽然面向对象开始也被当作解决软件危机的银弹,但事实证明,和软件工程一样,面向对象也不是银弹,而只是一种新的软件方法而已。

03 | 架构设计的目的

架构设计的主要目的是为了解决软件系统复杂度带来的问题


image.png

遵循这条准则能够让“老鸟”架构师有的放矢,而不是贪大求全。

04 | 复杂度来源:高性能

image.png

软件系统中高性能带来的复杂度主要体现在两方面,一方面是单台计算机内部为了高性能带来的复杂度;另一方面是多台计算机集群为了高性能带来的复杂度。

单机复杂度

计算机内部复杂度最关键的地方就是操作系统,操作系统是软件系统的运行环境,操作系统的复杂度直接决定了软件系统的复杂度。

操作系统和性能最相关的就是进程和线程。

人工录入 -> 批处理指令 -> 进程 -> 线程

image.png
image.png

操作系统调度的最小单位就变成了线程,而进程变成了操作系统分配资源的最小单位。

集群复杂度

通过大量机器来提升性能,并不仅仅是增加机器这么简单,让多台机器配合起来达到高性能的目的,是一个复杂的任务。

1. 分配任务 (水平拆分)
image.png
image.png

随着性能的增加,任务分配器本身又会成为性能瓶颈,当业务请求达到每秒 10 万次的时候,单台任务分配器也不够,任务分配器本身也需要扩展为多台机器,这时的架构又会演变成这样。

image.png
image.png

2.任务分解(垂直拆分)

业务越来越复杂,单台机器处理的性能会越来越低,单纯只通过任务分配的方式来扩展性能,收益会越来越低。如果系统的子业务足够内聚(有边界),可以进行垂直拆分。

image.png
image.png

既然将一个大一统的系统分解为多个子系统能够提升性能,那是不是划分得越细越好呢?

这样做性能不仅不会提升,反而还会下降,最主要的原因是如果系统拆分得太细,为了完成某个业务,系统间的调用次数会呈指数级别上升,而系统间的调用通道目前都是通过网络传输的方式,性能远比系统内的函数调用要低得多。

虽然系统拆分可能在某种程度上能提升业务处理性能,但提升性能也是有限的,最终决定业务处理性能的还是业务逻辑本身,业务逻辑本身没有发生大的变化下,理论上的性能是有一个上限的,系统拆分能够让性能逼近这个极限,但无法突破这个极限。因此,任务分解带来的性能收益是有一个度的,并不是任务分解越细越好。

05 | 复杂度来源:高可用

高可用定义:
系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。
"无中断"的难点

  1. 硬件故障
  2. 软件出bug
  3. 不可抗力(自然灾害、断电、挖断光纤)

系统的高可用方案五花八门,但万变不离其宗,本质上都是通过“冗余”来实现高可用。

高性能增加机器目的在于“扩展”处理性能;高可用增加机器目的在于“冗余”处理单元

通过冗余增强了可用性,但同时也带来了复杂性。

计算高可用

image.png
image.png

存储高可用

image.png
image.png

高可用状态决策

image.png
image.png
  1. 协商式

  2. 民主式
    脑裂 (解决方法:过半数同意才选举成功,缺点:可用性降低
    Paxos算法

06 | 复杂度来源:可扩展性

image.png

预测变化

软件系统与硬件或者建筑相比,有一个很大的差异:软件系统在发布后还可以不断地修改和演进,这就意味着不断有新的需求需要实现。

image.png

应对变化

image.png
image.png
image.png

无论采取哪种形式,通过剥离变化层和稳定层的方式应对变化,都会带来两个主要的复杂性相关的问题。

  1. 系统需要拆分出变化层和稳定层
  2. 需要设计变化层和稳定层之间的接口

常见的应对变化的方案是提炼出一个“抽象层”和一个“实现层”。

07 | 复杂度来源:低成本、安全、规模

低成本

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容

  • 源起 软件发展历程 机器语言 直接使用二进制码 0 和 1 来表示机器可以识别的指令和数据开发难度大/可读性差/可...
    visionarywind阅读 307评论 0 0
  •   软件架构的出现是为了解决系统规模增加后出现了系统耦合严重,开发效率低,逻辑复杂,扩展困难等问题。所以架构设计是...
    良辰美景TT阅读 3,298评论 0 29
  • 为什么读这本书 曾经听过关于三个建筑工人的故事,具体故事是: 一天,一位记者到建筑工地采访,分别问了三个建筑工人一...
    蘑菇均阅读 307评论 0 1
  • 简单的问候 就像所有平常且朴素的问候一样:大家好,我是流岚锦。今天,我来到了简书app。正式开始了我在这里的独立写...
    流岚锦阅读 358评论 0 1
  • 没什么好说的。 不不,开玩笑的️️️️️️️。 在这个2019年的新年到来之前,高中时光过去了一半之后的时刻,我想...
    若若星游阅读 38评论 0 0