80%的软件环境管理问题,根因都在这里

简介:80%的软件环境管理问题,根因都在这里,云效云原生应用管理平台AppStack正是基于OAM的应用交付平台,企业在云效AppStack,可以通过应用编排、占位符、变量等声明式定义,实现一套编排多环境差异化部署,同时基于版本和基线实现环境一键拉起、一键回滚。

专栏策划|雅纯
志愿编辑|jimmy、吕瑞星

软件交付的终态是提供稳定可预期的系统,要做到这一点,我们需要确保:一、软件制品的一致性;二、运行环境的一致性。

第3讲我们分享了如何保证软件制品的一致性,这一讲我们来谈谈如何保证环境的一致性

运行环境一致性的目标是环境可预期、稳定、低成本。其中低成本比较关键,因为环境资源的成本一般比较高。

我们可以将运行环境分为3部分:制品、执行引擎和编排规则。

要保证制品的一致性,第一是保证代码及其依赖的一致性;第二是保证构建环境的一致性;最后是保证构建脚本的一致性。保证环境的一致性,也包含了三点:

  1. 应用的一致性,比如一致的容器镜像;
  2. 容器运行所需的上下文的一致性,比如一致的数据配置等;
  3. 编排规则的一致性,需要保证编排执行相同的规则,比如相同容器部署规则、相同节点分布规则、相同备份规则等。

保证这3点,部署完成之后才会形成一致的可运行环境。但是现实当中,环境还是会有很多其它的问题,比如:

  • 配置文件中有好多监控之类的配置,对于使用者来说,不知道配置的具体作用,需要修改时不知如何设置。
  • 测试的时候依赖的环境经常发生问题,耗费大量等待和排查时间。比如说依赖的API经常出问题,排查修复可能需要等待依赖方很久,导致测试工作无法继续进行。
  • 新环境的搭建很耗时。搭建一个新的环境是很痛苦的事情,比如国际化团队,经常要搭建新的站点,而每搭一个新的环境就要耗费一整天的时间是很痛苦的。
  • 应用在本地无法运行。比如因为缺某个资源导致应用无法正常运行。
  • 配置环境需要小心翼翼,可能出现配置遗漏。每次配环境的时候需要很小心,特别是当环境配置由多人配合时,会出现配置冲突,导致程序无法运行,需要全链路排查解决。

这里我们简单列了五个常见的问题,它们的根源都是环境缺乏清晰的定义:不清楚环境的具体内容、对环境搭建过程的认知模糊。

环境的清晰定义,包括环境包含什么制品、这些制品如何部署等。那么环境管理的终态是什么呢?

当制品相同、运行上下文相同,并且资源数据是一样的情况下,基于相同的编排规则,环境就应该是一致的。同时,环境可以由软件来定义和声明。这是我们认为的环境管理的终态,简单来说,即软件定义的不可变环境。软件定义的不可变环境,可以纳入版本管理,保证环境首先是定义明确的,其次是有明确版本的。

环境管理的3个阶段

阶段一:说明书

环境管理的第一个阶段是说明文档,这点相信很多人都经历过。当我们在做一个项目或产品时,会写整个产品的部署说明书、说明文档、升级文档等各种文档。但文档很难保证实用,也不一定是最新的、准确的。每次我们去现场交付时,都会遇到一些文档里没有描述的问题。这时候还得打电话确认,是否有遗漏什么。用文档或说明书去管理环境,存在很大的弊端,所以我们想到了用命令的方式去管理。

阶段二:命令

第二阶段,我们通过命令的方式,写了各种shell、Python脚本,把相关命令组合在一起。之前我们在做一个产品的私有化交付的时候,一开始的做法就是用脚本去管理环境,因为开启一个新环境实在太痛苦了,需要花很多时间改参数、找包、配IP等,效率太低。所以我们写了脚本来管理,用脚本代替了文档。

但是用脚本管理环境也存在很多问题。我们要应对各种各样的环境,同一个任务在不同的场景里,命令组合可能是不一样的,所以脚本会越来越多,维护脚本的成本也越来越高。

阶段三:声明

为了解决命令脚本的维护和稳定性问题,我们进入了第三个阶段,声明式——通过配置的方式表达环境,把环境定义出来。声明式的描述提供了环境的确定性表达。

