3.7 技术方面的演进

以上介绍的内容主要是软件开发过程方面的探索。下面简要回顾一下技术方面的演进。

3.7.1 软件架构

早在软件工程时代,即诞生了结构化编程:不能goto跳来跳去,应该有良好的程序结构;还应该是模块化的,模块之间有清晰的分工和边界。

后来面向对象成为潮流。面向对象分析、面向对象设计、面向对象语言支持面向对象编程实现。看那时的宣传材料,仿佛面向对象就能够解决所有问题。

同时,人们对模块化也不断有了新的认识和实践,衍生出组件、插件等方式,以及静态链接库、动态链接库等实现方法。在这方面,近些年最重要的趋势是,大型单体应用被越来越多地拆分为微服务甚至函数服务。本质上,系统的不同部分,不再是构建时被组装到一起,而是运行时被组装到一起。这意味着解耦得更好、灵活性更强。

软件复用也越来越被重视,因为复用已有的工作成果,可以使新产品、新功能的开发更快、成本更低。事实上,这几年中台概念的火爆,说到底就是得益于软件复用做得好。那么如何复用呢?可以共享某些组件,也可以共享平台/框架供不同的插件接入。不论怎么复用,首先都要把系统架构设计好,特别是要做好分层。

3.7.2 部署运行

在部署运行方面,先是出现了虚拟机技术,把一台实体物理机分割成若干虚拟机,降低了成本。不论是实体物理机还是虚拟机,Puppet、Ansible、Chef等服务器配置管理工具都让运维人员轻松了不少。

随后是以Docker为代表的容器技术逐步成熟和实用。在容器编排管理方面,Kubernetes已成为事实上的工业标准。而基于容器及其编排的云原生(Cloud Native)这个概念也越来越受到关注。