提升Azure App Service的几个建议

本文介绍了6个技巧,这些技巧可以改善Azure App Service托管应用程序的性能。其中一些技巧是你现在就可以进行的配置变更,而其他技巧则可能需要对应用程序进行一些重新设计和重构, 本文的几个技巧对于常规企业部署依旧有指引作用。

长话短说

    开发者都希望从部署在Azure的App Services中压榨出最佳性能,更好的性能不仅能够获得更佳的响应体验,而且如果性能提升的策略在Azure中能有“四两拨千斤”的效果,那么性能提升还可以为我们省钱。
在本文,我们将研究提高Azure App Services中运行的Web程序性能的设置和策略。

下面几个性能提升意见在App Service配置界面即可操作,这一组技巧的主题是

评估程序现状,压榨出程序本身性能。

1. 启动HTTP/2

Microsoft于2018年初宣布在App Services中支持HTTP/2,但到目前为止在Azure中默认创建的App Service还是以HTTP1.1协议工作。HTTP/2对常见的的Web协议进行了重大更改,许多更改旨在提高性能并减少Web延迟 (例如HTTP/2中的标头压缩和二进制格式将减少有效负载大小);另外请求管道和多路复用等功能允许使用更少的网络套接字来执行更多并发请求,并有助于避免一个缓慢的请求阻止所有后续请求,这在HTTP1.1是常见问题。

如上图示,为你的的App Service启用HTTP/2协议,下拉列表指定HTTP2.0版本后,所有支持HTTP/2的客户端都将自动升级其连接,不支持HTTP/2的客户端仍然以原有Http1.1 方式交互。

下面是一个简单的测试以验证HTTP/2的改进:

某App Service托管页面引用了脚本、CSS资源、16张图像(每个图像的大小超过200 KB),使用developer tool记录使用HTTP 1.1在App Service发生的情况。

注意观察条形红色部分显示了后置请求以阻塞状态开始。这是可怕的“行头阻塞”问题,其中[对连接数和并发请求的限制] 制约了客户端和服务器之间的吞吐量,直到第一个请求开始后800毫秒,客户端才会收到该页面的最终字节。

接下来在App Service中启用了HTTP/2支持:

不需要对客户端或服务器上进行任何其他配置更改,不到500ms完成所有请求。由于HTTP/2提高了网络利用率,从而避免了阻塞。

2.  关闭空闲休眠

如果你有将应用程序部署到IIS的经历,那么你应该知道IIS在一段时间不活动之后将休眠(这个配置在IIS理默认是20分钟)。

Azure App Service延续了这一传统。尽管休眠可为在同一App Service Plan上运行的其他App Service提供资源,但是此策略会损害当前应用程序的性能,因为下一个传入请求将经历Web服务器冷启动的过程:缓存为空、连接池为空,站点预热,所有请求的速度都比正常情况慢。为了防止空闲休眠,你可以在"App Service配置"中【始终开启】标志。

3. 关闭App Service实例亲和力

即使你仅运行App Service Plan的单实例,每个Azure App Service前面都是负载平衡器,负载均衡器会转发请求到App Service实例。当App Service因流量缩放出多实例,负载均衡器使用Application Request Routing将连接会话分发给实例。

因为Azure无法知晓应用程序是不是stateless服务,故默认的App Service将确保客户端在会话期间访问同一App Service实例,为了实现这种亲和力,负载均衡器会在对客户端的第一个响应中注入ARRAffinity Cookie。

如果你的应用程序是stateless,并允许负载平衡器在实例之间分配请求,请关闭请求路由cookie,以提高性能和弹性。

下面的改进需要一些其他网络规划或重组(某些情况下,还需要更改应用程序本身)

这一组技巧中的主题是缩短数据在网络上传输的距离

4. 让你的服务资源相距更近

    比如常规的WebApi服务,需要搭建App Service和Database,建议你把资源放在同一区域协同工作,不然一次请求,处理链路会满世界跑。

5. 让你的App Service与使用者更接近

    如果大多数客户流量都来自世界的特定区域,则将资源放置在离客户最近的Azure区域中是很有意义的。当然,我们许多人的客户分布在世界各地。在这种情况下,您可以考虑跨多个Azure区域进行地理复制,以与每个人保持更近距离,之后你使用类似Azure Traffic Manager(基于DNS技术的负载均衡器)将你的客户直接路由到最近的服务实例。