以k8s为例,我们以一个例子来看,如何做环境声明

上图是K8S的简单架构,左上角是K8S的master,左下角是node,master有好几个组件:scheduler、ControllerManager、APIserver,以及Etcd。Etcd是一个分布式存储,配置信息都在Etcd里面。Node是物理机或者虚拟机,在每一个Node上面会有多个pod,上面会运行很多的容器。

我们知道K8S的最小单元是pod,里面有容器,还有各种网络存储等,通过pod声明去描述。声明被apply后,具体的事情在controller里面处理。

通过sidecar分离关注点

我们写一个应用,这个应用里面大量的代码其实与业务无关,而是包含很多服务治理的代码,例如日志、监控、限流、熔断等。这些代码占了很大的比重,而且这些代码的维护者和应用开发者不一定是同一批人。服务治理相关的代码,在很多企业会有专门的团队负责维护和升级,类似阿里的中间件团队。传统的情况下,我们需要升级并重新部署应用才能升级服务治理能力。但是在云原生时代,应用开发者希望仅关注应用业务代码,服务治理相关的代码放在其他的容器里面,业务容器和服务治理容器通常会编排在同一个pod里面,但是服务治理容器的管理、开发、发布都跟应用开发者没有关系,这些就是sidecar容器。sidecar容器实现了关注点的分离,应用的开发者和中间件的开发者以及运维相关的开发者,都可以有自己的关注点。

我们以两个角色为例,一是业务的开发者,关注的是应用的容器,所以发布的时候,他的关注点都在应用容器这一块。二是企业的SRE,他的关注点往往在sidecar的各种服务治理容器上,比如logagent的日志级别和采样率是否合理等。

通过sidecar,业务开发者和SRE的关注点就分离了。这样分离还有一个好处,就是中间件下沉,都以sidecar的方式管理。一旦遇到相应的中间件需要升级,业务代码不需要做任何的改变和发布,只需要做sidecar的发布就好了。

我们前面提到,一致的环境需要有3个组成部分:相同的制品、相同的运行上下文以及相同的编排规则。相同的运行上下文,本质就是里面的配置要一致。最早我们是用文档告诉我们怎么把环境管理起来,之后用脚本,最后用环境声明。

然而,用声明式的方式定义环境也并不完美。举个具体的例子,在应用运行的时候需要有一些相应的配置,中间件、基础资源、CPU、存储等都需要配置,这样会面临一个很大的问题——环境相关的配置太多了。

环境相关的配置太多,该怎么管理好呢?

通过IaC来定义环境

为了解决这个问题,业内采用了IaC的概念(InfrastructureasCode)。早期在云机房上架的时候会用到IaC,比如有一个新的机器过来,要装成centos7的系统,里面要配特定的DNS服务等等。这是就会定义一个声明文件,发送给saltstack这样的工具。现在整个环境都是通过基础设施来描述出来的,所以整个环境包括中间件的资源都是基础设施了,在范围上比原先要广的多。

从配置的角度,我们有应用配置、运维配置、基础设施运维配置,甚至软件生产过程的配置。我们把应用代码和IaC代码,放在两个库里面(也有放到一个库里面的,各有利弊,在此我们不展开也不评价)。

比如上图中,在IaCRepo里我们放了动态配置(即运行时的配置)、BaaS配置(基础设施,如数据库、中间件存储、消息队列等)、监控配置(如监控粒度、采样频率)、发布配置等。所有的配置都声明在代码库里面,基于该声明编排的所有环境就都是一致的了。

任何事情都是有利有弊,用IaC的方式管理环境又会带来什么新的挑战呢?

首先是“灵活的代价”。因为所有的配置都是松散的文本,缺少统一的聚合根,导致修改者需要自己理解这些配置背后对应的依赖关系。比如某个配置项设置为on会开启限流,但是必须配合特定的configMap一起使用;比如开启了一个Ingress插件,但如果另一个Rollout插件没有开启,会无法正常工作;再比如HPA和CronHPA无法同时使用,会产生冲突。由于编写的灵活性,会导致无穷的组合形式,其组合产生的后果往往在运行时才会发现。

其次是知识的成本。IaC将一个环境所有的配置都以文本的界面给到了开发者,但是很多配置项是需要专业背景的,比如运维相关的策略、比如监控的配置方式等等,价值IaC本身的学习成本,往往让很多开发者望而生畏。

