ServiceStack: замените веб-службу очередью сообщений

Я работаю над проектом, который предоставляет API для получения информации о продуктах наших партнеров.

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

В настоящее время у нас возникают некоторые проблемы с производительностью из-за блокировки службы REST, и я ищу лучшее решение для организации нашей платформы поиска продуктов.

Как я видел, ServiceStack RedisMQ может предоставить асинхронное решение для длительной связи. Но у меня есть несколько вопросов (потому что у меня мало опыта работы с MQ):

  1. Как я могу заменить службу REST на MQ
  2. Как я могу получить информацию из MQ на веб-странице (с REST я могу использовать любую подходящую библиотеку JS, например jQuery, и делать запросы ajax)
  3. Как мне организовать MQ API для моего сервиса вместо REST, который могут использовать наши клиенты (на своих сайтах).

person shadeglare    schedule 09.06.2013    source источник
comment
Вы пробовали ТПЛ. Например, Parallel.Invoke(()=>SearchSite1(),()=>SearchSite2());   -  person I4V    schedule 09.06.2013
comment
Ага. но эти запросы действительно могут занять много времени.   -  person shadeglare    schedule 10.06.2013


Ответы (1)


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

Я бы посоветовал вам сделать так, чтобы ваше приложение «потоковало» данные обратно, а не ждало возврата блокирующего спокойного вызова. Все партнерские «выборки» должны выполняться как асинхронный обратный вызов. По мере получения результатов вы можете выполнить обратную запись в поток.

ИМХО, переключение на очередь сообщений ничего вам не купит. В самой элементарной форме рассматривайте очереди сообщений как каналы связи в распределенной вычислительной среде. Транспортные механизмы могут различаться, но в первую очередь очередь представляет собой механизм двухточечной связи.

person JVXR    schedule 30.07.2013