6. 让你的服务内容与使用者更接近

    脚本、图片、CSS,视频等静态资源是在CDN边缘服务器上缓存的较好选择,一旦缓存,Azure App Service不需要花费带宽和时间在这些资源上,专注处理动态资源。

回过头来,看以上性能优化建议,第一步还是要评估App Service当前现状和性能,不是每一个策略都对你的App Service有效。

btw 这些策略对于常规企业级部署依旧有所指引。

+ 本文翻译整理自:https://www.telerik.com/blogs/nine-performance-tips-for-azure-app-services

扫一扫左边二维码,
更多干货等着你。
............

我就知道你在看!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单向链表的逆转(数据结构)(c语言)

逆转单向链表的意思是:给定你一个单向链表,一个整数n(n为要逆转的结点数),要求你把链表从头结点到第n个结点给逆转过来 图示: 给出一个单向链表,一个整数n4。也就是要求把该链表从头结点&#x…

广东职业教育信息化研究会2019年会暨区块链专题研讨会

兹定于2019年12月28日(星期六)上午9:30召开广东职业教育信息化研究会2019年会暨专题研讨会,本次会议由广东职业教育信息化研究会主办,华南师范大学网络教育学院协办。会议地址:广州市天河区中山大道西55号华南师范大学…

Serial.println()和Serial.print() (Arduino编程)

Arduino的输出基本就用到两个函数:print和println 区别是后者比前者多了回车换行 Serial.println(data)从串行端口输出数据,跟随一个回车(ASCII 13或’r’)和一个换行符(ASCII 10或’n’),这个…

如何快速融入一个团队?

作者:邹溪源,长沙资深互联网从业者,架构师社区特邀嘉宾!一我们难免需要离开一个圈子,加入一个陌生的集体。毋庸置疑,离开熟知的圈子,走向未知的圈子难免会产生许多畏惧甚至情怯,这都…

使用Arduino开发ESP32:wifi基本功能使用

1.建立网络&#xff08;AP&#xff09; 2.连接网络&#xff08;STA&#xff09; 3.扫描网络 1.建立网络&#xff08;AP&#xff09; 只需两步&#xff1a;1.引用WiFi库include<WiFi.h> 2.启动AP网络WiFi.softAP(ssid) 将下面代码上传到模块中&#xff1a; #include &l…

关于C#异步编程你应该了解的几点建议

前段时间写了一篇关于C#异步编程入门的文章&#xff0c;你可以点击《C#异步编程入门看这篇就够了》查看。这篇文章我们来讨论下关于C#异步编程几个不成文的建议&#xff0c;希望对你写出高性能的异步编程代码有所帮助。注&#xff1a;本文的很多内容都是学习《Effective C#》的…

数据库分区

一、分区原理分区并不是生成新的数据表&#xff0c;而是将表的数据均衡分摊到不同的硬盘&#xff0c;系统或是不同服务器存储介子中&#xff0c;实际上还是一张表。要实现这一功能&#xff0c;首先要了解数据库对水平分区表进行分区存储的原理。数据库分区和分表相似&#xff0…

(Arduino编程)Serial(串行通信)函数

串行端口用于Arduino和个人电脑或其他设备进行通信。所有Arduino控制器都有至少一个串行端口&#xff08;也称为UART或者USART&#xff09;。个人电脑可以通过USB端口与Arduino的引脚0(RX)和引脚1(TX) 进行通信。所以当Arduino的引脚0和引脚1用于串行通信功能时&#xff0c;Ard…

Arduino_esp32_WiFi代码

#include<WiFi.h>const char* ssid"BlackWalnut"; const char* password"blackwalnut";void setup() {Serial.begin(115200);while(WiFi.status()!WL_CONNECTED){delay(2500);WiFi.begin(ssid,password);Serial.println("正在连接...");}S…

如何在 C# 平台调用云开发?

▌关于作者苏震巍&#xff0c;云开发Linker计划成员&#xff0c;《微信开发深度解析》作者、Senparc.Weixin 微信 SDK 作者、微软最有价值专家&#xff08;MVP&#xff09;、盛派网络创始人兼首席架构师、微软 Ignite 技术大会讲师、从事软件及互联网研发已有26年&#xff0c;发…

