关于程序员:PingCode-的环境和环境管理

29次阅读

共计 4103 个字符,预计需要花费 11 分钟才能阅读完成。

一个软件产品的稳定性、可靠性、可用性很大水平上取决于咱们如何无效地治理它的环境。这里的”环境“指的是咱们在运行软件时,须要的一整套组件,包含硬件、零碎、服务、资源、工具和软件自身。在一个衰弱的软件开发流程中,咱们通常须要很多个环境来服务于这个软件产品。它们服务于不同的场景,缺又都撑持着整个交付流程。在这些环境中,有的必须齐全独立的,有的能够共用一些基础设施组件,有的罗唆就是启动了多个实例而已。阶段不同、产品不同,环境就又差别,接下来我就跟大家分享一下 PingCode 会应用到的环境:

Tips:PingCode 是由 Worktile 团队打造的智能化研发管理工具,帮忙企业实现对研发过程两条工作流的治理,实现研发治理过程的自动化、数据化、智能化,帮忙企业晋升研发效力。《延长浏览:PingCode 是什么》

本地环境

本地环境是开发人员进行开发和调试的中央。在本地环境,开发人员简直能够拜访到所有必要的信息,也能够通过批改代码来实现必要的尝试,再加上本地环境中通常装置了开发人员最棘手的工具,因而这个环境是最让开发人员舒服的。不过在 PingCode 构建一个残缺的本地环境并不容易,因为 PingCode 蕴含了上百个的服务,波及到几十个代码库,要想把他们都配置起来那可太难了。好在构建一个残缺的环境其实并没有那么必要,开发人员只是须要一个可能把本人的我的项目代码运行起来的环境而已,这时候让本地程序间接连贯开发环境的局部资源就能够了,咱们只须要将数据拆散开来就好了。

开发环境

开发环境是团队对立构建软件的中央。开发环境通常具备较为残缺的基础设施组件,然而软件性能会比拟新,而且还充斥着半成品,很多开发人员还会间接批改数据库来达到一些特定的成果,不过这些都是必要的,每个“丑陋”的软件产品都有这样芜杂的车间。在 PingCode,咱们的开发环境其实是一个虚构的环境,它可能帮忙开发人员提供各种各样的服务,然而它不是一个具象可见的环境,它的所有服务都是映射自咱们的测试环境,包含数据库和其余基础设施组件。这样当然有其益处,因为咱们能够少保护一个环境,你要晓得,开发人员在相似的事件要做两次这件事上是很在意的,所以缓缓的咱们就养成了间接用“测试环境”的服务和数据来验证本人新性能的习惯。

享受了便当,就要承当它带来的隐患,那就是数据的准确性。PingCode 是一个企业用的多租户服务,它的数据体系是基于一个又一个的“企业”,于是咱们就约定俗称为人手几个“企业”账号,只有不波及全局通用数据,本人“企业”下的数据轻易应用。

测试环境

测试环境是咱们用“肉眼”体验和测试产品的中央。相比开发环境来说,测试环境更加的独立、残缺和稳固。除了软件版本和服务器的性能之外,咱们应该在各方面都致力让它和生产环境保持一致。因为如果测试环境和生产环境的差距过大,那么有些问题咱们是很难在开发阶段发现的,而一旦过了测试环境,定位和修复缺点的复杂度就会越来越大,曾经有大量事实证明,发现问题的中央越靠后,修复它的老本也就越高。在我看来,构建一个弱小测试环境的老本肯定比频繁定位生产环境问题的老本要低多了。咱们为测试环境的投入十分大,它的复杂度也就小于生产环境而已,尽管硬件配置上不如下文中的很多环境,然而它的组件完整性简直和生产环境统一。除了运行 PingCode 必须的各类组件之外,日志零碎、监控零碎、平安组件、内部零碎的账号等也都是独立的一套。环境能力是一方面,PingCode 自身的服务的稳定性也很重要,咱们通过 PR 流程和 CI/CD 流程来保障合入测试环境的性能的准确性,而后通过回滚和数据还原能力来进行兜底。



Feature 环境

Feature 环境是一组用于体验还未合入到主版本的新性能的中央。这些环境通常是几个并存,它们都是随用随建,用完即删。不过每个 Feature 环境在应用上不太一样,有的环境须要独立入口,然而基础设施组件和罕用的 PingCode 服务能够共用;有的环境则要求必须是完完全全独立的环境,这取决于开发团队的需要。比如说:一些跨子产品的重大性能,开发周期也很长,开发团队就会申请创立一个 Feature 环境;还有一些 PingCode 前端的我的项目在提交 PR 的时,咱们会主动为其创立一个专门用于预览 PR 里新个性的环境。这些 Feature 环境是为了爱护主版本的开发顺利推动的同时,满足一些并行开发的需要。



预公布环境

预公布环境是一个更像生产环境的”测试环境“。这个环境通常是给产品经理们验收产品用的,它还有很多别名,最常听到的就是 Staging 环境,咱们外部简称它 Beta 环境。在预公布环境上的测试过程很像一个实在客户在应用产品,这使得测试数据更加真切,咱们也更容易领会到产品性能是否真的正当。除了性能层面的测试,预公布环境还会进行部署层面的测试,不同于通过主分支上的代码变动实现测试环境的继续部署,咱们通过打 Tag 来实现预公布环境的部署,而这次部署用的制品(Docker 镜像)将被长期寄存在制品库里,也只有通过验证的制品能力用于前面的环境,相当于性能锁定了。



