Webflux - может ли jaxb повлиять на производительность реактивного приложения? - PullRequest
0 голосов
/ 13 марта 2019

У меня есть приложение webflux, которое в основном разбирает xml и возвращает ответ json.Максимальный размер xml, который обрабатывает приложение, составляет около 9 МБ, точно так же, как ответ json.

Проблема в том, что производительность моего приложения составляет всего 16TPS.

Я потратил несколько дней на отладку своего приложения, чтобы выяснить, что являетсянеправильно, и я думаю, что JAXB является узким местом.

Я пробовал несколько улучшений JAXB, таких как unmarshal из byteInputStream вместо StringReader и т. д.

Итак, мой вопрос, не адаптирован ли jaxb креактивные заявления?

1 Ответ

1 голос
/ 13 марта 2019

То, что делает ваше приложение звучит в основном с привязкой к вводу-выводу, так как оно анализирует (относительно большие) документы, которые оно читает из запроса. Чтение потока, вероятно, медленное (зависит также и от сети), и синтаксический анализ XML тоже не самый быстрый процесс (я не знаю, что еще нужно сделать, чтобы подготовить ответ).

В то время как вы могли бы перенести обе эти задачи в другой пул потоков:

  1. Не блокируйте поток клиента во время чтения запроса (это легко сделать, используя, например, Mono<RequestBody> в Spring вместо RequestBody)
  2. Используйте неблокирующий синтаксический анализатор, как @ Полезно прокомментировал Стрелок

Если ваше приложение тем временем не делает что-то еще (вот где другие вещи, которые вы делаете, входят в картину), вы на самом деле не извлекаете выгоду из реактивной архитектуры. Как правило, это верно для всех приложений, связанных с IO. Реактивная архитектура не очень хорошо сочетается с задачами в основном ввода-вывода.

Конечно, все, что я сказал, является в основном гипотезой, поскольку я не видел ни вашего кода, ни какой-либо информации о вашем приложении. Но это некоторые общие рекомендации. Невозможно дать более точный ответ, не зная точно , что происходит внутри вашего приложения, и каковы фактические цифры. Даже тогда это может быть довольно захватывающим. (Кстати, именно поэтому кто-то (не я) проголосовал за закрытие вашего вопроса)

...