01 | 架构设计的宏观视角-笔记

我们几乎每天面对的智能设备都是由软件进行驱动的

他们的背后是如何工作的呢?

成千上万的软件模块,如何精密的协作?

为何建立宏观视角?

专栏的题材引用的是建筑师和架构师的类比,

我这里找到了一篇文章,因为作者本身就是学土木工程出身,我找到了一篇较好理解的博客文章:

简单即美,一场架构师和建筑师之间的世纪对话

剖析一个程序的全貌

所有的智能电子设备都被称为“电脑”

一个程序的基础架构依赖于电脑工作原理、程序工作原理,

所有的电脑构成

  1. CPU——负责执行指令
  2. 储存器——保存数据,保存的数据也包含要执行的指令
  3. 输入输出——

电脑运行步骤:
电脑打开电脑 ->  从固定的位置读取指令->执行  -> 依次执行

计算机完成复杂工作的原因

可编程
  1. 计算
  2. IO
  3. 指令跳转
开放外部设备支持
端口数据交互

CPU只知道如何交互数据,但是不理解其意义

CPU只支持读入和写出数据、计算数据

引用维基百科的一段描述:

冯·诺伊曼结构(英语:Von Neumann architecture),也称冯·诺伊曼模型(Von Neumann model)或普林斯顿结构(Princeton architecture),是一种将程序指令存储器和数据存储器合并在一起的计算机设计概念结构。本词描述的是一种实现通用图灵机的计算设备,以及一种相对于并行计算的序列式结构参考模型(referential model)。

专栏上描述的这个体系结构,在后来也存在很多瓶颈 ,但是这个理论的影响确实非常深远

编写软件

问题1:机器指令人类无法阅读!

后来出现了

  1. 编程语言
  2. 编译器

问题2 : 多个软件如何在同一个计算机运行?内存地址冲突? 打印机指令冲突?恶意软件?

解决方案: 操作系统

  1. 软件治理
  2. 基础编程接口

案例:

屏幕:多任务窗口

键盘输入:焦点窗口

基础架构解决了与业务无关的通用性问题

基础架构以独立的软件的方式存在

完整架构预览

作者按:

强大的基础架构可以简化我们处理额外问题的流程,尤其是现在的云计算时代

我们现在的时代,大部分的企业都是直接关注业务架构 也就是所谓的应用架构 

不同的应用架构有不同的风格,然而他们都遵守“架构原则”或者说是“架构设计范式”

设计范式的衍生往往是非常多的框架:

例如用户交互层的 Angular Vue React

例如后台服务框架 Python 的 Django PHP 的 Laravel Nodejs 的 Express

游戏引擎:JavaScript 中的 Phaser C#中的 Unity

服务端应用程序的架构



客户端的架构种类繁多 而且根据终端的差异性,第一个想消除差异性的客户端是浏览器

底层操作系统对软件的支持同样可以做到即取即用。

一般的,软件包的大小如果足够小 那么和Web页面没什么差别 web指令码是JS

新型高性能技术的蓬勃发展 让web应用领域得到了翻天覆地的变化 

例如 WebAssembly 简称 wasm

浏览器可以被视为操作系统上的操作系统 大部分的开发者会聚集到浏览器方做出相应的应用  导致系统底层操作的管道化

PC 端的浏览器的战争到现在 主要剩下的主流浏览器大部分是以 Chrome为主导的以webkit内核为核心的浏览器了 

手机端的浏览器端的战争反而是因为微信小程序之战而引起的,它的本质上是浏览器端的战争

浏览器确实是比较基础的软件 他带来的便捷改变了很多 C/S 架构服务 带来了许多跨端的应用,RN的崛起,小程序的崛起,甚至是国内的快应用


对于客户端应用程序来说,架构结构如下



对于我们来说 如何拆解业务不是核心的问题,我们需要关注从底层到顶层的建筑 每一层的决策

例如最近我所在的公司在选型小程序框架的时候就会从多个主流的框架中站在多维的角度进行选择,

这里我想说明的是,不管你所考虑的角度有多少,也要适合公司的发展的需求,而不是追求潮流,也不要为了完成KPI去退而求其次,也不要轻易被别人的评论影响!

## 总结

架构能力的提升 就好比 你学的的内功心法,如果你想打通任督二脉,需要的是反复的梳理和融会贯通。

对于云计算而言,我们也不要去做个什么浏览器客户端 而是理解他们的思考方式 !

引用文本图片版权声明

极客时间版权所有: https://time.geekbang.org/column/article/90170


有疑问、勘误、请您在下方留言,谢谢合作!

感谢您阅读,这篇文章归 极客点子版权所有.
如果转载,请注明出处: 极客点子版权所有(/page/926.html) 知识共享许可协议
本网站使用 创作共用 归属 - 非商业用途 - 共享4.0国际许可协议的相同方式 许可.

关于作者:

    作者:

    reverse()

    简介:

    nodejs 全栈工程师 、作家、github 开源爱好者
    研究方向:数据分析、 深度学习、 服务器架构、 系统原理

    著作:

    最爱的编程语言:

    Javascript
    Python