环境管理的应用场景 | 学习笔记

简介: 快速学习环境管理的应用场景

开发者学堂课程【ALPD 云架构师系列:云原生 DevOps 36计-阿里云云效出品环境管理的应用场景】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/772/detail/13504


环境管理的应用场景


内容介绍:

一. 生产环境

二. 测试环境

三. 开发环境

四. 回顾


一. 生产环境

image.png通常情况下我们把生产环境测试和开发环境隔开一个线环境 一个线上环境 所以在这里画了一个防火墙。这其实是根据目的不同做出的分隔。

1. 问题如果只有一套环境,这套环境应该是什么环境?

答案:生产环境

如果没有生产环境,就没办法提供服务了

如果有两套的话,就可以加个测试环境。我们可以牺牲开发环境我们需要来验证这个服务在真的生产环境里头能不能跑起来所以需要一个生产环境测试环境来去做相应的一些验证。那么这两者环境应该尽可能是一致的

2. 生产环境(要求):准确、稳定地运行

产环境与测试环境最大的不同,在于服务运维和服务治理的更高要求

有没有生产环境意味着这个服务能不能外提供如果没有生产环境,就相当于没有服务

生产环境有非常大量的运维和治理的诉求在生产环境里运维和治理的诉求会更多比如通常情况下测试环境中,可能给一个CPU一个节点就够了生产环境肯定要考虑备份 以及储备考虑各种问题,而且它的策略会有很多种,还会有很多这样的要求所以生产环境最大的特点就是一定要准确、稳定地运行。

同时这个准确稳定就带来了非常多的配置的诉求,以及运维和服务质点配置诉求所以就会包含很多的应用配置应用运用配置等。所以生产环境的特点就非常鲜明,就是配置会非常多

所有这个也说明了我们为什么需要OAM模型这种模型,去管理我们的配置

3. 问题:谁会用到生产环境,又该由谁来维护?

答案:生产环境由 Dev 和 Ops 共同来保障

这个不同人可能会有不同的结果或者说在不同的企业里可能职责安排是不太一样的也可能跟我的产品和产品行业形态有关这个并不没有一个确定的一个答案。

其实生产环境,就是应该是开发和运维来共同来保障的当然实际情况可能并不一定是这样的,可能有些团队是没有运维同学的或者有非常好的运维保障为什么我们这么说呢因为生产环境本身包含很多东西它包含应用配置应用镜像环境配置

应用运维配置以及系数设施应用配置这些不同的配置和镜像的内容是有不同的人来去关注和管理的比如镜像本身显然是没有开发写代码,就只是发布可能就会动镜像或者动配置,我们就会改应用运维配置

而这些改动都会生产环境产生影响可能会带来生产环境的一个变化也可能带来一个风险 所以这个问题显然应该是开发和运维来沟通保障的。


二. 测试环境image.png

这里我们列举出来了两种环境,一种是集成环境一种预发环境也就是类生产这里其实是有不一样的,预发过程基本上是做验收的一个过程而集成环境里更多是做集成测试 或者是相应的一些功能性的测试过程

在不同阶段不同的环境用到的目的是不太一样的

1. 分布式应用持续交付流程面对的挑战

在测试环境里,会面临哪些挑战呢?

image.png

是一个典型的应用场景。也就是所谓的分布式的一个应用,在微服务化之后分布的情况就越来越明显了

在整个持续交付的流程中,面对的挑战很多都是跟环境有关的

首先,因为缺少有效的本地验证手段,进入集成环境的应用变更质量无法保证。

在中间提升测试阶段,由于服务应用之间的依赖关系,当某一服务处于不稳定状态,影响其他服务,无法保证主干集成有效进行所以经常没办法很好的进行整个日常集中测试然后到预发的时候因为前面的没办法保证所以可能着预发。所以大多数的集成验证从日常环境被转移到预发环境。

因为发是一个相对高成本的环境。但是不可能每一次变化都占所以这样的话预发就变成一个长期环境,这就会导致交付周期所以说,单个服务应用无法保证有效的日常集成验证,开发者开始采用长分支开发策略,批量预发集成成为常态。

目前来说大家遇到的比较多的测试环境的问题第一个就是服务没有进行有有效的治理服务放太多了然后一旦有一个有问题其他都有问题比如日常集成环境里到相来说都是处在变化当中的服务假设按图里的abcdabcd任何应用都有可能正在发布部署而且部署的时候都是没有被验证过的它是临时不稳定的彼此之间又有依赖,整个集成环境是不稳定的

