经理想要一个综合的开发和生产环境

我在一个支持更大组织的小型编程团队工作。今年,我们的经理决定我们将使用Oracle Apex技术来处理我们公司的绝大部分数据。

这没关系,除了我们只有一台Apex服务器。我们的经理已经下令在一个实例中发生一切。我们的团队正在开发应用程序,而我们的经理演示它们,而我们的内部客户使用它们,这显然是导致问题!

我们只能期望随着我们对Apex投入更多资金而变得更糟,应用程序变得越来越复杂,用户数量也越来越多。我听说最好的做法是拥有独立的开发,测试和生产环境,但为什么会这样呢?

The question: Why should we have separate development, testing, and production environments?

17
根据维基百科此处,Oracle APEX在免费的DB Express Edition上运行(EX),虽然您遇到备用支持通道,以及一些cpu /磁盘限制..
额外 作者 Ayyash,
你是一个受监管的行业吗?医疗保健,航空航天和金融就是一些例子。如果是这样,您对哪个行业以及您必须遵守的任何特定认证或监管文件了解?
额外 作者 Joel Spolsky,
哦别担心,只要等待足够长的时间,你就会发现为什么第一手。
额外 作者 Mr Rogers,
常识是,如果他们发现,您不会做任何让您的客户逃跑的事情。如果我是客户,我会跑。
额外 作者 gnasher729,
只有一个实例可用,你现在使用不同的模式来分离dev,test和prod,我假设?请确认!
额外 作者 Peter LeFanu Lumsdaine,
@Anon:WTF ???如何将开发和测试数据与生产数据分开?不要告诉你的经理是如此疯狂,让你以任意方式混淆。或者开发人员只是使用你所谓的项目模式,这意味着你实际上至少有一个开发和生产之间的模式分离?
额外 作者 Peter LeFanu Lumsdaine,
投票给Apex建立一个Web应用程序是一个很高的“毫无头绪”或“由高尔夫朋友驱动”的指标 - 抱歉
额外 作者 gap,
@Anon我相信也许英国对此有一些相当强大的要求。 此维基百科页面上列出了一些可能对此有疑问的英国代理机构。特别是,数据保护法案可能适用。
额外 作者 JimmyJames,
@Anon我的猜测是,经理想要这样做是为了省钱。您应该尽可能地根据成本确定答案。如果可以的话,您和您的同事也应该向更大的组织了解这是一个非常冒险的主张。这样,如果你无法说服这位经理,那么即将到来的不可避免的问题就不会落在你身上。
额外 作者 JimmyJames,
我真的希望在这里看到的答案将解释在开始生产之前在开发环境中开发生产与开发的专业人员和合作关系。不要竞争宣言以某种方式做到这一点。
额外 作者 candied_orange,
您居住在哪个国家/地区以及您在此数据库中存储了哪些类型的数据?如果您存储任何财务数据并居住在美国,您的老板很可能会要求您违法。 Sarbanes-Oxley限制对职责分离和开发人员访问生产环境非常严格。
额外 作者 solomonope,
Anon,欢迎来到程序员,很高兴我能够通过让你的问题更加明显来重新打开你的问题。如果我已经设法满意地回答了您的问题,您可以点击旁边的复选标记接受它,并且您也将在网站上获得+2。干杯,祝贺你的第一篇文章。
额外 作者 Aaron Hall,
@DanK这个国家是英国。数据是项目特定的,通常跟踪物理样本或其他项目资源(包括人们的时间)
额外 作者 Bazz,
@DocBrown我们目前为不同的项目使用不同的模式。我们没有dev,test和prod架构。
额外 作者 Bazz,

7 答案

为什么我们应该有单独的开发,测试和生产环境?

你有几个同时进行的活动:

  • 开发 - 开发人员提交代码,犯错误,实验等......
  • 测试 - 手动或自动运行测试,并且由于复杂性,可能会消耗大量资源。
  • 生产 - 为客户和/或企业创造价值

您是否希望所有这些都在同一环境中发生?您是否希望业务停滞不前,因为新的测试已经推动您的服务器交换硬盘驱动器并消耗处理器上的每个核心?您是否希望您的测试停止,因为开发人员通过缩放实验制作了一个复杂的叉炸弹?您是否想要在测试中使用开发人员的麻线和胶带来生产的代码? 您是否希望开发人员使用可能敏感的生产数据(我知道这并不是所有企业都关注的问题,但是在很多企业中都存在问题)?

