3

現在、Vert.x を使用してアプリケーションでいくつかのベンチマークを実行しており、mongo Java 同期または非同期ドライバーを使用したときの結果を比較しようとしています。

驚いたことに、同期ドライバーを使用した方が結果がはるかに優れているようです。これは、非同期ドライバーに比べて mongodb 接続をほとんど使用しないためです。その結果、mongo リクエストは遅くなり、mongo は常に async ドライバーでクラッシュして終了します。

非同期ドライバーが同期ドライバーと比較して非常に多くの接続を開くのは正常ですか? はいの場合、非同期ドライバーでより適切にスケーリングするために、mongo をレプリカ セットとしてインストールする必要がありますか?

たとえば、これは 16 スレッドで 30 秒間に 200 接続した wrk でのテスト結果です。

同期ドライバーを使用する場合:

~ • wrk -t16 -c200 -d30s http://localhost:8080/f0e7a0f5/status
    Running 30s test @ http://localhost:8080/f0e7a0f5/status
    16 threads and 200 connections
    Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   131.90ms   42.75ms 567.64ms   78.19%
    Req/Sec    92.61     21.28   171.00     66.36%
    43997 requests in 30.10s, 3.23MB read
    Socket errors: connect 0, read 55, write 0, timeout 0
    Requests/sec:   1461.89
    Transfer/sec:    109.93KB

非同期ドライバーを使用する (mongodb がクラッシュする) :

~ • wrk -t16 -c200 -d30s http://localhost:8080/f0e7a0f5/status
    Running 30s test @ http://localhost:8080/f0e7a0f5/status
    16 threads and 200 connections
    Thread Stats   Avg      Stdev     Max   +/- Stdev
     Latency   424.87ms  205.89ms   1.38s    73.84%
     Req/Sec    31.68     20.04   118.00     64.01%
    13597 requests in 30.11s, 1.00MB read
    Socket errors: connect 0, read 31, write 0, timeout 0
    Requests/sec:    451.65
    Transfer/sec:     33.96KB
  • MongoDB 3.2.7 ワイヤードタイガー
  • モンゴ Java ドライバー 3.2.2
  • 頂点 3.3.1
  • Mac OS X El Capitan 2.5 Ghz I7 16 Go RAM

更新 1 : ファイルとプロセスの制限を構成することで、ローカル マシンでの mongodb クラッシュの問題を解決しました: https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks ただし、 、非同期ドライバーとの接続をまだ多く開いているため、アプリケーションが遅くなります。

更新 2 : async ドライバーを使用したコードを次に示します。バーティクル : http://pastebin.com/SygKuDhg

設定:

"mongo-platform" : {
        "pool_name": "mongo-platform",
        "host": "localhost",
        "port": 27017,
        "db_name": "mongo_platform",
        "maxPoolSize": 250,
        "minPoolSize": 20,
        "useObjectId": true
    }

更新 3 : 同期ドライバーのコードは次のとおりです。

http://pastebin.com/FJ7JeSPU

Jongo を Java 同期ドライバーのラッパーとして使用し、vertx-hk2 を REST バーティクルへの依存性注入に使用しています。

4

0 に答える 0