各种 aaS
类比于计算机网络的 OSI 参考模型,一个软件应用项目需要不同的支撑层,例如从下至上大概需要:
- 硬件层面的服务器
- 针对硬件做弹性分配的虚拟化机制,例如虚拟机
- 在虚拟化环境内运行的 OS
- 支撑软件应用的中间件,例如MQ、缓存等
- 软件的运行时,例如 JRE、node 等
- 最上层就是与核心业务最相关的数据和应用程序了
对于大多数公司而言,真正创造价值的是最上层的业务和数据,IT、运维部门并不产生利润,可以外包出去降低成本。各大云服务厂商就提供了这种“外包”:支撑层作为一种服务提供给业务,而非作为一种实体(硬件和软件),这就产生了各种 aaS := as a Service
而各种 aaS 的区别就在云服务厂商提供的支撑层的抽象层级不同:
- IaaS:Infrastructure as a Service
- PaaS:Platform as a Service
- SaaS:Software as a Service
甚至还有 BaaS := Backend as a Service
,只需要专注于前端页面开发,云直接提供了后端服务
CI/CD
CI := Continuous Integration
,持续集成,这个阶段的任务包含 2 个:test&build
它的输入输出如下:
- 输入是源代码,例如一个 Java 工程或一个 Node 工程
- 输出是一个 artifact,例如一个 Java 工程编译后的 jar 包;或者更现代化地,将其容器化打包为 docker image
CI 的过程由 yaml 配置文件控制,例如 .gitlab-ci.yml
CD := Continuous Deploy
,持续部署,一般与 CI 写在同一个 yaml 文件中