У меня есть простой надувать сервер бережливость:надувать Нет асинхронный не выполняет
import com.twitter.finagle.Thrift
import scala.concurrent.Future
import com.twitter.util.{ Await, Future }
object Main{
def main(args: Array[String]) {
var count = 0
val myserver = Thrift.serveIface("0.0.0.0:9090", new RealTimeDatabasePageImpressions[com.twitter.util.Future] {
def saveOrUpdate(pageImpression: PageImpressions):
com.twitter.util.Future[Boolean] = {
count += 1
println(count)
com.twitter.util.Future.value(true)
}
}
Await.ready(myserver)
}
}
Этот сервер работает, но у меня есть одна большая проблема: я написал бережливость nodejs клиента с цикл. Он выполняет 10.000 бережливого запроса. Но это не асинхронно. Он выполняет 500 запросов и остановок. Через некоторое время, 2 или 3 секунды, будет выполнено еще 300 запросов. Теперь вопрос: зачем это происходит? Что-то не так с моим сервером или клиентом? Я использую только созданный apache сведенный nodejs код. Нет обертки. Функция выполняется 10 000 раз. Я думаю, что nodejs не проблема:
function callFunc(i){
console.log("started executing: " + i);
var connection = thrift.createConnection("IP", 9090, {
transport: transport,
protocol: protocol
});
connection.on('error', function (err) {
console.log(err);
});
// Create a Calculator client with the connection
var client = thrift.createClient(Realtime_pageImpressions, connection);
var rand = Math.random() * (20000 - 1);
var trackId = trackIds[Math.round(Math.random() * 10)];
var values = new PageImpressions({
trackId: trackId,
day: 4,
hour: 4,
minute: 13,
pageId: 'blabla',
uniqueImpressions: Math.random() * (13000 - 1),
sumImpressions: Math.random() * (1000450 - 1)
});
client.saveOrUpdate(values, function (error, message) {
if (message) {
console.log("Successful, got Message: " + message);
} else {
console.log("Error with Message: " + error);
}
});
return true;
}
for(var i = 0; i < 10000; i++){
callFunc(i);
}
Для меня: Звучит очень плохо. Я имею в виду, что kafka может обрабатывать 2 миллиона запросов в секунду тремя машинами. 500 запросов за 2 секунды звучат очень плохо. Но я проверю это. Есть ли у вас другие стратегии для обработки большего количества запросов? –
Не знаю, где у вас есть 2-миллионное число. Официальная контрольная страница Kafka обещает 100 тыс. Сообщений: http://kafka.apache.org/07/performance.html. Также обратите внимание, что «в секунду» и «в то же время» не совсем то же самое, что «машина» не является очень точной спецификацией, что Kafka является io-bound, а ваши вещи - все-cpu .. – Dima
Также, вы включили GC (как на сервере, так и на клиенте)? Если запросы обрабатываются в очередях, за которыми следуют длинные паузы, это, вероятно, признак полной загрузки GC. – Dima