《Java架构师的第一性原理》60系统架构之计算机思维模型

1 学习思维模型

1.1 历史跨越模型

怎样解剖当下问题的本质?去回溯问题的历史来源。

比如:计算机网络中,TCP协议怎样保证数据传输可靠?

为了保障数据不丢失及错误(可靠性),它有报文校验、ACK应答、超时重传(发送方)、失序数据重传(接收方)、丢弃重复数据、流量控制(滑动窗口)和拥塞控制等机制。

后来实现分布式消息队列的时候,是不是可以参考思想?

1.2 官方模型

官方文档是最好的学习教材。 

CPU要解决的核心问题就是那么几块,要解决的就是象如何寻址内存,如何管理虚拟存储,如何实现中断,如何保护资源等等。

无需花时间看书,直接看官方文档。在此建议和我一样的对操作系统原理感兴趣,对系统底层的感兴趣的人,直接去看INTEL的官方材料吧,操作系统原理有哪几条,要解决哪些任务,通过查看不同CPU的系统卷编程手册,找出其中相同的任务和逻辑去自己总结操作系统是如何做,无疑这种方法学到会是最多的了,而且理解起来可能会比一般的学习方法来 得更深刻。 

2 商业思维模型

2.1 商业洞察力模型

任何系统都可以进一步拆解为多个要素,以及要素之间的连接方式,即系统=要素 x连接关系。

2.2 降本增效模型

为什么要将思维模型化?其本质目的是通过模型化的手段掌握架构设计上以不变应万变的能力,几大思维模型不变,但能构建的业务场景却可以千变万化,依此达到架构设计降本增效的终极目标。

单体架构、SOA架构、微服务架构等等,他们的存在都有一个最本质的原因,那就是:“满足公司多业务场景的需求,最终达到公司层面降本增效的终极目的”。

3 计算机思维模型

3.1 “人造学科”思维模型

1)什么是计算机的根本特征

如果我们仔细看看身边的事物,就会发现所有的东西可以划分为两类:一类是本来就存在于自然中,人类所做的只不过是发现;另一类是本来并不存在,人类所做的是发明。第一类事物我们称之为神造事物或者自然存在的事务,第二类事物就是人造事物。所以,计算机的根本特征是“人造”。

2)人造学科的四个特点:

  • 不精确、具有相对性。“没有对错”,只有好坏、有意义或者没意义。
  • 从对人类活动的观察导出。对人类生活仔细观察,就可以很容易地理解计算机里面的许多原理。比如“栈”、“队列”。
  • 依赖于人的主观判断力。不同的人观察同样的现象,得出的结论或抽象出的东西可能不一样,多数人所认同的抽象就成为人造学科里的标准,即存在少数服从多数的原则。
  • 通常符合人的直觉。操作系统里的同步机制与人类男女谈恋爱时所用的约会机制十分相似。

神造学科的四个属性:

  • 精确、绝对。例如纯数学领域的各种运算。
  • 从对自然存在的观察导出。牛顿发现万有引力定律。
  • 不依赖于人的主观判断力。如果一个人的观察结果是正确的话,那么他的观察结果将和所有正确的观察结果一样。
  • 通常违反人的直觉。

3.2 操作系统模型

所谓抽象,就是在根本上存在但现实中不存在的东西。抽象来源于具体,但又超越具体

1)操作系统模型之抽象

抽象:操作系统提供使用硬件资源的抽象API。

  通过进程抽象让每一个用户感觉有一台自己独享的CPU。

  通过文件抽象将磁盘变为一个很容易使用的存储介质以提供给用户使用。

  通过虚拟内存抽象,让用户感觉物理内存空间具有无限扩张性。

      通过I/O抽象,屏蔽设备差异、提供并发访问。

隔离:操作系统隔离硬件资源的操作,从而可以管理硬件资源的调度。

2)操作系统模型之缓存

3)操作系统模型之并发。

