云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

京东云_服务器选购_哪家好

小七 141 0

为什么开发环境不应该与生产环境相同

除非您处于开发石器时代,并进入生产服务器中使用Vim或Emacs手工编辑文件(请将火焰战保留在其他地方),否则您的开发环境与生产。The绝对最小的差别是容量和负载。你可以复制精确的软件版本,甚至可能还有配置(对TLS证书和主机名进行模块化),但是您的开发环境将永远不会有生产负载,也没有能力处理这些负载装载。在那里在其他情况下,开发环境与生产环境的差异会非常有帮助,但这并不是说最小化生产和开发环境之间的差异是个坏主意。开发人员工具,如Jenkins X及其DevPods,允许您在本地开发代码,并且在尽可能接近Kubernetes应用程序的环境中几乎无缝地运行相同的代码。某些类型的bug,特别是与网络相关的bug,只有在您开发接近生产。如果你是来找一场战争的,很抱歉,这个帖子不适合你。这个post是关于庆祝我们在开发过程中遇到的一些不同的用例,以及这些用例如何从中受益有针对性地区分开发环境和生产环境。几年前,在一位前任雇主那里,我们在开发构建中启用了代码覆盖。我们使用的工具将运行两次测试,一次没有覆盖,一次有覆盖。我们的测试不是单元测试,它们主要是集成测试,它们都是对数据库的攻击,运行两次测试会影响构建时间。所以我们关闭了测试运行报道。很快之后,一个线程错误开始出现在QA中。最疯狂的是,这个错误在逻辑上是不可能发生的。我们甚至进行了单元测试来验证事件。它只是当我碰巧在没有覆盖的情况下运行测试套件时失败了。我们的在更新代码覆盖率调用计数时,开发环境有额外的同步点。额外的同步足以防止测序错误。。。这是一个bug,如果我们不是每年发布一次,QA只是在第一批的早期测试中才开始的特色。这个开发和生产之间的差异不是你想要的那种差异!用例#1:数据库错误有时您有一个错误,您正试图跟踪。支持人员为您提供了一个复制该问题的数据库转储,但该转储需要一段时间才能加载。每次你想测试一个理论,重新检查修正脚本或者缩小复制范围,您需要确保数据库与甩了。那个擦除加载周期会让人厌烦(我们甚至不考虑重新启动应用程序来清除可能保存在内存中的数据库的任何缓存。)你会想:"嘿,PostgreSQL数据库只是一个Docker映像,我可以创建一个加载脚本的派生映像,现在我只需重新启动容器,而不必擦除加载"除非它不起作用!下面是PostgreSQL"Dockerfile"的最后10行:ENV PGDATA/var/lib/PostgreSQL/data运行mkdir-p"$PGDATA"&&chown-R博士后:博士后"$PGDATA"&&chmod 777"$PGDATA"#此777在运行时将替换为700(允许半任意"--user"值)卷/var/lib/postgresql/data复制docker-入口点.sh/usr/本地/bin/运行ln-s usr/local/bin/docker-入口点.sh/向后兼容入口点docker-入口点.sh"]曝光5432命令postgres"]问题是音量指令。生成的目录只有在创建卷时才被设定种子。码头工人-yml撰写或者您正在使用的任何其他本地编排工具都已有效地分配了一个命名卷,以便数据可以跨重新启动。我们这种开发需要一个不同的Docker形象:一些潜力解决方案:复制Dockerfile,删除VOLUME指令,追加数据加载;或者覆盖ENV PGDATA/var/lib/postgresql/data,指向卷指令未覆盖的其他位置,并与正在创建的未使用的卷一起使用附加。更改我们的容器编排工具在重新启动时丢弃卷,记住我可以让这个变化远离源头控制。使用案例2:身份验证应用程序要求您通过身份验证才能访问UI。每次重新启动应用程序时,身份验证cookie就会失效。所以测试您的更改需要您输入用户名/密码不断地。并且在第一世界的问题上,你需要能够用不同的权限集进行测试,所以你经常需要给你的同事打电话,让他们帮你登录,这样你就能看到不同的效果权限。是的, 开发认证是针对生产授权服务的,这真是太棒了,现在我们将立即知道,如果它被破坏了。。。但这并不是主要的变化。事实上,认证码基本上功能齐全现在。什么时候我在CloudBees的DevOptics服务中遇到了这个问题,我所做的就是编写一个伪造的身份验证服务。对于开发人员来说,在使用这个假身份验证服务、在分段中运行的真实身份验证服务和在生产中运行的真实身份验证服务之间切换是很简单的。。。我们默认为假认证服务。这个服务只显示具有各种权限集的用户的屏幕,然后单击"登录"按钮以该用户身份登录。不用打字,只有一个单击.NOTE是的,即使是在我们的注册服务器上,我们也没有使用我们的注册服务来测试真实的身份验证容器,以确保模拟永远不会登陆生产。使用你的记忆很丰富。例如,为生产Elasticsearch调整JVM设置可能需要一台相当健壮的机器来运行。如果我们保持开发与生产相同,我们将过度配置所需的资源。一般来说,开发环境不需要与生产环境相同的伸缩性环境:你不知道对于大多数特性和bug来说,不需要一个完整的集群,一个实例将是够了。你不需要生产的磁盘容量,因为您通常只加载小数据套。你只需要1-2Gb的RAM分配给容器。精确内存调优将取决于应用程序如何使用Elasticsearch,但一般来说,开发环境中的索引较少因为很少有足够的数据需要跨希望能得出结论, 您同意在某些情况下,您可以从开发和生产。附加资源阅读从一年的持续部署中学到的经验教训开发人员在DevOps世界吃了什么为什么你应该了解GitOps