如何打造组织级敏捷,你想知道的都在这里!

“敏捷是适应和响应变化的能力……敏捷组织将变化视为机遇&#xff0c;而不是威胁。” — Jim Highsmith注&#xff1a;Highsmith 在软件开发和 IT 行业有着超过 30 年的经验&#xff0c;曾是敏捷宣言的签署人之一&#xff0c;敏捷联盟的发起人和第一任理事&#xff0c;在很多行…

Azure DevOps Server CI - 自搭跨平台容器代理Agents

前言最近在地端(On-premises)幫團隊搭一套CI/CD流程&#xff0c;也順帶整理了一下從無到有的搭建過程&#xff0c;這次使用了docker技術來解決現有團隊使用CI/CD時讓現有CI/CD hosting環境過於複雜的問題。在開始之前&#xff0c;我先預備一下搭建的環境&#xff0c;如下:Windo…

python练习题:列表排序

Description 已知一个列表a [1,3,5,7,9]&#xff0c;系统会通过input()函数给你输入2、4、6、8中的任意一个数字&#xff0c;请你将这个数字和列表a中的数字重新排列&#xff0c;要求新列表中的数字依旧按从小到大的方式排列&#xff0c;您只需要输出新列表即可。 Input 系统会…

.Net Core 认证组件源码解析

不知不觉.Net Core已经推出到3.1了,大多数以.Net为技术栈的公司也开始逐步的切换到了Core,从业也快3年多了,一直坚持着.不管环境怎么变,坚持自己的当初的选择,坚持信仰 .Net Core是个非常优秀的框架,如果各位是从WebForm开始,一步步走到今天,自然而然就会发现.微软慢慢的开始将…

7-10 逆波兰表达式求值 (20 分)(c语言)(数据结构)

逆波兰表示法是一种将运算符&#xff08;operator&#xff09;写在操作数&#xff08;operand&#xff09;后面的描述程序&#xff08;算式&#xff09;的方法。举个例子&#xff0c;我们平常用中缀表示法描述的算式&#xff08;1 2&#xff09;*&#xff08;5 4&#xff09;…

在.NET Core下的机器学习--学习笔记

摘要.NET Core 在机器学习的应用场景&#xff0c;除了 ML .NET 还会介绍一个非常棒的開源技術 TensorFlow .NET &#xff0c; Keras .NET.讲师介绍本课内容人工智能介绍ML .NETICSharpCoreTensorFlow .NETKeras .NETSciSharp人工智能应用图像识别/物体识别自然语言/翻译搜索/知…

6-5 顺序表操作集 (20 分)(创建,查找,插入,删除)以及顺序表的理解

顺序表&#xff1a; 线性表的顺序存储 线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素 在程序设计语言中&#xff0c;一维数组在内存中占用的存储空间就是一组连续的存储区域&#xff0c;因此&#xff0c;用一维数组来表示顺序存储的数据区域是…

asp.net core 自定义基于 HttpContext 的 Serilog Enricher

asp.net core 自定义基于 HttpContext 的 Serilog EnricherIntro通过 HttpContext 我们可以拿到很多有用的信息&#xff0c;比如 Path/QueryString/RequestHeader 等请求信息, StatusCode/ResponseHeader 等响应信息&#xff0c;借助 HttpContext 我们可以在日志中记录很多有用…

我的 .NET Core 博客性能优化经验总结

点击上方蓝字关注“汪宇杰博客”导语去年8月&#xff0c;我用 .NET Core 重写了我的博客系统。经过一年多的优化&#xff0c;服务器响应速度从上线时候的 80ms 提高到了现在的 8ms&#xff0c;十倍提速。可惜由于部署在国外&#xff0c;自然不可抗力会导致中国用户晚上访问速度…

7-11 堆栈操作合法性 (20 分)以及堆栈讲解(c语言实现)

关于堆栈&#xff1a; 1.它是什么 2.它为什么会出现/它的出现解决了什么问题 3.我们要怎么使用它 堆和栈到底是什么 栈和堆&#xff08;托管堆&#xff09;都存在于进程的虚拟内存中。 栈&#xff08;Stack&#xff09; 是操作系统在建立某个进程时或者线程&#xff08;在支持…