提高 AWS 性能的 5 个技巧

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

Amazon Web Services (AWS) 是基于云的计算服务的领先提供商,是用于 Web 应用程序开发的重要资源和平台。他们的客户包括 Acquia、Adobe、NASA、Netflix 和 Zynga 等知名企业。

AWS re:Invent 大会将于 10 月 6 日至 9 日在拉斯维加斯举行。

您可以使用 AWS 进行原型设计、与您直接管理的物理服务器一起进行混合部署或仅使用 AWS 进行部署。然而,您在 AWS 上看到的性能可能会有很大差异,就像在任何其他公共云上一样——而且您无法像对自己购买和管理的服务器那样直接控制 AWS 部署。因此,AWS 用户掌握了多项优化以充分利用环境。

2014 年年中在 AWS 上推出的 NGINX Plus 已经变得非常流行;近 40% 的 AWS 实施使用 NGINX 或 NGINX Plus。很大一部分原因是性能。 NGINX Plus 广泛用于跨实例的负载平衡,并以比许多替代方案更好的性价比处理流量高峰。

考虑到这些现实,这篇博文提供了一些技巧,可用于从 Amazon Web Services 中获得最佳性能。在适用的情况下,我们包括有关如何使用 NGINX Plus 实施这些技巧的细节。使用这些技巧可以立即改进 AWS 性能并开始逐步改进的过程,这将使您能够从基于 AWS 的工作中获得最大收益。

注意 。要提高所有 Web 应用程序的性能,无论它们位于何处,请参阅 10 条提高 10 倍性能的技巧

技巧 1:绩效计划

专家们使用术语“ 云宿醉 ”来描述云部署可能带来的一些困难,其中包括维护、支持和运行基于云的应用程序的意外成本。

战术云采用有一席之地——实验和“快速修复”,可以快速交付应用程序或削减成本。通过这些努力获得有关基于云的开发和部署的经验并积累数据。

随着你努力的增加,你需要制定一个计划。您需要管理您的供应商,雇用或培训人员以获得所需的能力,并了解未来对应用程序监控和管理的需求。

还要考虑:

  • 数据移动 。确定您接受和交付的数据是什么,需要什么安全性(太少会使您面临数据丢失,太多会花费太多钱),以及您的备份需求。
  • 高可用性 。使用反向代理服务器、负载平衡和请求路由都可以使您的实施更加灵活和适应性强。考虑将您的 NGINX 和其他实例分散到多个可用区以实现冗余,并使用 Auto Scaling 来处理流量高峰。
  • 增强网络 。 AWS 增强的网络功能提供更高的性能(每秒更多的数据包)和更低的延迟。增强联网仅适用于特定配置的特定实例类型,因此在您投入使用之前评估您的联网和其他需求。 (没有额外费用。)
  • 存储类型 。考虑默认使用 EBS (固态磁盘)存储。 EBS 存储速度更快,容量更大,并且您的数据和操作系统状态是持久的——但成本可能更高。

在您的早期工作中加入 NGINX Plus。 NGINX Plus 非常适合用作反向代理服务器(将请求管理与应用程序处理隔离开来)、负载平衡(通常与 Amazon Elastic Load Balancing 结合使用)以及在异构应用程序服务器之间进行请求路由。 NGINX Plus 可以支持非常大量的客户端连接,同时大大减少应用服务器的流量。

将未来实施计划与您从最初的努力中吸取的经验教训相结合,以更真实地估计资源需求和成本。在实施计划时继续调整计划。

技巧 2:实施负载平衡

负载平衡将请求分布到多个应用程序服务器。鉴于服务器性能在云环境中比使用您直接控制的服务器时更具可变性,因此负载平衡在云中比在其他地方更为重要。

AWS Elastic Load Balancing (ELB) 功能在多个 EC2 实例之间分配应用程序流量。 ELB 提供容错能力,并根据流量的数量和来源的变化进行无缝调整。 ELB 非常灵活,可以跨可用区工作。它支持 AWS Auto Scaling 和复杂的架构。

为了更好地控制,请在 ELB“下方”使用一个或多个 NGINX Plus 实例。 NGINX Plus 提供更好的配置控制、精确的日志记录、 应用程序健康检查 会话持久性 、SSL 终止、HTTP/2 终止、WebSocket 支持、缓存和负载平衡服务器组的动态配置。有关软件负载平衡的介绍,请参阅此 电子书 ,有关配置说明,请参阅此 博客文章

负载平衡有助于解决云环境中发现的几个潜在性能问题:

  • 内存不足 。一个实例的内存很容易耗尽。使用负载平衡以及此处列出的其他技巧来帮助您调整对每个实例的可用内存的需求。
  • 表现不一致 。相同类型的实例在性能上可能会有所不同。使用负载平衡来帮助您避免来自任何一个实例的瓶颈——无论是由于瞬态问题、性能随时间降低还是过载。
  • 带宽限制 。云存储卷的带宽可能低于硬件磁盘。使用负载平衡和此处列出的其他技巧来帮助您跨实例分散带宽需求。

NGINX Plus 扩展了 ELB 的功能,包括请求路由、URL 重写、URL 重定向、WebSocket 支持、SPDY 和 HTTP/2 支持、高级应用程序健康检查、连接限制和速率限制。 Auto scaling 只能通过 ELB 使用,因此如果您想将 Auto scaling 与 NGINX Plus 功能结合起来,请使用集成的 NGINX Plus/ELB 实现。这篇 博文 有详细信息,包括比较 ELB、NGINX Plus 以及 ELB 和 NGINX Plus 组合的矩阵。

