开发云原生应用应遵循的十二要素

news2024/12/28 1:59:50

  1. 代码库:一份版本控制下的基准代码库,多份部署

应用程序的源代码仓库应该只包含一个应用程序,并列出它所依赖的资源清单。对于不同的环境,我们应该不需要重新编译或打包应用程序。每个环境中特有的设置应该与代码无关

  1. 依赖:显示声明和隔离依赖关系

应该显式地声明应用程序的依赖关系,并且可以通过依赖项管理软件(如Apache Maven)的仓库,下载任意或所有的依赖关系。

  1. 配置:在环境中存储配置

应用程序的代码应用配置严格区分开来。程序的配置应用各个环境各自管理。

  1. 后端服务:把后端服务作为附加资源

后端服务是十二要素程序正常运行所需要依赖的任何服务。举例说明,后端服务包括数据库、API驱动的RESTful Web服务、SMTP服务器或FTP服务器。
后端服务被认为是应用程序的某种资源。这些资源在运行期间被绑定到应用程序上。十二要素程序应该在无须代码改动的前提下,可以从一个测试环境中的嵌入式SQL数据库,切换到预发布环境下的一个独立MySQL数据库。

  1. 构建、发布、运行:严格分离构建和运行阶段

构建阶段


构建阶段将应用程序的源代码编译或打包到一个程序包中。创建的包被称为一次构建物。

将应用源代码打包。

发布阶段


发布阶段需要将某次构建与其配置相结合。随后,创建出的发布文件应该可以在某个执行环境中运行。无论是使用版本号还是时间戳,每个版本应该有一个唯一的标识符。每个发布文件都应该被添加到一个目录中,可以通过发布管理工具回滚到之前的发布版本。

构建包+环境配置组成一个发布文件。

运行阶段


运行阶段(通常称为运行时)是指在可执行环境中运行一个指定的应用版本。
通过将这些阶段分成独立的流程,在运行时就完全不可能去更改任何程序代码。更改应用程序代码的唯一方法,就是通过构建阶段来创建一个新的版本,或者回滚到之前部署的某个版本。

将发布文件运行。

  1. 进程:将应用程序作为一个或多个无状态进程执行

无状态进程方便程序扩缩容。

  1. 端口绑定:通过端口绑定暴露服务

十二要素程序本身是完全独立的,其运行不需要依托于任何的web容器,就可以对外提供web服务能力。每个应用程序通过将自身HTTP端口绑定到执行环境中来对外提供访问能力。

  1. 并发:通过进程模型扩展

十二要素程序必须能够水平扩展,并且能够将请求分发到负载均衡背后的多个程序实例处理。在保证程序无状态的前提下,我们可以通过增加多个节点来水平扩展程序的处理能力。

除增加进程水平扩展的方式,我们还可以通过增加线程来并行处理任务的方式提升程序的数据处理能力。

  1. 易处理:通过快速启动和正常关机来最大限度的提高健壮性

应用程序应该是可以快速启停的,快速启动从而不影响程序的整体可用性;在执行的任意时刻可以终止,并且能够优雅的释放线程以适应程序高频次迭代的需求。

  1. 开发/生产环境一致:尽可能的保持开发、预发布和生产环境的配置一致

应防止不同环境之间存在的差异。每个环境应尽可能使用相同的技术和框架,避免因细小的意外差异导致不一致的行为出现。

  1. 日志:将日志视为事件流

十二要素程序将写日志看作到标准输出的一个有序的事件流。应用程序不应负责管理自身日志文件的存储。应用程序日志输出的收集和归档工作应该由运行环境来完成。

  1. 管理进程:将管理任务作为一次性进程运行

有时,应用程序的开发人员需要运行一次性的管理任务。这类任务可能包括数据库迁移或运行已提交到源代码仓库中的一次性脚本。这些都被认为是管理进程。管理进程应该在应用程序的执行环境中运行,并将脚本提交到代码仓库中,以便保持各个环境之间的一致性。

数据库脚本等提交到代码仓库做版本管理。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/613930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC-【回顾】