为了解决这个问题,阿里联合微软一起发布了OAM模型,以应用为统一维度,将IaC包含的各类资源和角色进行了分类和聚合。

首先,OAM引入了应用(Application)的概念,将应用的各类IaC配置都聚合在一起,解决其依赖问题。

其次,OAM将IaC的使用者分离为:应用开发者、应用运维、基础设施运维三大角色,彼此的关注点进行了分离。

OAM抽象和简化了IaC的定义和维护方式,降低开发者的学习和使用成本。

总结一下,我们认为,环境管理的终态是软件定义的不可变环境,而当下,它的最佳实践我们认为是基于OAM模型的、以应用为核心的IaC声明。

云效云原生应用管理平台AppStack正是基于OAM的应用交付平台,企业在云效AppStack,可以通过应用编排、占位符、变量等声明式定义,实现一套编排多环境差异化部署,同时基于版本和基线实现环境一键拉起、一键回滚。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

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

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

相关文章

开发之痛:稳定的测试环境,怎么就那么难

简介:开发之痛:稳定的测试环境,怎么就那么难。对于生产环境,准确、稳定最重要,我们推荐以应用为中心的基于OAM和IaC的实践方式;对于测试环境,隔离、低成本和稳定的依赖是最重要的,我…

天腾动力携Motinova 和 Welling E-bike电驱新品亮相EUROBIKE 2022

【德国法兰克福】2022年7月13日,欧洲国际自行车贸易博览会(EUROBIKE 2022)在法兰克福开展迎客。作为欧洲三大自行车展之一,EUROBIKE 2022被誉为行业潮流的风向标,吸引着品牌商、贸易商、采购商以及众多自行车爱好者的目…

阿里云云原生一体化数仓正式发布 助力企业数据驱动业务创新

简介:云原生一体化数仓是集阿里云大数据产品MaxCompute、DataWorks、Hologres三种产品能力于一体的一站式大数据处理平台。核心是3个一体化和全链路数据治理能力,包括离线实时一体、湖仓一体、分析服务一体、全链路数据治理。 2月16日,阿里云…

一文读懂云原生一体化数仓

简介:阿里云云原生一体化数仓产品技术深度解读。 本文大纲 一、云原生一体化数仓的发布背景 1 市场情况 2 挑战和痛点 二、云原生一体化数仓是什么 三、云原生一体化数仓的技术理念 1 离线实时一体 2 湖仓一体 3 分析服务一体 4 全链路数据治理 一…

西安交大计算机考研分数线2020院线,西安交通大学2020考研复试分数线已公布

2020西安交通大学考研复试分数线已公布!点击查看>>34所自划线院校2020考研复试分数线。2020考研国家线已公布,当前2020考研考生需全力准备考研复试/调剂工作>>考研复试学习指南,让你不再盲目备战​西安交通大学公布2020年硕士研究…

Graphcore 联合百度飞桨提交 MLPerf Training 2.0,IPU 性能再下一城

作者 | 宋慧 出品 | CSDN 云计算&AI 科技大本营 为 AI 与机器学习提供更高性能的支持,是芯片厂商的竞争特点。最近,AI 芯片厂商 Graphcore 联合国内知名的深度学习平台百度飞桨,共同提交了 MLCommons 的 AI 基准评测 MLPerf Training 2.…

创新推出 | Serverless 调试大杀器:端云联调

简介:端云联调功能,不仅提升了 Serverless 应用的开发者的开发效率并且带来了良好的开发体验;让本地开发环境突破网络限制,真正实现和云端环境融为一体,一文带你了解,端云联调功能是如何解决应用调试难题的…

密立根油滴实验的计算机仿真实验报告,H-D光谱实验的计算机仿真

对H-D光谱实验进行计算机仿真,由计算机控制的摄谱仪进行氢氘光谱摄谱,对谱线寻峰,计算出里德伯常量、氢氘质量比和同位素位移,并画出了氢原子的能谱图。维普资讯 http://www.wendangwang.com第2 7卷第9期物理实验PH Y SI CS EXPERI EN TA T 1 N M 0Vo . 7 NO 9 12 .Se p., 0 20…

独家交付秘籍之招式拆解(第一回)

