救命啊!我的 Azure 网站表现太差了!—第一部分

救命啊!我的 Azure 网站表现太差了!—第一部分

原文:https://medium.com/hackernoon/help-my-azure-site-performance-sucks-part-1-5a3a1b048ac0

你可以在这里查看该系列的 第二部第三部

让我猜猜。你已经看到了云的曙光,并将你的应用程序迁移到了微软 Azure。你的网站托管在一个足以运行一个比特币大矿的应用服务上,你的数据库是 SQL SaaS 的技术奇观。你让公司里的每个人一起把你扔在他们的肩膀上,惊叹你新的云动力创造,它的性能…嗯…糟透了。在你把你的网站滚回储藏室的 486DX 之前,让我在这个由两部分组成的博客系列中给你一些关于如何让它在微软的云中平稳运行的提示。

我和 Azure 合作了很长时间。用技术术语来说,我想我是云计算的曾祖父。如果不是这样,至少有一个远房亲戚会出现在家庭聚餐上并偷邮票。不管怎样,自 2008 年以来,我已经为它创建了应用程序,写了关于它的文章,为它举办了训练营,并尽可能在每个街角挥舞 Azure 旗帜。我喜欢这个平台,并不断惊讶于你可以用它实现多少目标。作为一名 Azure MVP,在我参加的每个会议、活动、代码营、婚礼和家长会上,我都让每个人知道与云一起工作有多棒。是的,我有点喜欢和 Azure 一起工作。

但是说实话,在云端运行的时候,事情并不总是一帆风顺的。我见过在一个环境中可以快如闪电的应用程序在部署到 Azure 时会爬行到 14.4K 的速度。我遇到过最有经验的软件工程师,他们质疑这个平台的一切,质疑它为什么能在如此糟糕的延迟和性能下如此出色。他们对他们的部署感到困惑,没有明显的理由来解释他们痛苦缓慢的站点。

我完全明白了!云被吹捧为能解决你的问题的神奇技术!

但是这惊人的速度是怎么回事呢?!?这些年来,我与许多客户和开发人员合作,帮助他们回答这个关于 Azure 应用程序的问题。让我来阐明这些可能性…

阅读手册

Azure 表现不佳的最大原因之一归结于教育。对于刚刚开始使用云并且没有完全理解平台是什么的开发人员来说尤其如此。蔚蓝不是一个东西。这是成百上千的东西(而且还在增长!).它包括基础架构、连接性、功能性、可扩展性和灵活性,所有这些都包含在一个五个字母的名称中,似乎没有人能够就如何发音达成一致。由于其巨大的能力,完全掌握所有的单个棋子可能是一项艰巨的任务,尤其是如果你是游戏新手。

每当我开始诊断某人的 Azure 困境时,我首先会确定他们对云了解多少。他们知道为什么云计算会存在吗?他们了解云服务和应用服务吗?他们是将自己的应用程序搬到了云上,还是从一开始就在云上构建了应用程序?他们手头有任何 Azure 的专业知识吗,或者他们即兴发挥了?当谈到为什么选择特定的架构或配置时,这些都是重要的因素,如果处理不当,可能会导致很长的应用程序加载时间。

移除变量

作为任何试图找出只有会计部的 Linda 才能发现的幻影错误的开发人员,在确定 Azure 站点性能不佳的原因时,您需要采取一种务实的方法。尽可能多地排除等式。如果你的环境中有 100 个变量,你会花大部分时间寻找和啄你的方式疯狂。给自己省点头痛(和治疗),尽可能地消除那些不三不四的人。

如果您在同一台服务器上有多个应用程序,请将它们隔离到各自的实例中。您的应用程序数据库和存储是否位于不同的数据中心?建立自己的三人公司集,获得同一地区的所有资源。这个问题是只发生在经过身份验证的用户身上还是发生在网站的特定区域?尝试找出共同点以帮助隔离问题。

知道什么不该看是解决你的表现问题的最好方法之一。

是什么导致了这个问题?

I combined decks to make it more exciting!

好的,所以你知道你的团队在 Azure-ology 方面是熟练的,并且你已经尽可能多地去除了变量。现在,您需要开始尝试找出问题所在。如果你幸运的话,是环境中的一个单一因素导致了这个问题。如果是这样的话,停下手头的工作,去买张彩票什么的。

很有可能,你会有几个导致你悲伤的因素。你只需要弄清楚哪些是。你需要准备好改变不止一件事。在许多情况下,部署的几个方面都会导致速度变慢。

App 服务

