MongoDB Java Driver Sync & Async

В настоящее время я выполняю некоторые тесты для своего приложения, используя Vert.x, и пытаюсь сравнить результаты, когда я использую синхронизирующий драйвер mongo java или асинхронный драйвер.

И к моему удивлению, результаты, кажется, намного лучше с драйвером синхронизации, потому что он использует действительно немного соединений mongodb по сравнению с асинхронным. Как следствие, запросы монго медленнее, и монго всегда завершается сбоем с асинхронным драйвером.

Это нормально, что асинхронный драйвер открывает так много соединений по сравнению с синхронизированным? Если да, нужно ли устанавливать mongo в качестве реплики, настроенной на лучшее масштабирование с помощью асинхронного драйвера?

Например, вот результаты теста с wrk с 200 соединениями за 30 секунд с 16 потоками.

С драйвером синхронизации:

~ • 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

С драйвером Async (сбой 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 WiredTiger
  • Mongo Java Driver 3.2.2
  • Vertx 3.3.1
  • Mac OS X El Capitan 2,5 ГГц I7 16 Go RAM

ОБНОВЛЕНИЕ 1: Я решил проблему сбоя mongodb на своем локальном компьютере, настроив файлы и ограничения процесса: https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks Однако У меня все еще есть много открытых соединений с асинхронным драйвером, которые замедляют мое приложение.

ОБНОВЛЕНИЕ 2: Вот некоторый код с асинхронным драйвером. Вертикаль: 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.

0 ответов

Другие вопросы по тегам