简介:上一回说到经历种种交付难题的王小锤一行人,意外发现一本交付秘籍,打开了新世界。本次他们带着具体交付场景来到阿里云,与交付宗师阿莫探讨秘籍中的招式以及招式背后的秘密。 作者:吕莫、新钰 前情介绍 大家好…

白鲸开源再获数千万元融资,完善 DataOps 开源生态,打造下一代云原生智能DataOps平台

Apache DolphinScheduler是首个由国人主导并贡献到Apache的大数据工作流调度领域的顶级项目。作为已经十分流行的开源调度项目,已有48位Committer和21位PMC,360 Contributors 积极参与到社区的共建中。自开源以来,Apache DolphinScheduler稳步…

国内唯一,阿里云容器服务进入 Forrester 领导者象限

简介:近日,国际权威咨询机构 Forrester 发布《 The Forrester WaveTM: Public Cloud Container Platforms, Q1 2022 》报告,报告显示,阿里云进入全球公共云容器平台"领导者"象限,这是中国云计算厂商首次进入…

K8s Ingress Provider 为什么选择 MSE 云原生网关?

简介:在虚拟化时期的微服务架构下,业务通常采用流量网关 微服务网关的两层架构,流量网关负责南北向流量调度和安全防护,微服务网关负责东西向流量调度和服务治理,而在容器和 K8s 主导的云原生时代,Ingress…

在 Kubernetes 上执行 GitHub Actions 流水线作业

作者 | Addo Zhang来源 | 云原生指北GitHub Actions 是一个功能强大、“免费” 的 CI(持续集成)工具。与之前介绍的 Tekton 类似,GitHub Actions 的核心也是 Pipeline as Code 也就是所谓的流水线即代码。二者不同的是,GitHub Act…

将信息系学生的计算机文化学,计算机等级考试(国家)-关系数据库操作语言sql(四)...

计算机等级考试(国家)-关系数据库操作语言sql(四) (8页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!10.90 积分关系数据关系数据库库操作操作语语言言SQL(四四)设计题设计题 在SQL Server 2000中&a…

系统困境与软件复杂度,为什么我们的系统会如此复杂

简介:读 A Philosophy of Software Design 有感,软件设计与架构复杂度,你是战术龙卷风吗? 作者 | 聂晓龙(率鸽) 来源 | 阿里技术公众号 读 A Philosophy of Software Design 有感,软件设计与架…

节省 58% IT 成本,调用函数计算超过 30 亿次,石墨文档的 Serverless 实践

简介:石墨文档使用函数计算搭建文档实时编辑服务,由函数计算的智能调度系统自动分配执行环境,处理多用户同时编写文档带来的峰值负载,函数计算的动态扩缩容能力保障应用的可靠运行。 作者 | 金中茜 对石墨文档来说,“…

剖析 Netty 内部网络实现原理

作者 | 张彦飞allen来源 | 开发内功修炼Netty 是一个在 Java 生态里应用非常广泛的的网络编程工具包,它在 2004 年诞生到现在依然是火的一塌糊涂,光在 github 上就有 30000 多个项目在用它。所以要想更好地掌握网络编程,我想就绕不开 Netty。…

免费体验,阿里云智能LOGO帮你解决设计难题

简介:超实用!零基础搞定一个高大上的智能logo设计 新年过后,往往是大家一年中士气最足的时候,散去了年末的疲惫和emo,重燃对新一年的热情和希望。 想创业的朋友们同样意气风发,趁着新年的劲头想大干一场。…

第十一届吴文俊人工智能科学技术奖颁奖盛典召开,66个项目成果摘得中国智能科学技术奖励最高殊荣

7月16日上午,我国智能科学技术最高奖“吴文俊人工智能科学技术奖”颁奖盛典在北京隆重举行,66个获奖项目及个人受到表彰奖励。中国工程院院士、浙江大学教授潘云鹤荣获“吴文俊人工智能最高成就奖”,并颁授荣誉奖牌和100万人民币奖金。欧洲科学院院士、华…

企业拥抱开源之前,必须了解的七件事

简介:新的时代,开源的发展越来越蓬勃,开源和云的关系越来越复杂,耦合度越来越高,云是开源软件允许的最佳环境之一,也为开源软件插上安全高效的腾飞引擎。本文试图从企业软件的历史,结合开源软件…