技巧 3:缓存静态和动态文件

缓存是一种使用非常广泛的性能改进,并且有充分的理由在基于 AWS 的应用程序中包含强大的缓存支持。您可以使用缓存将文件放在更靠近最终用户的位置,并将其放在为快速交付特定类型的缓存文件而定制的实例上。缓存减轻了延迟的影响,并从移动静态文件的繁忙工作中卸载了应用程序服务器。

缓存是 AWS 上 NGINX Plus 的核心应用程序。 AWS 的灵活性使您可以更轻松地实施和比较不同的缓存方法,从而为每个 Web 应用程序实现最佳缓存实施。您可以在 AWS 区域内缓存文件以获得最佳性能。负载均衡和缓存到位后,选择计算优化、存储优化和其他 EC2 实例的组合来满足您的需求,这可以帮助您降低成本。

最大化云托管性能的大部分技术是将实例类型与 CPU 功率、内存、处理速度、存储量和带宽的特定需求相匹配。缓存允许您调整您的需求以匹配特定的实例类型,包括缓存的实例和通过缓存卸载的实例,从而能够进行更多处理。这可以帮助您避免性能问题——内存不足、性能不一致和带宽限制——在之前的技巧中提到过。

虽然 NGINX Plus 是一个非常快速、高性能的静态文件缓存服务器,但您也可以有效地缓存动态文件。随着请求的快速增加,应用服务器可能成为交付瓶颈,性能下降与流量增加不成比例。要提高应用程序性能,请实施微缓存——将应用服务器新生成的文件缓存几秒钟。用户仍然可以获得新鲜的内容,而缓存副本可以满足大部分请求。 (如果一个文件被缓存了 10 秒,服务器每秒接收 10 个请求,那么 99% 的请求会被缓存的副本快速填充。)

要了解有关使用 NGINX 和 NGINX Plus 进行缓存的更多信息,请参阅此 博客文章

技巧 4:基准测试和监控应用程序性能

云服务与传统实施方式截然不同,因此提前设定性能标准非常重要,然后在您了解更多信息时对其进行修改。您总是希望能够将在云中运行的应用程序的价格/性能与您在自己拥有和直接管理的服务器上预期的性能进行比较。

为页面加载时间、第一个字节出现在屏幕上的时间、发起的交易、完成的交易以及用于监控网络应用程序性能的其他测量设置标准。准备好比较应用程序开发时间和对云和直接托管服务器实施的持续支持要求。这样,您不仅可以管理特定的应用程序,还可以管理跨不同实现类型的应用程序组合。

Amazon Cloudwatch 为在 AWS 上运行的应用程序提供集成监控。您可以监控资源利用率、应用程序性能并执行简单的健康检查。 NGINX Plus 添加了高级健康检查和复杂的实时活动监控。您可以直接在 NGINX Plus 中查看仪表板,或者将 NGINX Plus 统计信息连接到其他仪表板和第三方工具。您可以获得连接、请求、正常运行时间等的统计信息 – 每台服务器、每组以及整个部署。

技巧 5:在云中使用 DevOps 方法

使用 DevOps 方法 ——统一应用程序开发和操作实践以满足技术和业务目标——是有效使用网络的新标准。 DevOps 有时甚至被称为 DevSecOps ,包括安全架构和对混合漏洞的实时响应。

DevOps 的目标被简单地描述为:“ 以更少的流程创造一种高度自由、高度责任感的文化 。”由于其灵活性、可扩展性和对现代工具的轻松访问,云实施特别适合支持 DevOps 方法。您可以快速轻松地尝试实施中的变体,根据需要使用几乎无限的资源快速扩展应用程序(对测试非常有用),并使用 DevOps 工具,例如 NGINX Plus、Puppet、Chef 和 Zookeeper。比较 HTTP/1 性能和 HTTP/2 性能等困难的任务在云环境中更容易完成。

支持 DevOps 实施方法的关键技术是使用 微服务架构 ,它首先将单体应用程序重构为小型的互连服务。微服务架构非常适合 AWS 实施,尤其是当您使用负载平衡、缓存、持续监控和 DevOps 方法时。

使用易于使用的强大监控工具(如前一个技巧中所述)和快速更改应用程序以包含报告代码的能力,以在快速变化且灵活的云环境中实施强大的 DevOps 方法。

您可以将云实施用作应用程序开发和运营新方法的试验台,帮助您改变您在用于交付应用程序的所有环境中的工作方式。

结论

充分利用您的 AWS 实施是一项艰苦的工作,但结果可能非常出色。通过采取深思熟虑的方法,您可以实现在传统实施中可能难以实现的目标。然后,您可以灵活地结合使用云和传统基础设施来实现您的长期目标。

NGINX Plus 是领先的 AWS 实施的重要组成部分,并将继续发挥其作为云中应用程序交付的重要工具的作用。请参阅此 博客文章 以查找指向 AWS 上的 NGINX Plus 的链接,以及 此博客文章 以获取定价信息。

我们邀请您在下方分享您的评论,或使用#NGINX 和#webperf 标签发布您的意见。