Мы думаем об использовании Akka для связи с клиентским сервером и попытке сопоставить передачу данных. В настоящее время мы пытаемся отправить миллион сообщений, где каждое сообщение является классом case с 8 строковыми полями.Улучшение пропускной способности Akka
На данный момент мы изо всех сил пытаемся получить приемлемую производительность. Мы видим около 600KB/s скорость передачи и простаивающие процессоры на клиенте и сервере, поэтому что-то идет не так. Может быть, это наша сетевая конфигурация.
Это наш Akka конфигурации
Server {
akka {
extensions = ["akka.contrib.pattern.ClusterReceptionistExtension"]
loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = "DEBUG"
logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
log-dead-letters = 10
log-dead-letters-during-shutdown = on
actor {
provider = "akka.cluster.ClusterActorRefProvider"
}
remote {
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "instance.myserver.com"
port = 2553
maximum-frame-size = 1000 MiB
send-buffer-size = 2000 MiB
receive-buffer-size = 2000 MiB
}
}
cluster {
seed-nodes = ["akka.tcp://[email protected]:2553"]
roles = [master]
}
contrib.cluster.receptionist {
name = receptionist
role = "master"
number-of-contacts = 3
response-tunnel-receive-timeout = 300s
}
}
}
Client {
akka {
loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = "DEBUG"
logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "127.0.0.1"
port = 0
maximum-frame-size = 1000 MiB
send-buffer-size = 2000 MiB
receive-buffer-size = 2000 MiB
}
}
cluster-client {
initial-contacts = ["akka.tcp://[email protected]:2553/user/receptionist"]
establishing-get-contacts-interval = "10s"
refresh-contacts-interval = "10s"
}
}
}
UPDATE:
В конце концов, несмотря на дискуссии о сериализации (смотри ниже), мы просто конвертируются наши полезные нагрузки, чтобы использовать массивы байтов, что способ сериализации не будет влияют на тесты. Мы обнаружили, что на ядре i7 с 24-гигабайтным барабаном с использованием jeroMQ (т. Е. ZeroMQ, повторно реализованный в java, так что все еще не самый быстрый) мы видели последовательно около 200k msgs/sec или около 20 MB/sec, а на raw akka (то есть без плагина zeroMQ) мы видели около 10 тыс. msgs/sec или чуть меньше 1 МБ/с. Попытка на akka + zeroMQ сделала работу хуже.
Может ли вы показать некоторые из кода, который вы используете для отправки сообщений? – mattinbits
@ william-rubens вы можете поделиться окончательными результатами вашего теста? – Tolsi
@Tolsi, обновили вопрос с результатами нашего теста –