回顾MVC架构 什么是mvc:模型、视图、控制器 -----软件设计规范 回顾servlet maven项目导入依赖(webmvc,servlet-api,jsp-api,jstl,junit)创建子模块,在子模块中添加框架支持(在子模块中导入依赖jsp、servlet【因为父…

【NACK】视频rtp包接收及nack触发流程走读

这里大神分析很很透彻了:原文地址:WebRTC中NACK的处理流程 - 资料 - 音视频开发中文网 - 构建全国最权威的音视频技术交流分享论坛视频包的接收 RtpVideoStreamReceiver::ReceivePacket void RtpVideoStreamReceiver::ReceivePacket(const RtpPacketReceived& packet)知乎…

聊聊哪些奇葩的代码规范 —— 代码放一行

因为有些要求感觉实是太过奇葩,收集下来娱乐下大家。 代码规范要求 要求代码必须要放在一行上面,导致代码上面有不少行甚至超过了 1000 个字符。 规范解读 就是有时候代码过长,我们会折行增加可读性,最简单的一个例子就是 obj…

CG平台实验——逻辑回归

文章目录 练习2:逻辑回归介绍1 Logistic回归1.1 数据可视化1.2 实现1.2.1 Sigmoid函数1.2.2 代价函数和梯度1.2.2.1 代价函数1.2.2.2 梯度下降 1.2.3 寻找最优参数1.2.4 评估逻辑回归 2 正则化逻辑回归2.1 数据可视化2.2 特征映射2.3 代价函数和梯度 2.4 寻找最优参…

rust疑难进阶手册(1)-安装和管理,类型推断,打印输出(1)

目录 安装管理和配置工具项目管理类型推断格式输出位置参数格式化文本命名参数安装 不管OS是否带有rust,都应使用rustup来安装rust linux/freebsdcurl https://sh.rustup.rs -sSf | shwindows https://www.rust-lang.org/tools/install windows下建议使用GNU的编译链接库,不…

GraphQL入门实战

解决什么问题 根据请求控制返回结果 例如: 一个User对象,有id,name,mobile,email 有些接口只要返回id,name ,有些接口还要要返回 mobile 适用场景 弱文档管理,公司对文档要求不高需求复杂变…

【JavaEE进阶】springBoot热部署、请求转发与重定向

目录 一、SpringBoot热部署 1.1热部署的步骤 1.1.1导入maven中央仓库的jar包 1.1.2开启项目自动编译 1.1.3启动项目 1.2热部署的原理 二、请求转发&重定向 2.1关键字不一样 2.2定义不同 请求转发(forward): 请求重定向(redirect): 2.3数据共享不一样…

如何用MASM32开发Windows应用程序

提醒:以下内容仅做参考,可自行发散。在发布作品前,请把不需要的内容删掉。IT技术日异月异,无论是初学者还是有经验的专业人士,都需要与时俱进,不断学习新技术。在学习一门新的IT技术时,都需要采…

Github自定义个人首页

前言 GitHub 个人主页,官方称呼是 profile,是一个以 Markdown 脚本语言编写的个人 GitHub 展示主页面。Guthub 个人主页可以展示很多有用的信息,例如添加一个首页被访问次数的计数器,一个 Github 被 Star 与 Commit 的概览信息&a…

JVM-学习笔记

一 . JVM架构图 JVM是Java Virtual Machine的简称,意为Java虚拟机。JVM有很多种,使用最为广泛的JVM为HotSpot。 如上面架构图所示,JVM分为三个主要子系统: 类加载器子系统(Class Loader Subsystem) 运行…

Linux命令学习之cp和mv

cp man 1 cp可以看一下cp的帮助说明。 cp -r /learnwell/good/ /tmp把good目录复制到/tmp目录下,注意想要复制目录,一定要加上-r选项。 接下来学习复制文件,cp 源文件 目标目录(相对路径方法)或者是cp /源文件所在目…

华为OD机试题【IPv4地址转换成整数】【2023 B卷 100分】

文章目录 🎯 前言🎯 题目描述🎯 解题思路示例 1示例 2📙 Python代码实现📗 Java代码实现📘 C语言代码实现 🎯 前言 🏆 《华为机试真题》专栏含2023年牛客网面经、华为面经试题、华为…

Spark安装和编程实践(Spark2.4.0)

系列文章目录 Ubuntu常见基本问题 Hadoop3.1.3安装(单机、伪分布) Hadoop集群搭建 HBase2.2.2安装(单机、伪分布) Zookeeper集群搭建 HBase集群搭建 Spark安装和编程实践(Spark2.4.0) Spark集群搭建 文章目…

linux(信号产生的各种方式)

目录: 1.引入 2.介绍系统支持的信号列表 3.键盘方式产生信号 4.程序中存在异常问题,产生信号 5.系统调用产生信号 6.软件条件也能产生信号 7.任何理解OS给进程发送信号 1.引入 我怎么证明ctrlc是向指定进程发送了2号信号呢?? sig…

5万字大数据实验室建设方案能源大数据中心建设方案word

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除篇幅有限,无法完全展示,喜欢资料可转发评论,私信了解更多信息。 大数据实验室建设方案 大数据实验室建设方案 目录 1概述 1.1建设背景 1.…

chatgpt赋能python:Python抓取数据:从入门到精通

Python抓取数据:从入门到精通 Python是当下最热门的编程语言之一,其强大的数据处理能力使得Python在数据抓取方面也越来越受欢迎。本文将从入门到精通介绍Python抓取数据的方法,希望对初学者有所帮助。 网络爬虫 网络爬虫是Python基于网络…

CG平台实验——线性回归

文章目录 练习1:线性回归介绍1 实现简单示例函数1.1 提交解决方案 2 单变量线性回归2.1 绘制数据2.2 梯度下降2.2.1 更新公式2.2.2 实现2.2.3 计算成本J(θ)2.2.4 梯度下降 2.3 可视化成本函数 选做练习3 多变量线性回归3.1 特征标准化3.2 梯度下降 练习1&#xff1…

chatgpt赋能python:Python在边框中写文字:优雅展示内容的方式

Python在边框中写文字:优雅展示内容的方式 当我们需要在网页上展示一些信息时,通常会使用边框来突出显示内容,然而,普通的边框可能会显得过于单调,缺少设计感,这时我们可以借助Python来实现一个功能强大的…

chatgpt赋能python:Python备份列表:从小白到大神,这里有你需要的一切

Python备份列表:从小白到大神,这里有你需要的一切 随着信息科技的发展,数字资料的价值越发具有现实意义,但是数据泄露、系统崩溃、病毒攻击、硬件故障等情况也时有发生。因此,对数据进行备份是非常必要的。Python作为…

Select选择器(antd-design组件库)简单使用以及增加搜索功能

1.Select选择器 下拉选择器。 2.何时使用 弹出一个下拉菜单给用户选择操作,用于代替原生的选择器,或者需要一个更优雅的多选器时。 当选项少时(少于 5 项),建议直接将选项平铺,使用 Radio 是更好的选择。 组…