确定 web 服务器(应用服务)是否是问题的根源往往是一个非常简单的过程。在 Azure 门户中,您可以检查服务器性能,并查看您的 CPU 和内存是否出现峰值。如果你发现你的应用程序经常导致你的服务器达到最大限度,你应该开始考虑扩大或缩小。Azure 最好的部分之一是能够快速扩展你的 web 环境,如果需要的话可以自动扩展。查看您的应用服务计划设置并进行调整,直到获得您想要的性能。

这是解决性能问题最简单的方法之一,但前提是您的问题与 web 服务器相关。老实说,我很少把应用程序服务视为问题的原因。通常,这是一个与数据和/或架构相关的问题。如果服务器看起来像铁皮人的 EKG(没有心跳,也就是没有尖峰信号),那就该继续搜索了。

数据库

许多开发人员将从在 SQL 数据库(或 Azure SQL…或 SQL Azure…或 Azure 的 SQL 数据库)中托管他们的数据库开始。我见过不少改名的。).而且理由很充分!这是一个非常可伸缩的 SQL 环境,每月只需几美元(取决于您的需求)。您的数据会自动复制到后端进行灾难恢复,您可以通过 SSMS 轻松部署数据库,并在几秒钟内连接到您的网站。有什么不喜欢的??

嗯,有一种被称为 DTU(数据库吞吐量单元)的神秘生物多年来一直困扰着开发者。dtu 不是一个单一的度量单位,而是 Microsoft 用来计算数据库消耗的资源的变量集合。这些是 CPU、内存和读写速率。(相信我,九年过去了,我还是有点迷茫)。微软使用 dtu 来计算你的数据库在消耗什么样的资源,以确保平台上的每个人都物有所值。

当谈到表现不佳的 Azure 网站时,DTU 峰值通常是讨论的焦点。无论是长时间运行的查询、性能不佳的索引,还是导致过多调用的糟糕代码,超负荷工作的 SQL 数据库都会降低任何应用程序的速度。如果你发现你的 SQL 数据库正在崩溃和挣扎,查看 Azure 门户网站的支持和故障排除部分寻求帮助。使用这些工具来找出哪些查询占用了最多的时间,以及您的 dtu 何时达到峰值。

DTU 问题可能是我在过去 9 年里见过的最常见的问题。

提供图像

Just hold that position for another 32 minutes.

回到关于教育的第一点,处理图像是我最常看到开发人员没有发挥 Azure 潜力的地方。当涉及到媒体时,开发人员应该重新思考“随站点部署”模式,并探索 Azure 可以提供的独特功能。因为 Azure 存储非常灵活(并且易于配置),在应用程序中不对图像使用它是一个巨大的错误,可能会让你的网站损失很多宝贵的性能。Azure CDN 功能包含在存储中,因此从数据中心的全球网络(而不是部署站点的地方)提供站点媒体可以大大加快整个站点的加载时间。

此外,将您的图像卸载到 CDN 意味着更少调用您的主 URL 来加载内容,这意味着更好的并行请求管理。

也许这是代码

Aww, man! I got the Gray Screen of Death!

再多的内存、处理器或服务器也无法修复糟糕的代码。当所有的架构领域都解决了,而一个站点仍然很慢时,我总是会询问定制功能。这是事情变得棘手的地方,并且需要很多时间。

如果你在你的网站上使用第三方平台,很可能该公司已经花了很多时间来确保产品的“普通”版本可以在任何环境下运行。考虑到这一点,您的自定义代码可能是罪魁祸首。确保你的代码库是最新的,然后开始挖掘你的功能。

您需要确保尽可能高效地访问数据。您是否利用缓存和供应商 API 在内存中存储数据?您是否只撤回了您需要的数据,从而减少了总体负载?你是否试图在你的自定义功能中除以零或者其他产生虫洞的行为?

你需要挖掘你的每一段代码,并确保它尽可能的优化。不幸的是,修改代码从来都不是一件容易的事情,你必须为之准备一顿午餐,尤其是如果你隔壁小隔间的实习生编写了整个联系人管理模块。

这里勤奋是关键,所以不要偷工减料!确保检查任何具有数据库连接、内存访问或依赖于外部系统的功能。了解如何利用 Azure 缓存和存储来提高速度和延迟。你可能会发现你需要更新网站的几个部分。蔚蓝是一座需要攀登的大山,所以一步一步来。

思考问题的时间

好吧,所以你现在的思维可能有点像《权力的游戏》中的家谱。您可能已经处理了站点中所有可能需要更新、配置和返工的地方。我要在这里结束这个博客,给你时间来处理事情。在我的下一篇文章中,我将给出我的建议,告诉你应该如何设计你的 Azure 应用程序,以便在未来最大限度地减少性能问题。它还将包含更多关于识别问题、实施权宜解决方案和构建更好的 Azure 网站的步骤的提示。下次见,朋友们。

更新!

想获得一些真正的提示和技巧吗?看看这个系列的 第二部


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除