谈谈Saas 应用如何搭建?

依赖管理

显式声明依赖

大多数编程语言都会提供一个打包系统,用来为各个类库提供打包服务,就像 Perl 的 CPAN 或是 Ruby 的 Rubygems 。通过打包系统安装的类库可以是系统级的(称之为 “site packages”),或仅供某个应用程序使用,部署在相应的目录中(称之为 “vendoring” 或 “bunding”)

12-Factor规则下的应用程序不会隐式依赖系统级的类库。 它一定通过 依赖清单 ,确切地声明所有依赖项。此外,在运行过程中通过依赖隔离工具来确保程序不会调用系统中存在但清单中未声明的依赖项。这一做法会统一应用到生产和开发环境。

显式声明依赖的优点之一是为新进开发者简化了环境配置流程。新的开发者可以检出应用程序的基准代码,安装编程语言环境和它对应的依赖管理工具,只需通过一个构建命令来安装所有的依赖项,即可开始工作,如Maven,Pip,Npm等

12-Factor 应用同样不会隐式依赖某些系统工具,如 ImageMagick 或是curl。即使这些工具存在于几乎所有系统,但终究无法保证所有未来的系统都能支持应用顺利运行,或是能够和应用兼容。如果应用必须使用到某些系统工具,那么这些工具应该被包含在应用之中。

配置管理

在环境中存储配置

通常,应用的配置在不同部署(预发布、生产环境、开发环境等等)间会有很大差异。这其中包括:

  • 数据库,Memcached,以及其他后端服务的配置。

  • 第三方服务的证书,凭证,如 Amazon S3、Twitter 等。

  • 每份部署特有的配置,如域名等

应用程序不允许将配置存储为代码中的常量,这需要严格地将配置与代码分离。配置在部署之间差异很大,代码则没有。另外,”config” 的这个定义不包括内部应用程序配置,这种类型的配置在部署之间不会有所不同,因此最好在代码中保存。

提示:对应用程序是否在代码中正确分配了所有配置的试金石是,代码库是否可以随时变为开源,而不用担心泄漏任何敏感凭据。

应用程序应将配置存储在环境变量中(通常缩写为env vars 或 env)。在不更改任何代码的情况下,可以在部署之间轻松更改 Env 变量; 与配置文件不同,它们几乎没有机会被意外地检入代码仓库; 与自定义配置文件或其他配置机制(如 Java 系统属性)不同,它们是与语言和操作系统无关的标准。

构建,发布,运行

严格分离构建和运行

基准代码转化为一份部署(非开发环境)需要以下三个阶段:

  • 构建阶段是指将代码仓库转化为可执行包的过程。构建时会使用指定版本的代码,获取和打包依赖项,编译成二进制文件和资源文件。

  • 发布阶段会将构建的结果和当前部署所需配置相结合,并能够立刻在运行环境中投入使用。

  • 运行阶段(或者说“运行时”)是指针对选定的发布版本,在执行环境中启动一系列应用程序进程。

易处理

快速启动和优雅终止可最大化健壮性

12-Factor 应用的进程是易处理(disposable)的意思是说它们可以瞬间开启或停止。这有利于快速、弹性的伸缩应用,迅速部署变化的代码或配置 ,稳健的部署应用。

进程应当追求最小启动时间 。理想状态下,进程从敲下命令到真正启动并等待请求的时间应该只需很短的时间。更少的启动时间提供了更敏捷的发布以及扩展过程,此外还增加了健壮性,因为进程管理器可以在授权情形下容易的将进程搬到新的物理机器上。

另外进程一旦接收终止信 (SIGTERM) 就会优雅的终止 。就 络进程而言,优雅终止是指停止监听服务的端口,即拒绝所有新的请求,并继续执行当前已接收的请求,然后退出。此类型的进程所隐含的要求是HTTP请求大多都很短(不会超过几秒钟),而在长时间轮询中,客户端在丢失连接后应该马上尝试重连;对于 worker 进程来说,优雅终止是指将当前任务退回队列。

开发环境与线上环境一致

尽可能的保持开发,预发布,线上环境相同

开发环境(即开发人员的本地部署)和线上环境(外部用户访问的真实部署)之间存在着很多差异。这些差异表现在以下三个方面:

  • 时间差异: 开发人员正在编写的代码可能需要几天,几周,甚至几个月才会上线。

  • 人员差异: 开发人员编写代码,运维人员部署代码。

  • 工具差异: 开发人员或许使用 Nginx,SQLite,OS X,而线上环境使用 Apache,MySQL 以及 Linux。

12-Factor 应用想要做到持续部署就必须缩小本地与线上差异。 再回头看上面所描述的三个差异:

  • 缩小时间差异:开发人员可以几小时,甚至几分钟就部署代码。

  • 缩小人员差异:开发人员不只要编写代码,更应该密切参与部署过程以及代码在线上的表现。

  • 缩小工具差异:尽量保证开发环境以及线上环境的一致性。

将上述总结变为一个表格如下:

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树使用JDBC操作数据库数据库操作92542 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月4日
下一篇 2022年4月4日

相关推荐