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: И вот код для драйвера синхронизации
Я использую Jongo в качестве оболочки для драйвера синхронизации Java и vertx-hk2 для внедрения зависимостей в мой текст REST.