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

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

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

有两种不同类型的缓存需要考虑:

  • 静态内容缓存——不经常更改的文件,如图像文件(JPEG、PNG)和代码文件(CSS、JavaScript),可以存储在边缘服务器上,以便从内存或磁盘快速检索。
  • 缓存动态内容——许多Web应用程序为每个页面请求生成新的HTML。通过在短时间内缓存生成的HTML的一个副本,您可以显著减少必须生成的页面总数,同时仍然交付足够新鲜的内容来满足您的需求。

例如,如果一个页面每秒有10个视图,而您将其缓存1秒,那么对该页面的90%的请求将来自缓存。如果单独缓存静态内容,即使是新生成的页面版本也可能主要由缓存的内容组成。

缓存web应用程序生成的内容有三种主要技术:

  • 将内容移动到离用户更近的地方——将内容的副本保持在离用户更近的地方,可以减少其传输时间。
  • 将内容移动到更快的机器上——内容可以保存在更快的机器上,以便更快地检索。
  • 将内容从过度使用的机器上移开——机器有时在特定任务上的运行速度比基准测试慢得多,因为它们忙于其他任务。在不同的机器上进行缓存可以提高缓存资源的性能,也可以提高非缓存资源的性能,因为主机的过载更少。

web应用程序的缓存可以从内部(web应用程序服务器)到外部实现。首先,缓存用于动态内容,以减少应用服务器上的负载。然后,缓存用于静态内容(包括动态内容的临时副本),进一步卸载应用服务器。然后缓存将从应用服务器转移到速度更快和/或更接近用户的机器上,从而减轻应用服务器的负担,减少检索和传输时间。

改进的缓存可以极大地加快应用程序的速度。对于许多web页面,静态数据(如大型图像文件)占内容的一半以上。在没有缓存的情况下,检索和传输这样的数据可能需要几秒钟,但是如果数据是本地缓存的,那么只需要几秒钟。

作为在实践中如何使用缓存的示例,NGINX和NGINX Plus使用两个指令来设置缓存:proxy_cache_path和proxy_cache。您可以指定缓存位置和大小、缓存中保存的最大时间文件以及其他参数。使用第三个(也是非常流行的)指令proxy_cache_use_陈腐,您甚至可以在提供新鲜内容的服务器繁忙或宕机时直接使用缓存来提供陈旧的内容,从而为客户机提供一些内容,而不是什么也没有。从用户的角度来看,这可能会极大地提高站点或应用程序的正常运行时间。

NGINX Plus具有高级缓存功能,包括支持缓存清除和在仪表板上显示缓存状态,以便实时监控活动。

有关NGINX缓存的更多信息,请参阅参考文档和NGINX Plus管理指南。

注意:缓存跨越了开发应用程序的人员、进行资本投资决策的人员和实时运行网络的人员之间的组织界线。复杂的缓存策略(如这里提到的那些)是DevOps透视图价值的一个很好的例子,在DevOps透视图中,应用程序开发人员、体系结构和操作透视图被合并,以帮助满足站点功能、响应时间、安全性和业务结果(如完成的事务或销售)的目标。

技巧4 -压缩数据

压缩是一个巨大的潜在性能加速器。对于照片(JPEG和PNG)、视频(MPEG - 4)和音乐(MP3)等,都有精心设计和高效的压缩标准。这些标准中的每一个都将文件大小减少一个数量级或更多。

文本数据——包括HTML(包括纯文本和HTML标记)、CSS和JavaScript等代码——通常是未压缩传输的。压缩这些数据可能会对web应用程序的性能产生不成比例的影响,特别是对于移动连接缓慢或受限的客户端。

这是因为文本数据通常足以让用户与页面交互,而在页面中,多媒体数据可能更具支持性或装饰性。智能内容压缩可以减少HTML、Javascript、CSS和其他基于文本的内容的带宽需求,通常可以减少30%或更多,并相应地减少加载时间。

如果使用SSL,压缩会减少必须经过SSL编码的数据量,从而抵消了压缩数据所需的一些CPU时间。

压缩文本数据的方法各不相同。例如,请参阅技巧6了解SPDY和HTTP/2中的一个新的文本压缩方案,该方案专门针对头数据进行了调整。作为文本压缩的另一个例子,您可以在NGINX中打开GZIP压缩。在预压缩服务上的文本数据之后,可以使用gzip_static指令直接提供压缩后的.gz文件。

技巧5 -优化SSL/TLS

安全套接字层(SSL)协议及其后续协议传输层安全(TLS)协议正在越来越多的网站上使用。SSL/TLS对从源服务器传输到用户的数据进行加密,以帮助提高站点安全性。影响这一趋势的部分原因是,谷歌现在使用SSL/TLS作为对搜索引擎排名的积极影响。

尽管越来越受欢迎,但SSL/TLS涉及的性能问题仍然是许多站点的症结所在。SSL/TLS降低网站性能有两个原因:

  • 每当打开新连接时,建立加密密钥所需的初始握手。浏览器使用HTTP/1的方式。为每台服务器建立多个连接。
  • 在服务器上加密数据和在客户机上解密数据的持续开销。

为了鼓励使用SSL/TLS, HTTP/2和SPDY(在下一篇技巧文章中描述)的作者设计了这些协议,使浏览器在每个浏览器会话中只需要一个连接。这大大减少了SSL开销的两个主要来源之一。然而,现在可以做更多的工作来改进通过SSL/TLS交付的应用程序的性能。

优化SSL/TLS的机制因web服务器而异。例如,NGINX使用OpenSSL在标准的商用硬件上运行,以提供类似于专用硬件解决方案的性能。NGINX SSL性能有良好的文档记录,并将执行SSL/TLS加密和解密的时间和CPU消耗降到很低。

此外,有关如何提高SSL/TLS性能的详细信息,请参阅本文。简而言之,这些技术是:

  • 会话缓存——使用ssl_session_cache指令缓存使用SSL/TLS保护每个新连接时使用的参数。
  • 会话票证或ID——这些信息存储在票证或ID中关于特定SSL/TLS会话的信息,这样就可以顺利地重用连接,而不需要新的握手。
  • 通过缓存SSL/TLS证书信息,减少握手时间。

NGINX和NGINX Plus可用于SSL/TLS终止——处理客户机流量的加密和解密,同时与其他服务器进行明文通信。要设置NGINX或NGINX Plus来处理SSL/TLS终止,请参阅HTTPS连接和加密TCP连接的说明。

技巧6 -实现HTTP/2或SPDY

(编辑:济源站长网)

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

热点阅读