Camel-restlet дает лучшую производительность по сравнению с Camel-Jetty и Camel-Serlet - Какие-то конкретные причины? - PullRequest
0 голосов
/ 11 сентября 2018

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

Мои маршруты верблюдов просты: они принимают запрос от конечной точки отдыха на север, выполняют обработку запроса, вызывают другую конечную точку отдыха на юг через компонент camel-netty4-http, обрабатывают ответ и отправляют его обратно на север.

Сейчас я делаю анализ производительности с помощью JMeter.Я заметил, что при 10 потоках производительность моего маршрута на верблюде (средняя задержка 220 мс и пропускная способность ~ 38) совпадает с результатами, полученными от JMeter, когда я вызываю ту же самую конечную точку покоя на юг напрямую через JMeter (средняя задержка 210 мс и пропускная способность ~ 39),

Но когда я увеличиваю количество потоков с 10 до 100 или более в Jmeter, результаты получаются странными:

  • , когда я вызываю южную конечную точку покоя напрямую: задержка 2230 мс и пропускная способность~ 20
  • когда я вызываю ту же самую южную конечную точку отдыха через мой верблюжий маршрут, задержка составляет 230 мс, а пропускная способность ~ 38.

Я проделал тот же тест, просто изменив компонент rest с camel-restlet на camel-servelet, camel-jetty, и результаты совпадают с результатами, которые я получил от JMeter при вызове конечной точки отдыха на юг.непосредственно через JMeter (средняя задержка 2230 мс и пропускная способность ~ 20).

Может кто-нибудь помочь мне понять причины повышения производительности с компонентом Camel-Restlet по сравнению с другими компонентами Camel-Jetty или Camel-сервлет)

1 Ответ

0 голосов
/ 07 февраля 2019

По умолчанию camel-restlet является асинхронным и больше подходит для вашего теста. Вы можете установить опцию synchronous = true в вашей конечной точке, чтобы быть в тех же условиях.

<from uri="restlet:/path/?synchronous=true" />

http://camel.apache.org/restlet.html

Или включить асинхронную работу на верблюжьем сервлете:

<servlet> 
  <servlet-name>CamelServlet</servlet-name> 
  <display-name>Camel Http Transport Servlet</display-name> 
  <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class> 
  <init-param> <param-name>async</param-name> <param-value>true</param-value> </init-param> 
  <load-on-startup>1</load-on-startup> 
  <async-supported>true</async-supported>
</servlet>

Вы также можете попробовать конечную точку netty4 (вы уже используете ее в качестве клиента), которая полностью реагирует и может обрабатывать большие параллельные соединения.

<from uri="netty4-http:http://0.0.0.0:{{port}}/path/">

http://camel.apache.org/netty4-http.html

...