3.3 操作系统之哲学原理

  • 第1条哲学原理:层次架构。采用层次结构不仅使得操作系统的构造过程容易,也因为符合人类的习惯而更加易于理解。
  • 第2条哲学原理:没有对错。操作系统的进度调度策略:时间片轮转、优先级调度。平衡搜索树的实现AVL树(高度平衡树)、Splay树(伸展树)、红黑树、费波拉齐亚树和B树。
  • 第3条哲学原理:懒人哲学。操作系统中的fork。懒人哲学的合理性在于提前将事情做掉也许是一种浪费。
  • 第4条哲学原理:让困于人。文件系统一致性的保证,操作系统仅保护文件系统的元数据,单不保护用户数据。操作系统不支持动态避免死锁,让用户来承担困难。
  • 第5条哲学原理:留有余地。保留字。DOS目录夹记录里面就有10个字节的保留空间。
  • 第6条哲学原理:子虚乌有——海市蜃楼之美。操作系统的最大角色:魔术师。在操作系统里面,用户看到的内存是一个非常简单、具有线性美的一堆数组。
  • 第7条哲学原理:时空转换——沧海桑田之变。时间和空间可以进行转换。操作系统中的页表的实现(时间换空间),散列算法的实现(空间换时间)。
  • 第8条哲学原理:策机分离与权利分离。操作系统弄里面的策机分离主要不是为了公平,而是为了实现的灵活性,比如调度算法参数化,算法在内核里,参数可以用户指定。
  • 第9条哲学原理:简单为美——求于至简,归于永恒。数学领域:如果一个问题有多个数学表示,那么最简单的表示通常是正确的。在人类社会里面,越简单的架构效率越高。文件的存储方式上,现代操作系统选择的都是最简单的字节流。
  • 第10条哲学原理:适可而止。前面的9条原理的贯彻过程中,要保持一个度,适可而止。

4 架构设计思维模型

4.1 业务需求分析

1)业务需求至简抽象分析思维模型。通俗来讲,就是能不能抽象地分析出业务方或者客户方提出的一个需求背后,他真正的需求是什么。换句话说,能否分析出这个需求背后的本质是什么,而这个过程,就是业务需求抽象的过程。

4.2 分布式

1)CAP架构设计思维模型

CAP是三个英文单词的首字母,分别是consistency、availability、partition tolerance。即强一致性、可用性、网络分区容忍性。CAP定律说的是,分布式系统三者只能同时满足二者,强一致性、可用性、网络分区容忍性三者同时满足的情况不存在。

2)BASE架构设计思维模型

BASE是对CAP中一致性和可用性权衡的结果,其核心思想是即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

4.3 业务架构

1)根据场景Balance架构设计思维模型

我们需要根据实际的业务场景来合理地设计系统架构,这个业务场景,包括了项目时间、团队研发能力、团队运维能力等。

将场景折中能力进一步细化,就会得到“合适”架构设计思维模型。换句话说,在大厂我们可以用这样的分布式架构,但是去了小厂,则不一定要继续设计一个分布式架构,这时对于初创期的小厂,可能一个单体架构会是一个比较好的起点方向。

什么叫做合适,可能还是比较抽象,对它进一步拆解,就会得到适度超前架构设计思维模型。换句话说,我们设计的架构应该是能够满足一定时间内业务的发展的,那么多长的时间算适度?玄姐认为半年到一年的时间段比较符合适度超前的。

4.4 技术架构

4.4.1 递弱代偿模型

1)使用语言越高级的程序员,依赖的要素越多,其实际的个人水平越低。 

4.4.2 金字塔模型

1)存储器 - 金字塔层次结构:越靠近CPU速度越快,容量越小,价格越贵

图1:存储器金字塔层次结构

不同层次存储器设备特点:

  • 越靠近 CPU 速度越快,容量越小,价格越贵。
  • 每一种存储器设备只和它相邻的存储设备打交道。比如,CPU Cache 是从内存里加载而来的,或者需要写回内存,并不会直接写回数据到硬盘,也不会直接从硬盘加载数据到 CPU Cache 中,而是先加载到内存,再从内存加载到 Cache 中。

4.4.3 局部性模型

我们能不能既享受 CPU Cache 的速度,又享受内存、硬盘巨大的容量和低廉的价格呢?前辈们已经探索出了答案,那就是,存储器中数据的局部性原理(Principle of Locality)。我们可以利用这个局部性原理,来制定管理和访问数据的策略。

  • 时间局部性(temporal locality):如果一个数据被访问了,那么它在短时间内还会被再次访问。如 LRU 缓存机制,将频繁访问的数据保存在内存中。
  • 空间局部性(spatial locality):如果一个数据被访问了,那么和它相邻的数据也很快会被访问。如果数组的 CPU 预读功能。

4.4.4 标准化模型

1)先定标准,再做产品

实例:SQL -> MySQL、Orcale、SQLServer

2)先有产品,再抢标准

实例:5G实现方案

3)已有不同的产品,实现中间层,定自己的标准

实例:JVM、JDBC

5 技术管理模型

1)管理的本质是激发善意

2)最大的善意在于成长

3)构建终身成长生态

 

99 直接读这些牛人的原文

聊一聊 软件系统中的“热力学第二定律”

软件研发的原则

 

posted @ 2023-09-06 14:46  沙漏哟  阅读(28)  评论(0编辑  收藏  举报