关于技术栈和架构
(TODO 关于技术栈)
提到“Architecture”(架构)一词,在 google 的搜索结果页中第一条是维基百科的定义,在维基百科上是这样定义“Architecture”的:
Architecture is both the process and the product of planning, designing, and constructing buildings and other physical structures.
从这个解释看,架构是对建筑物和其他物理结构的规划、设计、和组织的过程和产品,看起来“架构”既是一个过程,又是一个结果。而且,“架构”原始的定义是面向建筑设计的,计算机在20世纪中叶才出现,软件业的蓬勃发展是在20世纪的80,90年代,相比于人类文明几千年的发展史,计算机、互联网的出现实在是太晚太晚,在此之前,“架构”一词还是主要应用于建筑领域,新事物的出现往往会借助旧事物的感念,“架构”一词就是这样来的,在软件行业还有很多这样次词,也是来源于建筑行业,比如“防火墙”(补充),“IT民工”。
一提到“架构”,在程序员或者系统架构师的脑子里就会出现各种规格的服务器,各种功能的软件,在建筑师的脑子里就会出现钢筋,水泥,等各种建筑材料,互利网和土木建筑虽然是不同的行业,但他们之间又有非常多的相似之处,都是通过将不同的组成模块有机联系在一起。对一个建筑物,需要考虑,有空间,有多少平米,能容纳人居住或者办公,对于系统如要考虑,能够支撑多大流量,这是所谓的容量规划。对于一个建筑,需要考虑行防火防灾,要有一定的抗震性,对于一个软件系统也要考虑容灾,不能因为一个单点的故障让整个系统崩溃。一个大型系统的构建过程和一个建筑物的构建过程是非常类似的。
对于一个小平房,也许几个瓦匠几个木匠就建起来,这事每个人都兼具家中角色,比如既能当电工又能当钳工,就像一个网站或者APP的创业初期,经常是一两个开发人员搞起来的,就像最初facebook扎克伯克一个人开发的,google 是佩奇和谢布林两个人搞起来的,这时架构的作用还体现得不明显,随着业务规模的变大,面对的问题变多,分工越来越多样化,架构的意义就凸显出来了,比如新建一个机场(首都机场举例),面多如此多的工程,人员分工协作,很难想象可以按照一个小平房的方式去构建。也很难想象,想BAT这样量级的公司,每天面对十几亿甚至几十亿的流量,整个系统的组织方式和一个企业官方宣传网站是一样的。一辆玩具汽车有三十个零部件,一个真正的汽车有3万个零件,一架航天飞机有200万个零件,你能相信他们的构建方式的是一样的吗?越是庞大的系统,不仅需要高级额模块,还需要精密的组织,一堆砖头堆砌在还是在一堆砖头,并不能称为建筑,长期间都在哪里甚至可以叫做建筑垃圾,只有通过“架构”,将砖头砌成多长多高的墙,分割成几室几厅的空间,哪里留门,哪里流窗,总之通过一些列组织之后,才能形成产品,这个过程就是架构的过程。
架构师就像建筑行业的设计师,也许不是最优秀的电工、记忆最精湛的瓦工,但确实一个建筑工程中知识最丰富的人,懂得,哪里用钢筋,哪里用木材,懂得如何利用建筑材料,而且能够将各种材料有机结合在一起。架构师,就是通过抽象将整个系统进行清晰的划分,对整个产品负责,而不是仅仅是局部单一功能。