验证环境

验证环境是专门用来验证 PingCode 重要降级计划的环境。为了更加贴近的生产环境的降级状态,验证环境的基础设施配置会高度模仿生产环境的配置,通过在这个环境中执行降级计划,咱们能够察看到各个根底组件的压力,从而让咱们更加理解本次版本升级计划,也晓得如何应答可能呈现的问题。不过验证环境的老本着实不低,不适宜长期运行,而且也不是所有的降级都有必要这么验证,绝大多数的日常变更间接滚动降级即可,只有那些变动很大,拿不准的降级计划才须要走一遍验证环境,而须要应用验证环境时,通过咱们的自动化流程现构建一个验证环境即可。



基准环境

基准环境是专门用于性能测试的环境。性能测试只是一个概括性的说法,咱们定期会进行这样的非功能性测试,而这类测试最吃环境了,因而咱们筹备了一个同比例放大生产环境的环境,并将其命名为基准环境。在基准环境中,咱们部署一个指定版本的 PingCode,而后在另外一台服务器上执行事后写好的脚本,最终咱们将跑进去的后果按比例放大,粗略的得出一个性能测试后果,最初再用这个后果领导咱们的改良方向。

金丝雀环境

金丝雀环境是引生产环境的流量来验证新性能的环境。它是软件产品全面部署到生产环境之前的一个小流量测试环境,先部署到金丝雀环境能够提前发现一些上线后的潜在危险,减少开发人员的信念,这在 PingCode 外部是必不可少的一环,简称上 RC 环境。咱们会提前邀请一些客户和使用者,比方咱们公司本人,退出到这个引流的策略里,而后借由这些实在的流量测验新性能的可用性,直到新性能稳固运行一段时间之后才能够申请部署到生产环境。须要阐明的是,金丝雀环境共用了生产环境的基础设施组件,包含数据库,因而在新性能部署到生产环境之后,这些提前“新增”的数据并不会遗失。



生产环境

生产环境是给客户应用的环境。保障生产环境的稳定性是保障企业的商业根底,这里我就不开展。

灾备环境

灾备环境是专门用于灾备场景的环境。比方其中一个作用是进行灾备演练,咱们会将一些十分重要的、业界有通识的、咱们遇到过的问题定义为演练项,而后通过演练这些劫难和执行对应的预案让咱们的技术团队可能对劫难有同理心和应答力。

演示环境

演示环境是咱们为客户演示时应用的环境。这类环境不同于其余环境,它不是在技术的视角来服务于产品稳定性的,而是在商业的视角服务于业务稳定性的。作为一个专业性的软件,客户在本人摸索的过程中会遇到很多问题,这时就须要一些产品专家将软件的设计理念更好的传播给客户,于是就有了这样的一套环境。这个环境外面的数据是咱们的产品专家提前创立好的,并且每天都会重置,而后由客户参谋顺着产品专家的思路带着客户体验一下产品性能,这样就能更好的疏导客户意识咱们的产品。



环境治理

其实除了上述这些环境,咱们还有很多其余的环境,比方用于公有部署场景的、用于基础设施组件测试的,那么这里就引出了另一个问题。当咱们只有一个环境时,咱们只须要围绕着这一个环境解决问题;当咱们有三个环境时,咱们能够通过容器化和容器编排来更高效的管理应用程序,而环境自身的问题无非就是比一个时多一些而已;可是当咱们有几十个环境时,那多进去的这些环境问题就须要咱们认真思考了。

首先,咱们须要把“环境”当作一种资源来了解。如果了解的纯正一些,环境是一整套包含硬件、零碎、服务、资源、工具等内部组件的汇合,而咱们的软件只是运行在这个环境中的一个实例,就像鱼缸和鱼的关系一样。那咱们当初有几十个环境,每个环境中运行一个 / 多个软件实例,那就是并排着摆着几十个鱼缸,每个鱼缸里都有鱼在游来游去,鱼缸大小不统一,鱼儿们的样子也不尽相同。咱们还须要将软件的新版本继续的通过 CD 部署到不同的环境中,再进一步,咱们随时须要创立一个新的环境,而后将 CD 接入进去,实现首次的部署,再进一步,咱们只须要一个信号,就能够销毁掉这个环境,开释掉它占用的硬件、网络等资源。那么环境是什么,环境治理又是什么,我置信大家曾经有了一个根本的概念。

其次,环境越多自动化和对立配置能力就要越强才行。这里的自动化不只是构建、制品和部署,它还包含通过脚本创立和治理环境里的所有组件(这里欢送大家浏览咱们另一篇文章「基础设施治理之 pulumi」);而配置能力则体现在应用程序所须要的环境变量、容器编排须要的参数、内部通用资源的接口等信息都应该存储在一个配置中心里,它主持着所有环境的所有变量。在这两个外围能力具备了之后,接下来须要的就只是一个调度核心而已,这个调度核心一是负责和使用者们交互,二是通过它背地连贯的自动化和配置核心能力。到此咱们就能够实现按需创立和销毁环境了。

最初,尽管环境治理看上去仿佛应该是一种更底层的能力,咱们所有的环境都应该基于一个计划来治理。然而实际上我认为谋求这种极致没太大的意义,环境就是有其特殊性,不适宜一刀切,尤其是开发环境、测试环境和生产环境这种重要的环境。我认为环境中的自动化是必不可少的,但所有都自动化这就没必要了。

好了,明天就跟大家分享到这里吧。

正文完
 0