跳转到主要内容
Chinese, Simplified

在我之前的部分中,我分享了一些关于如何设计有效的 REST API 的最佳实践。


一个深思熟虑的设计还必须考虑 API 的性能方面。 如果 API 不能满足不断增长的请求以及不断变化的业务和/或客户需求,那么好的设计就毫无意义。


那么……什么是 API 性能?

就像任何性能一样,API 性能很大程度上取决于 API 如何响应和运行,以响应它收到的不同类型的请求。
示例:假设我们有一个面向客户的应用程序,用于显示客户的当前订单。 我们的应用程序从 API 获取订单详细信息。 但是现在,客户表示他们希望在一个地方查看所有订单(过去和当前)。 因此,我们构建了一个我的订单页面来显示客户的所有订单。 这意味着,我们的 API 现在将返回比以前更多的数据和更大的有效载荷。
我们如何确保我们的 API 能够将所有数据返回给我们的客户,而不会出现诸如延迟、服务器端错误和过多请求之类的问题?


性能提升技巧


1- 减少和限制有效载荷大小

响应数据的超大负载会减慢请求完成、其他服务调用的速度,并影响性能下降。 如您所知,现在我们正在为客户退回所有订单,而不仅仅是他们当前的订单,我们将不得不处理一些性能下降问题。
我们可以使用 GZip 压缩来减少我们的有效载荷大小。
这减少了我们在 Web 应用程序(客户端)上响应的下载大小,并提高了上传速度或某些实体(订单)的创建。
我们可以在 Web API 上使用 Deflate 压缩。
或者,我们可以将 Accept-Encodingrequest 标头更新为 gzip 。


2- 启用缓存

缓存是提高 API 性能的最简单方法之一。 如果我们有频繁返回相同响应的请求,那么该响应的缓存版本有助于避免额外的服务调用/数据库查询。
您需要确保在使用缓存定期使缓存中的数据无效时,尤其是在发生新数据更新时。
示例:假设我们的客户想要订购汽车零件,我们的应用调用一些汽车零件 API 来获取零件价格。 由于响应(部分价格)每周仅更改一次(@ 12:00am),因此我们可以在此之前的剩余时间内缓存响应。 这使我们不必每次都重新调用以返回相同的零件价格。


3-提供足够的网速

即使是设计最稳健的 API,缓慢的网络也会降低其性能。 不可靠的网络可能会导致停机,从而导致您的组织违反 SLA、服务条款和您可能对客户做出的承诺。 投资合适的网络基础设施很重要,这样我们才能保持所需的性能水平。
这可以通过利用和购买足够的云资源和基础设施来实现(例如:在 AWS 中,分配适当数量的 EC2 实例,使用网络负载均衡器)。
此外,如果您有大量后台进程,请在单独的线程上运行这些进程以避免阻塞请求。 您还可以使用镜像和内容交付网络 (CDN)(例如 CloudFront)来更快地处理全球不同地区的请求。


4- 防止意外调用、减速和滥用

您可能会遇到这样的情况,即您的 API 遭受 DDoS 攻击,这种攻击可能是恶意的、有意的,也可能是工程师调用 API 以从某个本地应用程序循环执行时无意的。
您可以通过测量交易并监控每个 IP 地址或每个 SSO/JWT 令牌(如果客户/调用应用程序在调用 API 之前获得授权)发生的交易数量来避免这种情况。
这种速率限制方法有助于减少会减慢 API 速度的过多请求,有助于处理意外调用/执行,并主动监控和识别可能的恶意活动。


5- 尝试在 PUT 上使用 PATCH

PUT 和 PATCH 操作会产生相同的结果,这是工程师之间的一个普遍误解。
它们在更新资源方面相似,但它们各自执行更新的方式不同。
PUT 操作通过向整个资源发送更新来更新资源。

PATCH 操作仅对需要更新的资源应用部分更新。 产生的 PATCH 调用产生更小的有效载荷,并大规模提高性能。
💡专业提示:尽管PATCH调用可以限制请求大小,但您应该注意它不是幂等的。 这意味着,PATCH 可能会通过一系列多次调用产生不同的结果。 因此,您应该仔细考虑使用 PATCH 请求的应用程序,并确保在需要时以幂等方式实现它们。 如果没有,请使用 PUT 请求。

API

6- 启用日志记录、监控和警报

这可能是您将在此处阅读的最重要的提示之一。 如果你应该从这篇文章中学到一件事,那就应该是这个! 没有就这一点进行谈判。
拥有日志、监控和警报可帮助工程师在问题成为问题之前对其进行诊断和修复。 许多 API(基于 Express/Node 的、Java、Go)都有用于评估以下内容的预定义端点:

  • /health
  • /metrics


如果您没有启用日志记录,并且存在潜在问题,您将无法跟踪源,或特定请求中出现问题的位置。
如果您没有启用监控,您将无法从分析的角度了解某些问题或错误发生的频率。 这将阻止您考虑可能的解决方案。
而且……如果您没有启用警报,您将不知道是否存在问题,直到客户(或更糟的是,客户)报告它。 害怕!

7- 启用分页

分页有助于从多个响应中创建内容桶。 这种优化有助于改进响应,同时保留传输/显示给客户的数据。
您可以标准化、细分和限制响应,这有助于降低结果的复杂性,并通过仅提供客户要求的响应/结果来改善整体客户体验。


结束语

我们知道 API 非常棒,如果针对性能进行适当的优化和增强,它可以非常强大地为企业和客户提供出色的体验。
业务需求和客户期望总是随着时间的推移而发展。 作为负责任的工程师,我们可以决定如何以高性能的方式构建 API,这可以帮助我们实现并超越我们的目标。
这些技巧只是冰山一角,适用于一般设置中的所有 API。 根据您的特定 API 和用例、它与哪些服务交互、调用它的频率、调用它的位置等,您可能需要以不同的方式实现这些技巧。

原文:https://abdulrwahab.medium.com/api-architecture-performance-best-practi…

本文:http://jiagoushi.pro/node/1634

Comments

jiagoushi 周四, 12/30/2021 - 22:23

非常棒

Article
知识星球
 
微信公众号
 
视频号