面试官:请你讲讲Saas应用的架构规范?

12-Factor原则为构建SaaS应用提供了标准化流程,强调应用的可移植性、环境一致性、依赖管理、配置管理等。应用应明确声明依赖,存储配置在环境变量中,将后端服务视为附加资源,严格区分构建、发布和运行阶段,以无状态进程运行,通过端口绑定提供服务,通过进程模型进行扩展,快速启动和优雅终止,保持开发环境与线上环境一致,并将日志视为事件流进行管理。
摘要由CSDN通过智能技术生成

388a8458dc15d10b9306d4e153e18c01_900.jpg
引言

如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor 为构建如下的 SaaS 应用提供了方法论:

使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。

和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。

适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。

将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。

可以在工具、架构和开发流程不发生明显变化的前提下实现扩展。

这套理论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序。

统一源代码管理系统

一份基准代码(Codebase),多份部署(deploy)

在类似 SVN 这样的集中式版本控制系统中,基准代码就是指控制系统中的这一份代码库;而在 Git 那样的分布式版本控制系统中,基准代码则是指最上游的那份代码库。

基准代码和应用之间总是保持一一对应的关系:

一旦有多个基准代码,就不能称为一个应用,而是一个分布式系统。分布式系统中的每一个组件都是一个应用,每一个应用可以分别使用 12-Factor 进行开发。

多个应用共享一份基准代码是有悖于 12-Factor 原则的。解决方案是将共享的代码拆分为独立的类库,然后使用依赖管理策略去加载它们。

53533be63cfe5334aca47c27502739dd_900.jpg

依赖管理

显式声明依赖

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值