八个常见的微服务性能问题(以及解决方法)

发布于:2020-12-29 17:47:19

0

2466

0

微服务 性能问题 解决方法 java

并非所有的微服务性能问题都是平等的:一些易于修复,而另一些则需要更多的努力。查看您可能遇到的八个常见问题。现在是时候制定一个强有力的策略来解决今天的问题并在将来减轻它们的时候了。

微服务本来可以使一切变得更快,但是对于许多Java开发人员而言,现实是新的复杂性层,它可能导致性能问题。同时,开发人员的任务越来越多,需要对性能问题进行故障排除。例如,JRebel最近的一项调查发现,有51%的Java开发人员在开发过程中承担了非功能性性能要求。

第一步是找到那些性能问题。应用程序性能监视工具可在开发和生产过程中识别问题,而服务网格解决方案可简化服务间通信并提供见解。测试工具着眼于微服务在负载下如何运行或失败,而性能分析工具则插入测试环境中以评估性能问题,例如内存泄漏和线程问题。

早期分析和优化也很重要。看到代码如何与其他服务交互非常适合DevOps,帮助开发人员了解他们的工作将对生产产生的影响。

八个常见的微服务性能问题

早期分析还可以帮助开发人员确定可能的性能原因。但是,正如我们在以下示例中所示,并非所有微服务性能问题都是平等的:一些易于修复,而另一些则需要更多的努力。

1. N + 1个问题

也称为N + 1选择问题或N + 1查询,当服务从数据库请求列表时返回该列表,该列表返回对多个行或对象(N)的引用,然后分别请求这N个项目中的每一个。

幸运的是,解决方案可以像更改获取类型一样简单。

2.性能反模式

N + 1问题是反模式的一个例子。性能反模式通常集中在效率低下或多余的查询上,这些查询会在负载或规模上复合。这些性能反模式可能由于多种原因而出现,并且仅在特定情况下出现,但可能导致性能不佳甚至失败。

示例包括添加超时和重试功能。从理论上讲是个好主意,但是如果调用的服务非常慢并且总是触发超时,则重试会给已经超载的系统带来额外的压力,从而加剧延迟问题。

3.同步请求

在错误的情况下同步调用服务可能会导致严重的性能瓶颈,无论是对于单个服务还是对于组合的应用程序而言。

要解决此问题,请使用异步请求,从而服务可以向另一个服务发出请求,并在该请求得到满足时立即返回,从而允许进行更多的并发工作。但是,开发人员需要确保接收服务可以快速满足请求,并根据需要进行扩展以处理大量请求。

4.过度活跃的服务

微服务是否收到太多无法处理的请求?在每个服务的基础上限制请求或使用固定的连接限制可以帮助接收服务满足需求。节流还可以防止活动过度的服务耗尽活动较少但同样重要的服务。

需要进行权衡—节流将使应用程序变慢—但它比完全失败的应用程序要好。

5.第三方请求

有时,第三方服务或API可能导致应用程序出现严重问题,例如不可接受的延迟。这就是为什么开发人员必须了解第三方的局限性的原因,特别是在大规模情况下。

要问的问题包括:他们能否跟上预期的需求并保持绩效?SLA与应用程序本身兼容吗?

主动的最佳实践步骤也有帮助,例如缓存,预取或使用弹性模式来防止服务引起级联故障。

6.应用天花板

即使正确配置和优化的服务也可以达到性能上限。如果所有请求都被认为是必要的并且已被优化,但是服务的过载仍在发生,则跨其他容器的负载平衡将改善可伸缩性。值得一提的是自动缩放,通过在必要时添加和删除容器来动态调整传入请求的负载。

但是,请确保实现最大的容器数,并制定防御分布式拒绝服务(DDoS)攻击的策略,尤其是在应用程序位于公共云中的情况下。

此外,集群技术以及潜在地将某些服务迁移到NoSQL解决方案以实现比RDBMS更高的规模。但是,如果跨服务需要类似ACID的事务,则要做好准备以处理最终的一致性并补偿操作。

7.数据存储

微服务使开发人员可以灵活地在一个应用程序中使用多个数据存储,但是选择错误的数据库类型可能会带来重大的性能(和金钱)后果。

在逐个服务级别上为微服务选择数据存储,确保每个微存储都适合该工作。

为了处理大量快速变化的非结构化数据,最好使用可伸缩的或无模式的NoQSL数据存储。

对于需要数据原子性,一致性,隔离性和持久性的情况,应使用RDBMS。

8.数据库调用

当服务从多个数据库请求数据时,这些数据库中的每个数据库都有能力承受该请求。如果这种情况经常发生,则将信息缓存在一个易于访问的位置(而不是依赖于多个数据库)可以缓解此问题。可以设置通用规则,例如时间限制和防止通话过多。

内存缓存用于高性能和分布式系统中,以存储任意数据以进行快速本地访问。一些数据库系统提供本地内存缓存。

最后的想法

显然,解决基于Java的微服务中的性能问题不是一项简单的一次性任务。但是,鉴于增长和对它们的依赖性越来越大,这是一个不容忽视的大问题。

现在是时候制定一个强有力的策略来解决今天的问题并在将来减轻它们的时候了。