是什么阻止了这些问题的发生?

独立的环境。

那么你需要什么?

You need 独立的环境。

正式提出来

由于以下原因,您需要单独的环境:

  • 降低阻碍业务和软件开发的风险。
  • 为了降低因开发人员的临时绑定而导致代码投入生产的风险。
  • 降低生产数据落入坏人之手的风险(当组织处理敏感数据(如身份证号码,财务和健康信息)或与测试数据混杂或被破坏时非常重要。

为您的背景,一个新的技术平台

也许这还不是真正的生产(因为它是一个相对较新的平台),但是当企业开始依赖它时,你将获得独立的环境,并且它们要么明智地预见到风险,要么通过努力学习来实现它办法。

18
额外
增加一个原因:降低开发人员失败的实验破坏关键业务信息而不是恢复的风险。
额外 作者 Dee,
还存在一个主要风险,即软件的开发或测试版本是从生产过程中意外引用的,或者相反,测试会修改生产数据。
额外 作者 JimmyJames,

我听说最佳做法是拥有独立的开发,测试和生产环境,但为什么会这样呢?

这些天不是那么明确。

许多地方不再进行手动测试,因此本身没有测试数据。更多的地方具有这样的规模,由于成本,它们无法再现其生产环境。特别是随着微服务的爆炸性增长,保持快速变化的环境同步到足以确保QA环境中的测试能够准确地再现事物以捕获将在生产中出现的错误变得具有挑战性。

为什么我们应该有单独的开发,测试和生产环境?

  • 如果用户看到您的测试数据非常糟糕。
  • 如果开发人员/测试人员看到您的产品数据会非常糟糕。
  • 如果你不能相信你的开发者不要严重破坏这些东西,你就无法迅速解决这个问题。
  • 如果您已实施自动化CI,则可以快速轻松地推广代码。

Essentially, if the cost of having the environments is less than the cost of not having the environments.

7
额外
@AaronHall - 不,你认为他们首先在本地开发,通过单元测试来验证核心功能。然后在许多公司中,您的部署将转到生产的某个子集进行冒烟测试 - 通常使用A/B测试,断路器或某种特征标记,以便于回滚。对于许多拥有正确支持的行业,赌注可以生产率低。
额外 作者 Telastyn,
如果我有一个开发团队,我知道的每一个都有一颗金子般的心,非常聪明和尽职尽责,我仍然不相信他们在生产环境中发展,除非赌注是非常低(在这种情况下它不是真正的生产,是吗?)
额外 作者 Aaron Hall,
+1。这基本上是一个nonanswer,但在这种情况下,nonanswer 的答案。
额外 作者 Elysian Fields,

Having only just one Oracle instance available does not mean the same as "no separation between dev, test & production environments"!

你在评论中写道

我们目前为不同的项目使用不同的模式

好的,所以通过专门用于开发的一些项目和一些用于测试的项目,您可以 通过使用不同的模式在某种程度上分离您的环境。我猜你已经这样做了,因为这是我知道的,当没有计划实例分离时唯一明智的方法。我无法想象你的经理会如此疯狂,以至于他希望你以任意方式将dev数据,测试数据和客户数据混合在一个模式中。他很可能只是想通过不购买第二台服务器或者为第二次实例投入资金来节省资金。

因此,您需要问的真实的问题是:

我们是否需要使用不同的实例和/或服务器来分离开发,测试和生产环境,或者模式分离是否足够?

这使得答案不像其他答案那样明确。不同的模式允许不同的访问权限,因此您至少可以在一个Oracle实例内部获得某种程度的隔离。但是,您的开发人员很可能需要在“他们的”模式中使用一些管理权限,因此如果您只使用一个实例,则更难确保他们无法访问生产数据。

此外,一个实例/一个服务器还将意味着开发,测试和生产之间的共享资源 - 共享用户/模式管理,共享磁盘空间,共享CPU,共享网络带宽。将此与“泄漏抽象法”相结合,很明显只使用一个实例将有一定的风险,在开发,测试和产品环境之间产生不必要的副作用。

最后,你必须自己决定:你能否有效地解决这种方法的缺点?您的应用程序是不是那么资源密集,并且您的生产数据不那么“秘密”,以至于开发,测试和生产之间的分离水平可以低于“三个实例/三个服务器”的水平进场?如果您不能以这种方式有效地工作,或者没有以一种开始失去客户的方式干扰生产的高风险,那么您需要所有的论据来说服您的经理购买至少第二台服务器。

2
额外
OP最有可能忽略了提出单独的模式来强​​制执行他的观点。这是imho的最佳答案
额外 作者 winkbrace,

主要(也是最明显的)原因是您从不想混合测试和生产数据。对于系统用户和开发人员来说,这可能会非常快速地混乱。当您管理质量保证和单元测试(您应该这样做)时,您需要确保它们处于完全隔离的环境中。如果在您的开发环境或质量保证中爆炸,它会对生产产生负面影响,从而影响实时用户及其重要数据!你绝对不希望这会影响生产!

这延伸到您应该在日常工作中使用的常规服务,例如版本控制。如果您控制的代码处于实时环境中,则无法正确使用版本控制!您的用户将疯狂 - 如果您需要还原或回滚,该怎么办?如果你犯了一个大错误十五次提交怎么办?你将如何处理分支?

至少,您应该将您的环境分成几个虚拟实例,但您确实需要完全按照您所说的做,并为每个环境完全分离实例;理想的发展,质量保证,分期和生产。

所有这些最终都会给您的前端应用程序(以及您与用户的声誉)带来巨大的损害,同时也会影响您团队的效率。

2
额外

您需要多种环境类型,甚至可能需要在每个环境中使用多个服

开发人员可以更新开发中的代码。代码可能甚至不起作用 - 也许应用程序甚至不会启动。

这不会影响在自己的环境中测试最新稳定版本的QA。

由于开发和QA都在更新其环境,因此生产采用六个月前的最新版本构建,并且不受其他环境变化的影响。

在各种环境中推出的这些更改可以是代码或数据。也许QA需要测试一个旨在修复生产中的一些不良数据的数据库脚本。也许脚本会使问题变得更糟 - 恢复数据库备份并重试。如果在生产中发生这种情况,您可能会遇到非常严重的财务问题。

如果您有多个版本会发生什么?也许您正在开发2.0版本,但仍需要1.0维护分支上的错误修复版本。现在,您需要多个开发和QA环境,以确保在发现关键错误并且需要在昨天修复时始终可以开发和测试任一分支。

1
额外

有许多对立的力量和动力。拥有许多服务器的成本和只有一台服务器的成本。我认为这个问题可能比数据库更进一步?我可能会误解,但它确实与系统性的误解有关,因为有形的误解是有形的,而不是抽象的。

通常,明显的成本很容易理解。

抽象成本难以量化,因此难以理解。 TechnicalDebt,错误成本,压力成本,开发人员负担,变更影响,回归测试,停机影响等都难以解释。

different environments Environments are usually separated for data and/or purpose. Each environment has a different function. The rate of change on a system, ie. how often it will be updated, what sort of changes and effects of change, are all considered.

我们使用不同的环境来轻视变化。

我们使用不同的环境,因此我们提供了没有改变的环境的稳健性和确定性。

我们使用环境来考虑变化的影响。

我们使用环境来降低变更所涉及的成本。

it costs a lot to test and stabilize a system You create environments to secure the investment that was made on the stable environment.

从来没有太小的团队坚持务实,节省成本,勤奋和成熟的流程模式。

使用一个环境就像将所有照片存储在一个硬盘上一样,你可以做到,但你会后悔的。

some people need proof I have been in many situations dealing with clients or others who dont appreciate the costs of ensuring robustness and following best practices. I would suggest you put together some examples of real cases where the costs are clearly defined.

1
额外
这似乎没有提供任何实质性的重点,并在之前的6个答案中解释
额外 作者 gnat,

您已经注意到具有单独环境的问题。在那里,您已经找到了单独环境的根本原因:消除了在单一环境中尝试进行开发,测试和生产操作时不可避免地产生的冲突所带来的问题。同样的理由适用于为开发人员提供单独的沙箱工作,它可以防止一个开发人员的错误,甚至只是不兼容的更改,从而使整个开发团队陷入瘫痪。

这也是你可以让管理层改变远离单一环境的最佳论据:指出单个环境已经造成的问题,显示趋势线,并且如果事情继续,迟早会争论它们将会是一个清理成本(直接努力和客户对公司提供服务的能力失去信心)的成本要高于为不同环境重新配置的成本。

0
额外