PreProd和Prod的环境应如何相似?


10

我最近刚参与一个项目,在发布期间,我们意识到它在生产环境中不起作用。它可以在所有其他环境中使用,但是因为我们有一个单独的发布团队,而且我们无法自己设置服务器和环境,所以我们无法查看它们上的配置。

我们怀疑Prod在其帐户或IIS设置中具有某些用户权限,因此我们现在在努力。

因此,我认为整件事对我来说都是一次学习经历,我不想再重复同一件事。我想问一下,这些环境应该有什么不同?我一直认为PreProd应该是与Prod环境相同的副本,使用相同数据库的副本,使用相同用户帐户的副本,应安装在相同服务器等上。

但是我应该走多远?如果网站是外部的,那么PreProd应该是外部的吗?如果网站具有不需要用户帐户或密码即可导航的组件怎么办?将它暴露给外界仍然可以吗?


我在Pre-Prod工作的所有地方都是Production的直接副本,除了数据库只有一个星期的时间。
Nickz 2011年

@Nick:我的意思不是仅仅是代码库,而是整个环境的整个设置。
RoboShop 2011年

Answers:


6

在可行的情况下,您当然应该在与生产服务器相同的环境中进行测试。如果您不这样做,那么您就不会测试客户将使用什么。如果没有其他需要,则需要这样的环境来测试任何错误报告。

显然会有一些您不希望出现的事物-链接到支付系统的链接浮现在脑海,但是应该嘲笑它们,就像它们是真实的事物一样。还有一些您无法复制的内容-系统规模。

您可能想通过外部URL进行测试-再次测试用户将看到的内容。同样,通过外部URL进行测试将以与系统内部使用方式不同的方式使用网络。权限(例如)将与可用带宽,防火墙等一起发挥作用。所有这些用户都将面临,但如果直接访问系统,您将跳过。

我看不到不需要帐户和密码的组件有问题。如果它不需要密码,那么它就不是至关重要的/敏感的;如果它是敏感的,那么为什么还没有密码?


哇,这是一个愚蠢的答案。因此,在测试环境中,如果您购买了产品,则应从信用卡中扣除费用并运送购买的产品?如果产品环境由150台服务器组成,那么测试环境也应该如此吗?我会说“很明显”,产品和测试之间一定有区别,但这对ChrisF来说并不明显。
Malvolio)

@马尔沃里奥-不。我根本不是那个意思。我想更多的点与权限,连接等问题提出
ChrisF

11

我认为最好的做法是蓝绿色部署方法,该方法由Jez Humble和David Farley在他们的《持续交付》一书中提出,并由马丁·福勒(Martin Fowler)在他的博客文章《蓝绿色部署》中进行了描述

前提很简单。从马丁·福勒的帖子中:

蓝绿色部署

蓝绿色部署方法... [确保]您拥有两个生产环境,并且它们尽可能地相同。在任何时候,其中一个(例如蓝色)处于活动状态。准备新版本的软件时,您将在绿色环境中进行最后的测试阶段。一旦软件在绿色环境中运行,就可以切换路由器,以便所有传入请求都进入绿色环境-蓝色的请求现在处于空闲状态。

蓝绿色部署还为您提供了快速回滚的方法-如果出现任何问题,请将路由器切换回蓝色环境。

这种方法将解决您的预生产环境和生产环境不一致的问题,并优化您的部署策略。


1+用于
酷图

mmm不确定要保持数据库同步。很难。如果交易是通过您的预生产服务器进行的,该怎么办?这将反映在生产数据库中吗?
RoboShop 2011年

写,这是非常昂贵的。您必须复制现场生产所需的所有硬件以进行测试。但是,是的,很酷的图表。
马尔沃里奥

1
技术性 在一个英国法院,一个名叫霍姆的人因指控他的邻居谋杀罪而遭到诽谤审判。他的确切话是:“托马斯·霍尔特爵士(Since Thomas Holt)砍了一把砍肉刀,把厨子砸在头上,头的一侧落在一个肩膀上,另一侧落在了另一肩膀上。” 根据法院的指示,被告无罪,博学的法官认为,这句话没有指控谋杀,因为他们没有肯定厨师的死亡,这只是一个推断。-Ambrose Bierce
Malvolio

1
是的,从技术上讲,我不需要复制硬件,但是即使您通过愚弄虚拟化来避免这种需求,您也可以(a)向每个环境硬分配资源(例如带宽和CPU),这样可以与复制硬件或(b)共享资源的成本相同,这意味着您的测试问题可能会使生产系统瘫痪。
马尔沃里奥

3

我们最终的预生产环境只是从负载均衡器中取出的实时服务器之一。我们部署预生产版本(除了数据库连接字符串和其他一些配置更改外,它与实时版本基本相同)并进行测试。如果可以的话,我们将部署实时代码,最后如果可以的话,我们将服务器返回到负载均衡器,并将生产版本一一部署到其余服务器。


1

它们应尽可能相似,以便您可以在系统内的任何位置识别问题,但可能无法扩展。如果可能的话,生产环境与生产前/过渡/测试环境之间的唯一区别就是大小-我希望生产环境在大规模环境中包含更多机器。您甚至应该镜像您拥有的计算机的专用功能,例如数据库服务器,Web服务器等等。

但是,在您当前的预算下,可能无法进行精确的复制。距离越近,测试将越有效,并且在推向生产过程中出现问题的可能性就越小。

对于这种环境是否应该面向公众,我采取与ChrisF不同的立场。我说不应该。我会选择在实际数据库的副本上运行,或者至少在实际实时数据库的子集副本和向内环境上运行。这样,您可以针对实际数据和实际数据进行测试,而不必担心会导致泄漏的安全漏洞。您当然可以清除数据,但这可能会从环境中删除一些“脏数据”,从而可能导致在实时系统中发现缺陷。


1
如果您正在进行安全性测试,那么我同意它不应该面向公众,但是您可能希望将其用于最终验收测试(例如)。
克里斯·

这也是一个正确的观点。我通常比安全性更关注可用性,但是如果您确实想要公开系统的新版本以进行验收测试(也许是由客户提供,或作为公共Beta的一部分),那么是的,面向公众环境是必需的。
Thomas Owens

是的,我们曾经有一个竞争对手会在上线之前在面向公众的计算机上测试其所有内容一周左右。他们从来没有想通了,我们怎么总是有特点了他们之前...
马伏里奥

1

我在银行,电信等公司工作过的所有地方,生产前产品都是生产的直接副本,只是数据库要用一个星期左右的时间。在整个pro-prod上维护数据是一个巨大的过程,但是对于我为之实施pro-prod的公司来说,这是必不可少的。

在非盟银行业务部分,政府会因每分钟关闭服务(例如网站ATM等)而对银行处以罚款。听到开发/测试团队因某个事件而被解雇的情况并不少见。预生产并非适用于每个公司或开发过程,而对于某些公司或开发过程而言则至关重要。


3
“听到开发/测试团队因某个事件而被解雇的情况并不少见” –是的,这会有所帮助。殴打将持续到士气提高为止。
马尔沃里奥(Malvolio)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.