2013-09-07 2 views
0

У меня есть следующие архитектуры в данный момент:Debug недостающих сообщений в Akka

нагрузки (Play приложение с основным интерфейсом для испытаний под нагрузкой) -> Шлюз (опрыскивание REST интерфейса для входящих сообщений) -> Processor (Акка приложение, которое работает с MongoDB) -> MongoDB

Все работает нормально, пока количество сообщений, которые я проталкиваю, низок. Однако, когда я пытаюсь подтолкнуть 10000 событий, это будет в конечном итоге на MongoDB в качестве документов, оно останавливается в случайных местах, например, в сообщении 742 или сообщении 982 и ничего не делает после.

Что было бы лучшим способом отладить такие ситуации? На стороне нагрузки я просто нажав трудно в службу REST:

for (i ← 0 until users) workerRouter ! Load(server, i) 

, а затем в workerRouter

WS.url(server + "/track/message").post(Json.toJson(newUser)).map { response => 
    println(response.body) 
    true 
} 

На стороне распыления:

pathPrefix("track") { 
    path("message") { 
    post { 
     entity(as[TrackObj]) { msg => 
     processors ! msg 
     complete("") 
     } 
    } 
    } 
} 

На стороне процессора это просто вставка в коллекцию. Любые предложения о том, с чего начать?

Обновление: Я попытался переместить логику создания сообщений в Gatewat, сделал цикл от 1 до 10000, и он работает нормально. Однако, если спрей и игра включены в трубопровод, он прерывает и случайные места. Любые предложения по отладке в этом случае?

+0

Вы пробовали консоль Typesafe? –

+0

Нет, я еще не пробовал. Я понял, что проблема в Play <-> Спрей-связь, потому что, если я делаю 100000 записей только на стороне Spray (значит, нет связи с HTTP), она работает нормально. –

+0

А, ок. Вы спрашивали у пользователя-распылителя мл? –

ответ

0

Я переместил приложение для тестирования нагрузки в раму Spray, и теперь он работает как шарм. Поэтому я полагаю, что проблема где-то в пути, который я использовал WS API в рамках Play:

WS.url(server + "/track/message").post(Json.toJson(newUser)).map { response => 
    println(response.body) 
    true 
} 

Проблема resovled но не решена, не будет работать на решение, основанное на Play.

0

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

Как только наша команда провела 3 месяца (!) При настройке приложения на надежную круглосуточную работу. И все же были ошибки. Затем мы применили метод Model checking (Spin). В течение пары недель мы реализовали модель, которая позволила нам получить надежное приложение. Тем не менее, проверка модели требует немного другого способа мышления, и ее может быть сложно начать.

+0

Я согласен, однако в моем случае все 3 слоя работают локально. Другими словами, не должно быть потерянных пакетов. Я признаю, что существуют ограничения памяти и тайм-ауты, но знание того, что вызывает падение сообщений, поможет мне.Я делал дополнительные тесты и выяснял, что это Spray <-> Слушайте общение, потому что если все сделано на стороне Spray без использования HTTP-канала (это означает, что шлюз для брандмауэра не используется), он отлично работает для записей 100K + без единой ошибки. –

Смежные вопросы