第二点,如果没有在之前做相应的验证,就将所有东西都放在里基本上也会导致这种情况。

第三点这个原因导致所有的测试都会往右预发,预发之后可能又会转为线上

⑴挑战:服务之间的依赖image.png

Scenario 1:A对C的强依赖,A的功能成功与否取决于C的质量

Scenario 2:C的变更,同样需要对A的有效性进行验证

⑵挑战:环境的稳定性

Scenario 1:如何保证测试机器的稳定性

Scenario 2:如何保证测试机器资源的利用率

Scenario 3:在服务依赖的环境下,如何保证升级过程中服务的稳定性

Scenario 4:有服务依赖的环境下,如何定位问题

刚才我们举到一个例子在日常集成环境里,如果是一个大集成环境,那么所有的服务基本上都是太稳定的而且如果一个服务的可用性是10%,那这个系统是怎么样来去保证它的稳定性

2.如何保证测试环境的稳定?image.png

如果应用A依赖于应用B,在同一测试环境中,由于B的变更部署,导致A的验证被打断

⑴双机部署

image.png①每个应用服务在测试环境中都分别有至少两个实例部署在不同的机器上,互为备份。

蓝绿部署,在部署阶段,分两步部署,首先部署备机,当备机起来后可以提供服务,再部署另一个机器,而在整个过程中,服务不中断。

N+1部署

image.png①在整个测试环境中,有N+1台机器,其中,N表示有N个应用服务实例分别部署在测试环境的N个机器上。+1台机器做为升级部署的机器。

在部署过程中,先在+1台机器上部署升级的应用服务,服务起来后,将之前的应用服务切换到新部署的机器上,而原先的旧服务所在机器,成为部署用的+1机器。

⑶隔离环境image.png

这里把项目环境隔离出来一个环节针对一个特性在开发的时候给他单独的拉一个环境出来,也就是隔离。这样它跟谁都没关系,它所依赖的是稳定的环境我们就可以保证在里面只有他是不稳定的其他环境都是稳定的

这种情况下就可以让独立的去开发测试但很多时候在早期的时候一个项目预集成依赖的是还是日常集成环境 但是这也比直接放到日常集成环境要好很多但这个过程当中,会发现其实日常集成环境还是有问题因为有一些人会用项目预集成环境去做验证有一些又不会,而是直接上去了,这就导致日常集成依赖会有很大问题 

⑷引入稳定环境

image.png①稳定环境是由从正式线上版本一致的应用服务组成的系统。

在日常集成环境中,所有的依赖不依赖于日常集成环境本身,而是依赖于稳定环境。

image.png

基础环境也要有一定的维护成本需要部署另外机器资源对于大公司来说不是太大的问题。但是对于小公司可能会是个问题

然后主要的成本是维护的成本就是要监控它一旦基础环境出现问题还要去修复它这个是主要的成本,也就是在人力上的损耗

而且基础环境的维护者一般不是这个基础环境的使用者。所以候需要有一个比较成熟的机制去保证这个基础环境的长期稳定的运行

⑸问题:如果没有基础环境提供稳定依赖哪一个环境是最稳定的呢

答案:生产环境

在做测试的时候,有没有可能依赖的基础服务是在生产环境上的呢?那么这个理论上是可行的如果说我们的安全隔离能力做得足够好数据链路的隔离做的足够好监控做的足够好安全保护做的足够好事实上我们是可以用生产环境来做基础环境的生产环境的

基础环境作为依赖环境它要面临解决两个重要的问题

第一个就是隔离流量隔离相来说问题不太大目前来说云原生之后从以前面向资源到现在面向流量基本上比较容易做隔离

第二点是数据这是一个挺大的挑战尤其是因为现在的数据式多样比如消息数据普通数据库就不一样收藏的不一样可能大数据又不一样这里就有很多非常麻烦的问题

3. 测试环境:用尽可能少的资源进行独立的测试image.png

为了隔离,如果要打通外部的一些服务,然后这个外部服务出问题了这时我们可以模拟一个外部服务来去帮助我们做测试环境的创建

4. 测试环境举例:某大数据产品

比如大数据产品,可能环境要求太高,就没法做测试环境

最早的方式就是就用一套测试环境去做这个事情这个显然是很低效的。如果就一套测试环境,如果互相冲突的情况下几乎没法做测试

那么这么多个服务和应用其实是可以把它分了三层的。

应用:控制台等相关应用

独立服务Redis、 Zookeeper

公共服务Hive、 Kafka、 MySQL

Hive、Kafaka、MySQL属于公共服务,被所有环境所共享,通过分区等手段隔离

