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

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

开发者学堂课程【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. 测试环境:用尽可能少的资源进行独立的测试-隔离、复用、模拟

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
存储 安全 API
利用对象存储(OSS)实现内容分发加速 :高效可靠的解决跨境下载延迟问题
利用对象存储(OSS)实现内容分发加速 :高效可靠的解决跨境下载延迟问题
807 2
|
3月前
|
安全 PHP 开发工具
Web渗透信息收集进阶
网站敏感目录与文件指易被恶意扫描利用的路径,如后台管理、.git、.svn等,可能导致源码泄露或权限入侵。常用工具如御剑、Dirbuster、Dirsearch可探测此类信息,需加强安全防护。
612 58
Web渗透信息收集进阶
|
4月前
|
JSON API 数据安全/隐私保护
【干货满满】分享淘宝API接口到手价,用python脚本实现
淘宝开放平台通过API可获取商品到手价,结合商品详情与联盟接口实现优惠计算。需使用AppKey、AppSecret及会话密钥认证,调用taobao.tbk.item.info.get接口获取最终价格。代码示例展示签名生成与数据解析流程。
|
3月前
|
存储 人工智能 弹性计算
阿里云权益中心详解:个人开发者与企业用户和高校学生与教师的综合优惠平台
阿里云权益中心是什么?简单来说,它是一个致力于为高校学生和教师、个人开发者、企业用户提供优惠上云和快速上云的平台,本文将深度解析权益中心的核心活动、适用场景及参与方式,以供您了解和参考。
|
存储 自然语言处理 物联网
StableDiffusion-02 LoRA上手使用实测 尝试生成图片 使用多个LoRA 调整LoRA效果 10分钟上手 多图
StableDiffusion-02 LoRA上手使用实测 尝试生成图片 使用多个LoRA 调整LoRA效果 10分钟上手 多图
449 1
|
11月前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
515 11
CSS3制作的聚光灯下倒影文字选装动画特效源码
CSS3聚光灯下倒影文字特效是一段基于CSS3实现的聚光灯下带倒影的文字旋转动画效果代码,具有真实的视觉感,同时文字还会在旋转过程中显示出灯光的反射效果,很有意思,欢迎对此段代码感兴趣的朋友前来下载使用。
148 6
|
前端开发 JavaScript
svg圆形进度条插件svg-gauge
svg-gauge是一款基于SVG的圆形进度条插件。该插件无任何依赖,可以轻松的制作出各种圆形进度条,以及圆形进度条的动画特效。
|
缓存 安全 JavaScript
PHP在Web开发中的平台优势与未来趋势###
【10月更文挑战第21天】 PHP,Hypertext Preprocessor,凭借其灵活性、广泛应用和强大社区支持,已成为Web开发的常青树。本文探讨了PHP的发展历程、核心优势、最佳实践案例及面临的挑战与机遇,揭示其在现代Web开发中不可替代的角色,以及如何适应未来技术趋势,持续引领Web创新。 ###
193 2
|
机器学习/深度学习 人工智能 算法框架/工具
探索AI在图像处理中的应用
本文深入探讨了人工智能(AI)在图像处理领域的应用,包括图像识别、图像增强和图像生成等方面。通过实际代码示例,我们将展示如何使用AI技术进行图像处理,并讨论其在不同场景下的应用。