草庐IT

提高应用程序性能的7个DevOps实践

黄显东 2023-03-28 原文

DevOps 主要与开发人员和运营之间的合作有关,以改善生产中应用程序的交付和可靠性。最常见的最佳实践旨在用更强大的自动化来取代在开发和运营团队之间管理的手动、易出错的程序。这包括用CI/CD(持续集成和持续交付)实现交付管道的自动化,用容器实现标准化配置,并将基础设施配置为代码。在运营方面,提高应用程序可靠性的 DevOps 最佳实践包括提高应用程序的可观察性,增加监控,以及自动化云和基础设施的操作。

但如何提高应用程序、数据库、数据管道和云基础设施的性能呢?本文将分享7个可以影响性能和用户体验DevOps 实践和方法。

1. 从一开始就在应用程序中构建安全实践

DevOps 团队最不需要的就是部署具有安全漏洞的新功能。安全中断或降级会影响用户体验并产生重大的业务问题。一个 DevOps 的最佳实践是,通过与信息安全部门在需求方面的合作,测试CI/CD管道内的代码漏洞,以及在软件开发中实施其他安全实践,来实现安全转移。

Akamai 的高级开发人员倡导者 Mike Elissen 说:“应用程序可靠性的一个关键组成部分是可用性,采取适当的措施来正确保护应用程序免受 Web 应用程序攻击、DDoS 攻击等可能意味着保持在线和离线之间的区别。”

Elissen 说,向左转移是从 DevOps 转变为 DevSecOps 的一部分。他继续说道,“我们看到在 DevOps 中添加安全性的‘左移’变得越来越明显,最终创造了更强大的 devsecops 文化,并使更多的开发人员意识到并对其应用程序的安全性负责。”

2. 标准化架构和基础设施蓝图

Quali 产品管理副总裁 Amir Rozenberg 指出了一个影响团队绩效的问题。他说:“许多 DevOps 团队发现自己正在组织有机增长的应用程序基础架构定义的混乱,这些定义是在早期真诚地开发的,以提高团队在软件开发生命周期中的效率。”

Rozenberg 询问 DevOps 团队是否应该采用自己动手的方法来创建环境,或者组织是否应该创建标准。他说:“推荐的方法是建立一个中心团队,以蓝图的形式对环境进行建模,以使它们可靠、可重用和合规。然后,他们需要能够分发这些基础架构定义,以便业务成员可以通过快速自助服务使用它们,无论是集成到自动化管道中还是以手动方式。”

3. 在 CI/CD 管道中建立可观察性和持续测试

66degrees 的 DevOps 总监 Matt Sollie 认为 CI/CD 可以做的不仅仅是打包和推送代码。他说:“并不是所有的 DevOps 原则都像持续交付或将一切构建为代码一样迷人或可见,但它们同样重要。持续集成是成熟的 DevOps 态势的一个组成部分,它可以极大地提高应用程序的可靠性,但需要目标、愿景和时间才能以有意义的方式构建。”

Sollie 承认,实现可靠性和性能目标不仅需要有远见,还需要对实践和优化架构进行投资。“可观察性是一项关键且昂贵的原则,因为可靠性不是开启或关闭状态,需要细致入微的数据收集。借助所有云计算服务,为工作选择正确的工具或服务可以带来固有的可靠性和性能优势。”

敏捷开发团队应该在他们的管道中实施什么来提高性能?以下是一些建议:

  • 在增加部署频率之前实施持续测试
  • 考虑使用服务虚拟化来测试微服务和第三方 API
  • 确保可观察的 CI/CD 管道以改进故障检测并隔离管道问题

4. 使用功能标志和金丝雀版本控制部署

部署不必是所有用户一次性获得所有更改的绝对转换。代码中的功能标志有助于配置和控制功能的可用性,而金丝雀发布策略使 DevOps 团队能够缓慢而有条不紊地推出新功能。

LaunchDarkly 的首席技术官兼联合创始人 John Kodumal 补充说:“功能管理,特别是功能标志,正在迅速成为改进应用程序的整体可靠性和性能的首选开发实践,同时允许开发人员不断创新。通过使用功能标志,开发人员可以在生产前测试功能更新,以便在发布前解决问题。”

这些控件提高了可靠性和性能,同时也帮助开发团队最大限度地减少了中断。Kodumal 说:“功能标志提高了性能,同时为开发团队提供了必要的控制来更新应用程序而不会中断或停机。”

5. 建立严格的可观察性和监测标准

现在专注于 DevOps 职责的运维方面,团队应该考虑几个最佳实践来提高应用程序性能,包括开发可观察性标准和改进监控。

Mindee 开发人员关系总监 Frédéric Harper 说:“ DevOps 必须实施严格的监控和可观察性流程,以确保应用程序的每个部分都正常工作并且服务器进程运行顺畅。通过保护这一元素, DevOps 团队可以收集有价值的信息,以了解用户如何使用应用程序,可能防止未来出现问题,更容易支持客户,并根据真实数据改进业务或架构决策。”

6. 使用 AIOps 和自动化扩展监控

在 web 2.0 时代,当出现中断或性能问题时,运维人员只有少数日志文件和监控工具来查看。如今,运行微服务、无服务器应用程序和多云数据库意味着在解决事件和确定问题根本原因时需要参考更多的数据和工具。AIops 平台可以集中监控数据,使用机器学习关联警报,并帮助操作人员跨多个平台自动响应和恢复,这有助于最大限度地减少性能影响。

BigPanda 产品营销副总裁 Mohan Kompella 对此表示赞同:“AIOps 平台可以帮助 DevOps 团队保持工具的自主性和灵活性,同时还为集中式事件响应者提供他们所需的可见性,使其成为应对中断的第一道防线。”

7. 定义 SLO 和错误预算

DevOps 团队应该平衡哪些实践产生最大收益并解决风险。这需要团队就 DevOps 优先级进行衡量、学习和协作,这在实施实践和工具后的数月或数年内可能无法实现收益时并不容易。

一种确定优先级的方法是采用站点可靠性工程实践、定义服务水平目标 (SLO) 和使用错误预算。当应用程序或微服务超出其错误预算时,它会向 DevOps 团队发出信号,以找出原因并专注于解决方案。

Nobl9 的首席运营官 Kit Merker 说:“服务水平目标为工程团队设定了明确的目标,以便更好地决定如何确定工作的优先级。开发人员和 ITop 不仅可以以技术为中心,还可以转向以服务为中心。”

DevOps 团队有很多事情要做, DevOps 最佳实践帮助团队在加速开发和提高可靠性和性能之间取得平衡。成功的关键可能在于定义问题陈述、辩论方法、迭代解决方案和衡量影响。


原文标题:​​7 devops practices to improve application performance​

有关提高应用程序性能的7个DevOps实践的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  3. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  4. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  5. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  6. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  7. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  8. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  9. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  10. ruby - 检查是否通过 require 执行或导入了 Ruby 程序 - 2

    如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby​​文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否

随机推荐