Webflux-jaxb会影响反应式应用程序的性能吗?

时间:2019-03-13 11:09:59

标签: spring kotlin jaxb netty spring-webflux

我有主要是解析xml并返回json响应的webflux应用程序。应用程序处理的最大xml大小约为9MB,就像json响应一样。

问题是我的应用程序吞吐量仅为16TPS。

我花了几天时间调试应用程序,以发现问题所在,并且我认为JAXB是瓶颈。

我尝试了一些JAXB改进,例如从byteInputStream而不是StringReader解组等。

所以,我的问题是,jaxb是否不适用于响应式应用程序?

1 个答案:

答案 0 :(得分:1)

您的应用程序正在执行的操作声音大多受IO限制,因为它解析(相对大)从请求中读取的文档。读取流可能很慢(也取决于网络),并且解析XML也不是最快的事情(我不知道您还需要做什么来准备响应)。

可以将这两个任务都卸载到不同的线程池中:

  1. 在读取请求时不要阻塞客户端线程(通过在Spring中使用Mono<RequestBody>而不是RequestBody可以轻松实现)
  2. 将非阻塞解析器用作@Strelok helpfully commented

除非您的应用同时也在做其他事情(这就是您要做的其他事情),否则您并没有真正从反应式架构中受益。对于所有IO绑定的应用程序通常都是这样。响应式架构不能很好地处理大多数IO任务。

当然,我所说的大部分都是推测的,因为我没有看到您的任何代码,也没有对您的应用程序有任何了解。但是,这些是一些通用准则。如果不确切地知道 您的应用程序内部发生了什么以及实际是什么数字,就不可能给出更准确的答案。即使那样,它也可能涉及。 (顺便说一句,这可能就是为什么有人(不是我)投票结束了您的问题)