API性能调优转载
概述
API/服务性能在为用户提供更好的体验方面发挥着重要作用,本文介绍几种技巧来提高API/服务的性能。可以从如下几个指标进行衡量
- 响应时间:衡量API/服务的响应速度
- 有效负载及其大小:通过网络传输的数据量
- 吞吐量:调用API/服务的次数
可以从如下参数进行优化,以使API/服务性能更好
缓存
这是一种广泛使用的技术,可以在调用API/服务时减少对服务器的点击,从而减少向客户端提供请求所需的时间。缓存可以在CDN层或API网关层进行,也可以在两者中进行,具体取决于是否需要避免调用到服务器。对于这种缓存,可以考虑在内容没有任何更改的情况下返回相同响应的API。必须相应地设置缓存持续时间才能从服务器获取最新响应
压缩
在通过网络传输内容之前压缩内容可以避免网络层的延迟。像Brotli或GZip这样的压缩可以用来实现这一点。尽管它增加了压缩/解压缩的处理开销,但在它上花费的时间将小于在网络上传输数据所花费的时间。
净负荷
服务器作为对 API 的响应返回的数据量在决定该 API 的性能方面起着重要作用。只向客户端发送所需的数据可以减少将数据传输到客户端的网络和其他开销。
日志
避免将数据过多地记录到日志文件中,因为这会使服务器花费时间进行日志记录,而不是花费时间处理请求。设置为适当的日志级别以避免详细的日志记录。作为最佳实践,无论配置了什么日志级别,都应考虑在进行日志记录之前检查日志级别。这将避免在将参数传递给记录器方法时发生字符串串联或对象转换操作。这将节省代码的内存和执行时间。例如,在Java中,即使日志级别设置为INFO,下面的语句也会对String进行串联。
log.debug("This is a test "+"Message");
异步日志记录是另一个可以考虑提高性能的选项,因为它不需要等待日志记录完成。这种方法的唯一缺点是,在将详细信息记录到日志文件中时可能会有延迟。
优化API/服务代码
以下是在服务器级别优化代码可以遵循的一些最佳实践:
- 在服务器上缓存频繁访问的内容。例如,可以缓存数据库中频繁访问的数据,以避免调用数据库。
- 避免将内容从一种格式转换为另一种格式。例如,在Java中,将JSON转换为String的操作成本更高,应该尽可能避免。
- 仅从数据库或任何其他数据源获取所需的数据。
- 使用连接池连接到数据库或任何其他数据源。
- 急于在启动过程中初始化应用程序所需的内容/对象/详细信息,以避免在初始请求上花费时间。
- 避免/减少代码中的同步区域/块。
- 为外部/第三方调用配置适当的超时,以避免线程等待。
自动缩放
自动伸缩是另一种功能,通过它,我们可以通过根据传入流量放大/缩小要服务的应用程序实例的数量来提高API/服务的性能。需要测量单个实例的容量,并且可以根据API/服务的预期流量来决定要放大/缩小的实例数量。除此之外,实例的大小可以根据所需或可用的基础设施来决定。通过在应用程序投入生产之前进行性能测试,最终确定实例大小和扩展需求。
优化配置
优化应用程序和应用程序服务器相关设置以获得最佳性能。以下是一些可以进行优化以获得更好性能的领域
- 连接池
- 线程池
- 内存和GC
- 缓存/缓存框架
- 自动缩放
- Web服务器
- 应用程序中使用的其他框架/第三方应用程序。
总结
最好通过进行模拟类似生产行为的性能测试来调整这些设置。
优化API/服务的性能有助于改善应用程序/网站的整体用户体验,并优化其使用的基础设施。这可以通过使用上述部分/全部最佳实践或调整技巧来实现。当然,所有这些方法都有利弊。根据您的应用程序的需要,取得适当的平衡。