每个测试环境都会部署一套独立服务

每个测试环境根据需要部署相关应用,保证应用间的服务发现

测试环境都是临时环境,使用完之后即被销毁

 

三. 开发环境image.png

开发环境的范围包含很多比如开发要用到的一些工具链包括构建要用到的所有工具链,还有提高生产效率的一些东西但在这里我们更多关注的是怎么把服务跑起来怎么去做调试和测试

1. 开发环境的三个问题:

理想的情况下,开发环境是能够跟其他测试的技术环境互相打通的所以就有三个要解决问题

怎么访问基础环境中的服务?

怎么被基础环境中的服务访问到?

怎么与来自其他环境的请求隔离开?

推荐工具:https://github.com/alibaba/kt-connect

2. 工具推荐

⑴终端工具:iTerm2(Mac)、wsl-terminal(Win)

Shell: zsh + ch-my-zsh (plugins: autosuggestion, syntax-highlight, interactive-cd )

⑶终端分屏:tmux

模糊匹配:fzf

模糊查询:ripgrep

文件查看:bat

命令行下的编辑器:neov

k8s 联调:kt-connect

docker 镜像查看:dive

3. 问题:外部环境受限,无法采用 k8s 部署怎么办?

很多时候其实外部交付的形态如果有没当然更好了如果没有首先容器能不能用如果容器也不能用,那么看测试环境能不能用测试环境可以用k8s管理因为我们用这些环境这些技术手段的根本目的是为了提升我们的生产效率和解放一些非常琐碎的事物所以我们要各种各样的工具手段,以及新的技术来帮助我们提升生产效率和派发效率


四. 回顾

1. 我们需要的是软件定义的不可变环境,相同的制品、相同的运行上下文、相同的编排规则

2. 借助k8s的编排机制,可以大幅提升环境使用效率,降低资源成本

3. 通过laC来定义环境,包括应用配置、应用运维配置和基础设施运维配置

4. 通过OAM模型让Developer、App Ops、Infra Ops三者的关注点分离

5. 测试环境:用尽可能少的资源进行独立的测试-隔离、复用、模拟

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
8月前
|
Dubbo 前端开发 Java
让你在组建企业级项目时手到擒来——浅谈各类常用工具和框架概述
让你在组建企业级项目时手到擒来——浅谈各类常用工具和框架概述
|
24天前
|
敏捷开发 人工智能 搜索推荐
效率管理软件如何改变工作方式?全面介绍与应用场景
本文深入探讨了效率管理工具的定义、发展历程、功能特点及类型分类,帮助职场人士和团队更好地理解和选择这些工具,以提升整体工作效率。从个人任务管理到团队协作,效率管理工具通过优化工作流程、简化操作步骤和提升沟通效率,为现代工作方式提供了坚实支撑。
|
4月前
|
存储 运维 网络协议
运维的基本概念:服务器和网络基础知识
运维的基本概念:服务器和网络基础知识
248 0
运维的基本概念:服务器和网络基础知识
|
5月前
|
Shell Python
软件环境管理问题之环境管理中常见的五个问题如何解决
软件环境管理问题之环境管理中常见的五个问题如何解决
|
5月前
|
运维 监控 大数据
深入探讨网络自动化的魅力所在,以及如何利用Python这一强大工具,实现网络设备的批量配置与监控
在信息洪流的浪潮中,网络自动化如同一盏明灯,引领着我们穿越复杂网络管理的迷雾。它不仅简化了网络运维人员的工作,更是在大数据、云计算等技术飞速发展的背景下,成为了构建高效、稳定网络环境的关键。本文将深入探讨网络自动化的魅力所在,以及如何利用Python这一强大工具,实现网络设备的批量配置与监控,以此展现网络自动化在简化复杂网络管理中的重要作用。
95 0
|
存储 监控 算法
转:数据结构与算法教程在监控软件中的优势与应用场景
数据结构与算法教程在监控软件中具有广泛的优势和应用场景。这些教程提供了开发人员所需的基础知识和技术,帮助他们更好地设计、开发和优化监控软件。
91 0
|
SQL 消息中间件 运维
环境管理的应用场景(一)|学习笔记
快速学习环境管理的应用场景(一)
263 0
环境管理的应用场景(一)|学习笔记
|
IDE Java 程序员
C++开发环境最佳实践
C++开发环境最佳实践
592 0
C++开发环境最佳实践
|
JSON 运维 Kubernetes
环境管理的应用场景(二)|学习笔记
快速学习环境管理的应用场景(二)
146 0

热门文章

最新文章