01架构设计的宏观视角
无论是什么样的智能电子设备,手机也好,汽车也罢,它们都可以称为"电脑"。所有的电脑都可以统一看作由"中央处理器+存储+一系列的输入输出设备"构成。
为何电脑能够完成这么多复杂而多样化的工作?
第一是可编程性。大体来说,中央处理器(CPU)的指令分为如下这几类。
1)计算类,也就是支持我们大家都熟知的各类数学运算,如加减乘除、sin/cos等等。
2)I/0类,(从存储读写数据)从输入输出设备读数据、写数据。
3)指令跳转类,在满足特定条件下跳转到新的当前程序执行位置。
虽然,CPU指令是一个很有限的指令集,但是CPU执行的指令序列(或者叫"程序")并不是固定的,而是依赖保存在存储中的数据——由软件工程师(或者叫"程序员")编写的软件来决定。指令序列的可能性是无穷的,这也就意味着电脑能够做的事情的可能性也是无穷的。
第二是开放设计的外部设备支持。虽然我们电脑可以连接非常非常多种类的外部设备,比如键盘、打印机、屏幕、汽车马达等等,但CPU并不理解这些设备具体有什么样的能力,它只和这些设备交换数据。它能够做的是从某个编号的设备(通常这个设备编号被称为"端口")读入一段数据,或者向设备的端口写入一段数据。
我们遇到的第一个问题是直接用机器指令编写软件太累,而且这些机器指令像天书一样没人看得懂,没法维护。所以,编程语言+编译器就出现了。
遇到的第二个问题,是多个软件在同一个电脑上怎么共处。多个软件大家往同一个存储地址写数据冲突怎么办?一起往打印机去发送打印指令怎么办?有的软件可能偷偷搞破坏怎么办?于是,操作系统就出现了。它首先要解决的是软件治理的问题,其次解决的是基础编程接口问题。
对于一个服务端应用程序来说,其完整的架构体系大体如下:
网络图片整体来说,对于一个客户端应用程序来说,其完整的架构体系大体如下:
网络图片架构能力的提升,本质上是对你的知识脉络(全身经络)的反复梳理与融会贯通的过程。
网友评论