云环境中微服务的12要素,你满足了吗?

应用程序开发中有很多框架,但并非所有框架都适合现在的云环境。他们中的许多框架缺乏模块化和灵活性,有些甚至都没有利用云计算的优势。

但是,应用程序12要素原理从一开始就是专门为现代容器化云环境设计的。每个组件都针对容器和云部署的灵活性进行了量身定制,同时为每个团队成员和第三方开发人员提供了要遵循的标准。

同时,“12要素”应用程序创建了一种更直接的方法—来开发具有微服务的云应用程序。它考虑了用户体验的需求以及如何利用好虚拟环境。

你准备好使用“12要素”应用程序了吗?

应用程序12要素-设计原则

应用程序12要素的主要目标是:使创建的应用程序与云环境和依赖完全无关。通过实现此目标,可以将应用程序部署在不同的虚拟环境中,而无需特定的驱动程序或要求。

12个要素是确定应用程序的可伸缩性和灵活性的基本因素。他们分别是:

  1. 基本代码:通过使用统一的代码库,可以通过自定义配置文件,而不是直接通过应用程序或微服务,将应用程序部署在不同的环境中。
  2. 依赖关系:在管理依赖关系时,包管理器是一种更好,更有效的方法。与其直接将依赖项添加到代码库中,还不如使用包管理器在整个环境中重新部署部署。
  3. Config: Config被视为环境变量,使代码库中没有环境特定的参数。使配置独立是保持应用程序灵活性的方式。
  4. 后端支撑服务:确保与支撑服务的兼容性也是重要的一步,因为它使你无需更改代码即可切换服务提供者。你可以使用这种方法使微服务在更多环境中运行。
  5. 构建,运行和发布: 12要素方法将构建,运行和发布阶段牢牢地分开。在审查和测试代码时,代码会从一个阶段转移到另一个阶段,这意味着已部署的代码始终能够完成其应完成的工作。
  6. 无状态流程:现在,十二要素应用程序方法始终支持无状态服务,为服务添加状态的日子已经一去不复返了。
  7. 端口绑定:此组件易于部署,因为它基本上意味着可以通过端口绑定使服务可用。结果就是一个以微服务为组件的应用程序是独立的。
  8. 并发性:为了帮助使扩展可管理,微服务被制作得尽可能小。由于微服务的无状态特性,它们也可以按单元或整个应用进行扩展。
  9. 一次性:是的,应用程序中的每个过程都是一次性的。该方法使处理故障和低效率跟踪变得更加容易。
  10. Dev-Prod一致:一致匹配的研发和生产环境是使CI / CD循环更有效的关键。
  11. 日志:足够的日志记录调试和常规运行状况检查,是一个好的框架是必备的。
  12. 管理流程:需要将管理任务作为一次性流程而不是连续周期运行。

    另外,开发人员通常会希望对该应用执行一次性的管理或维护任务。在与应用程序生产相同的环境中运行这些一次性管理流程。

    管理端代码必须与应用程序代码一起提供,以避免同步问题。

    这样的一次性过程可以包括:

    • 运行数据库迁移(例如,在Django中进行manage.py迁移,在Rails中进行 rake db 迁移)。
    • 运行控制台(也称为REPL Shell)以运行任意代码或针对实时数据库检查应用程序的模型。大多数语言通过运行不带任何参数的解释器来提供REPL(例如python或perl),或者在某些情况下具有单独的命令(例如irb用于Ruby,Rails控制台用于Rails)。
    • 运行提交到应用程序存储库中的一次性脚本(例如php scripts / fix_bad_records.php)。

Kubernetes中的12要素应用原则

Kubernetes如此受欢迎的原因之一,就是他运用了应用程序12要素设计原则。模块化,并发性是使用Kubernetes部署应用程序和微服务的强项。

如果你查看一些12要素应用示例部署,你还会发现Kubernetes Pod和配置文件就是利用了12要素应用原则。Pod利用端口绑定保持可见,使用为每个端口定义的配置和要求,具备了可伸缩性。

实际上,诸如“ Horizontal Pod Autoscaler ”(HPA)之类的工具使缩放Kubernetes中的pod变得更加容易。Kubernetes自身的生命周期控制器(包括DaemonSet和ReplicationControllers)允许Pod并发,使高可用性成为可能。

应用程序12要素方法的唯一挑战

采用应用程序12要素方法的唯一真正挑战是,你的Kubernetes应用程序需要使用状态(或者必须开发有状态的应用程序)。

状态在维持流程流转和实现有效资源共享方面至关重要。起初看起来似乎是一个完全的死胡同,但是当实现12因素时,有很多方法可以绕过Kubernetes中的状态。

Kubernetes环境上Config附加的持久数据存储库是解决该问题的理想方法。它使你可以拥有可扩展的Pod,而不会牺牲数据存储和服务状态的好处。

如果你正在寻找适用于应用程序开发的标准,那么就可以使用12因子应用程序了。

译文链接: https://caylent.com/are-you-12-factor-application-ready

K8S中文社区微信公众号

评论 抢沙发

登录后评论

立即登录