加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

浅谈10个提升应用程序10倍性能的技巧

发布时间:2019-09-26 15:16:28 所属栏目:优化 来源:首席架构师
导读:提高web应用程序性能比以往任何时候都更加重要。在线经济活动的份额正在增长;超过5%的发达国家的经济现在是在互联网上的(参见参考资料中的互联网统计数据)。而我们这个始终在线、高度连接的现代世界意味着用户的期望比以往任何时候都要高。如果您的站点没

SPDY协议要求使用SSL/TLS;HTTP/2并没有正式要求它,但是到目前为止,所有支持HTTP/2的浏览器都只在启用SSL/TLS时才使用它。也就是说,支持HTTP/2的浏览器只有在网站使用SSL且服务器接受HTTP/2流量时才使用它。否则,浏览器通过HTTP/1.x进行通信。

当您实现SPDY或HTTP/2时,您不再需要典型的HTTP性能优化,例如域分片、资源合并和图像spriting。这些更改使您的代码和部署更简单、更容易管理。要了解更多关于HTTP/2带来的变化,请阅读我们的白皮书《Web应用程序开发人员的HTTP/2》。

「技术架构」10个10倍提升应用程序性能的技巧

作为支持这些协议的一个例子,NGINX从一开始就支持SPDY,现在大多数使用SPDY的站点都运行在NGINX上。NGINX也是HTTP/2支持的先驱,截至2015年9月,NGINX开源和NGINX Plus都支持HTTP/2。

随着时间的推移,我们NGINX希望大多数站点能够完全启用SSL并迁移到HTTP/2。这将导致安全性的提高,并且,随着新的优化的发现和实现,更简单的代码执行得更好。

技巧7 -更新软件版本

提高应用程序性能的一个简单方法是根据组件的稳定性和性能为软件堆栈选择组件。此外,由于高质量组件的开发人员可能会追求性能增强并随着时间的推移修复bug,因此使用较新的稳定版本的软件是值得的。新版本得到了开发人员和用户社区的更多关注。更新的构建还利用了新的编译器优化,包括针对新硬件的调优。

稳定的新版本通常比旧版本更兼容,性能更高。当您关注软件更新时,更容易掌握调优优化、bug修复和安全警报。

使用旧的软件也会阻止您利用新功能。例如,上面描述的HTTP/2目前需要OpenSSL 1.0.1。从2016年年中开始,HTTP/2将需要于2015年1月发布的OpenSSL 1.0.2。

NGINX用户可以从移动到较新版本的NGINX或NGINX Plus开始;它们包括新的功能,如套接字分片和线程池(请参阅技巧9),并且都在不断地进行性能调优。然后深入了解您的堆栈中的软件,并尽可能地使用较新的版本。

技巧8 -调优Linux的性能

Linux是当今大多数web服务器实现的底层操作系统,作为基础设施的基础,Linux代表着提高性能的重要机会。默认情况下,许多Linux系统都进行了保守的调优,以使用很少的资源并匹配典型的桌面工作负载。这意味着web应用程序用例至少需要一定程度的调优才能获得很大的性能。

Linux优化是特定于web服务器的。以NGINX为例,下面是一些你可以考虑的加速Linux的变化:

  • 积压队列——如果您的连接似乎正在停滞,请考虑增加net.core。可以排队等待NGINX注意的很大连接数。如果现有连接限制太小,您将看到错误消息,您可以逐渐增加此参数,直到错误消息停止。
  • 文件描述符- NGINX为每个连接使用最多两个文件描述符。如果您的系统正在提供大量连接,您可能需要增加sys.fs。file_max是文件描述符的系统范围限制,nofile是用户文件描述符的限制,以支持增加的负载。
  • 临时端口——当用作代理时,NGINX为每个上游服务器创建临时(“临时”)端口。您可以增加由net.ipv4设置的端口值范围。ip_local_port_range,以增加可用端口的数量。您还可以在网络.ipv4重用非活动端口之前减少超时。tcp_fin_timeout设置,允许更快的周转。

