3

クライアントとサーバーの通信に Akka を使用することを考えており、データ転送のベンチマークを試みています。現在、各メッセージが 8 つの文字列フィールドを持つケース クラスである 100 万のメッセージを送信しようとしています。

現時点では、許容できるパフォーマンスを得るのに苦労しています。クライアントとサーバーで約 600KB/s の転送速度とアイドル状態の CPU が見られるため、何か問題が発生しています。多分それは私たちのネット設定です。

これは私たちの 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://server@instance.myserver.com: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://server@instance.myserver.com:2553/user/receptionist"]
      establishing-get-contacts-interval = "10s"
      refresh-contacts-interval = "10s"
    }
  }

}

アップデート:

最後に、シリアライゼーションに関する議論 (以下を参照) にもかかわらず、ペイロードを変換してバイト配列を使用するようにしました。これにより、シリアライゼーションはテストに影響しません。jeroMQ を使用した 24 GB RAM のコア i7 (つまり、Java で再実装された zeroMQ - まだ最速ではない) で、生の akka (つまり、zeroMQ プラグインなし) で約 200k メッセージ/秒または約 20 MB/秒が一貫して見られることがわかりました。約 10k メッセージ/秒、つまり 1MB/秒弱でした。akka + zeroMQ を試してみると、パフォーマンスが悪化しました。

4

2 に答える 2