软件交付

软件交付

软件交付即把我们开发的一套应用程序部署到其它环境。软件交付几个重要关注的点:

  • 屏蔽环境差异:我们有没有办法屏蔽这种运行环境差异。比如:我们带过去的可运行软件,在客户的 OS 上是不是能运行;客户现场的负载均衡方案都不一样,如果到了客户现场查看了他们的负载均衡方案之后再写一个负责均衡部署方案肯定大大降低了交付效率。

  • 快速部署:如何快速的部署一套我们的 “全家桶” 应用到客户环境。为什么说“全家桶”,是因为我们不可能只交付一个 nginx 服务,我们肯定会交付一套非常复杂的应用或者中间件系统,比如交付一套 “支付宝系统” 到某个商业银行。

  • 环境配置:客户现场的环境不一样,必定带来配置文件不一样。让一个现场交付人员弄懂所有应用的配置参数,是不是一件让他很头疼的事情?

  • 运维:如何在客户现场做自动化容灾,降低驻场和支持成本,或者根本不驻场。

  • 持续部署:如何简单、可靠地升级后续的版本。

软件交付方案的历史

  • 交付源代码: 这应该是最早的时代,客户现场的环境(操作系统、机型)都不同,需要带着代码到客户现场编译,然后运行软件。

  • 交付可运行文件:像 Java 提出的 "Build once, run everywhere" 概念,在这个时代,我们可以面向一个运行时虚拟机交付软件。或者我们都面向 Linux 交付,我们的使用 Go 编译的二进制,能顺利的部署到大多数的 Linux OS 上。但是这种方案也强依赖客户现场需要装上指定版本的 Java 虚拟机,或者 Linux 特定的版本(应用依赖 Linux 内核特性)。

  • 交付镜像:交付镜像,最大可能的屏蔽了底层 OS, Java 虚拟机的差异。在镜像里面,我们把自己需要的 OS 基础 和 Java 虚拟机也装上了。不再依赖客户现场的 OS 和 Java 虚拟机版本了。