对于NGINX,请查看NGINX性能调优指南,了解如何优化您的Linux系统,使其能够轻松处理大量网络流量!

技巧9 -调优Web服务器的性能

无论使用什么web服务器,都需要根据web应用程序性能对其进行调优。下面的建议通常适用于任何web服务器,但是为NGINX提供了特定的设置。主要包括:优化

访问日志—您可以缓冲内存中的条目,并将它们作为一个组写入磁盘,而不是立即为每个请求写入一个日志条目。对于NGINX,将buffer=size参数添加到access_log指令中,以便在内存缓冲区满时将日志条目写入磁盘。如果添加flush=time参数,缓冲区内容也会在指定的时间之后写入磁盘。

缓冲—缓冲将响应的一部分保存在内存中,直到缓冲区填满为止,这可以提高与客户机的通信效率。不适合内存的响应被写入磁盘,这会降低性能。当NGINX缓冲打开时,使用proxy_buffer_size和proxy_buffers指令来管理它。

  • 客户机keepalives—Keepalive连接可以减少开销,特别是在使用SSL/TLS时。对于NGINX,您可以增加客户机在给定连接上可以发出的keepalive_requests的最大数量(默认值为100),您还可以增加keepalive_timeout以允许keepalive连接保持更长时间的打开状态,从而加快后续请求的速度。
  • 上游保持连接—上游连接—到应用程序服务器、数据库服务器等的连接—也可以从保持连接中获益。对于上游连接,您可以增加keepalive,即为每个工作进程保持打开状态的空闲keepalive连接的数量。这允许增加连接重用,减少了打开全新连接的需要。有关更多信息,请参考我们的博客文章、HTTP Keepalive连接和Web性能。
  • 限制——限制客户端使用的资源可以提高性能和安全性。对于NGINX, limit_conn和limit_conn_zone指令限制来自给定源的连接数量,而limit_rate限制带宽。这些设置可以阻止合法用户“占用”资源,还有助于防止攻击。limit_req和limit_req_zone指令限制客户机请求。对于到上游服务器的连接,使用max_conns参数到上游配置块中的服务器指令。这将限制到上游服务器的连接,防止过载。关联的queue指令创建一个队列,该队列在达到max_conns限制之后,在指定的时间长度内保存指定数量的请求。
  • 工作进程——工作进程负责处理请求。NGINX使用基于事件的模型和依赖于操作系统的机制来有效地在工作进程之间分发请求。建议将worker_processes的值设置为每个CPU一个。如果需要,可以在大多数系统上安全地启动worker_connections的较大数量(默认为512);尝试找出最适合您的系统的值。
  • 套接字分片——通常,一个套接字侦听器将新连接分配给所有工作进程。套接字分片为每个工作进程创建套接字侦听器,内核在套接字侦听器可用时将连接分配给它们。这可以减少锁争用,提高多核系统的性能。要启用套接字分片,请在listen指令上包含reuseport参数。
  • 线程池——任何计算机进程都可以通过一个缓慢的操作来阻塞。对于web服务器软件,磁盘访问可以支持许多更快的操作,比如在内存中计算或复制信息。当使用线程池时,慢操作被分配给一组单独的任务,而主处理循环继续运行更快的操作。当磁盘操作完成时,结果返回到主处理循环。在NGINX中,两个操作——read()系统调用和sendfile()——被卸载到线程池。
「技术架构」10个10倍提升应用程序性能的技巧

小费。当更改任何操作系统或支持服务的设置时,每次更改一个设置,然后测试性能。如果更改导致问题,或者没有使站点运行得更快,请将其更改回来。

有关优化NGINX web服务器的更多信息,请参阅我们的博客文章“优化NGINX以获得性能”。

技巧10 -监控活动以解决问题和瓶颈

应用程序开发和交付的高性能方法的关键是密切和实时地观察应用程序的实际性能。您必须能够监视特定设备内和跨web基础设施的活动。

监控站点活动主要是被动的——它告诉您发生了什么,然后让您发现问题并修复它们。

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读